Servlet (动态web资源)

开发一个动态web资源(即开发一个Java程序向浏览器输出数据) 需完成以下两个步骤

  1.编写一个Java类,实现servelet接口

  2.把开发好的Java类部署到web服务器中

servlet入门(用servlet 在一个网页中显示 helloworld)(动态)(不使用IDE的情况下)

  1.在tomcat中新建一个web应用,然后在web应用中新建一个 web-inf/classes目录
  2.在classes目录中新建一个FirstServlet

 

 public class FirstServlet extends GenericServlet {
public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException {
OutputStream out = res.getOutputStream(); //字节流
out.write("hello world!!".getBytes()); //"hello world!!" 是字符 需变成字节
}
}

  3.set classpath=%classpath% .............servlet.jar 编译servlet

  (因为servlet属于j2ee,不是j2se,所以,需要配置一下classpath)(在dos命令行中)

  4.在web-inf目录中新建一个web.xml文件,配置servlet对外访问路径

  5.启动tomcat 访问

Servlet调用过程:
  1.连上web服务器

  2.发送http请求

  3.解析出想访问的主机名

  4.解析出想访问的web应用

  5.解析出想访问的web资源

  6.第一次创建servlet实例对象

  7.调用servlet对象的init方法完成初始化

  8.创建代表请求的request和代表响应的response调用servlet的service方法响应客户端请求

  9.service方法执行,向代表客户端响应的response对象写入了向客户机输出的数据

  10.service方法返回

  11.从response中取出数据,构建出HTTP响应,回写给客户机

  12.回写HTTP响应

  13.浏览器解析HTTP响应 显示数据

注:HttpServlet在实现了Servlet接口时,覆写了service方法,当继承了HttpServlet后  就不需要再写service方法,只需要写doGet  或者 doPost方法里面处理

Servlet的小细节:

  1.同一个Servlet可以被映射到多个URL上,即可以写多个<servlet-mapping>,也可以使用*通配符,但是只能有两种固定格式:

  一种格式是: " *.扩展名 ",  另外一种格式是(/*)

  2.web.xml文件的更改,不需要重新发布工程,会自动更新

  3.使用 * 通配符可能出现地址冲突的问题,都匹配某个请求的情况:遵循: 1.选长得最像的响应 2.通配符在前优先级最低

  4.Servlet不能独立运行,它的运行完全由Servlet引擎(web服务器用来调Servlet的java程序)来控制和调度

  5./*针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,

  也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其他请求服务,直至web容器退出(Tomcat关闭),servlet实例对象才会销毁*/

  6.在servlet的整个生命周期内,这个servlet的init方法只被调用一次,而对一个servlet的每次访问请求都导致servlet引擎调用一次service方法,

  对于每次访问请求,servlet请求都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,

  然后将这两个对象作为参数传递给它调用的servlet的service()方法,service方法再根据请求方式分别调用doXXX()方法

  7.如果在<servlet>元素中配置了一个<load-on-startup>(里面可以写正整数,数字越小,优先级越高)元素,

  那么WEB应用程序在启动时,就会装载并创建servlet的实例对象,以及调用servlet实例对象的init()方法 用途:在特定时刻,为web应用创建必要的数据库表和数据

  8.如果某个servlet的映射路径仅仅为一个 (/),那么这个servlet就成为当前web应用程序的缺省servlet 凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,

  它们的访问请求都交给缺省servlet处理,也就是说,缺省servlet用于处理所有其他servlet都不处理的访问请求

  在<tomcat的安装目录>\conf\web.xml文件中,注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个servlet设置为可缺省servlet

  由上: /*当访问tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet*/

  9.servlet的线程安全问题:service方法如果操作共享资源,则有可能出现线程安全问题

  如果某个servlet实现了SingleThreadModel接口(标记接口,无方法),那么servlet引擎将以单线程模式来调用其service方法

  (如果多个线程同时访问某个资源,则产生对应的多个servlet实例对象,并发的每个线程分别调用一个独立的servlet实例对象)

  实现SingleThreadModel接口并不能真正解决servlet的线程安全问题,因为servlet引擎会创建多个servlet实例对象,

  而 /*真正意义上解决多线程安全问题是指一个servlet实例对象被多个线程同时调用的问题*/ 故 SingleThreadModel接口(过时的)

web服务器在调用servlet的时候,会传递给servlet很多对象:前面讲到了ServletRequest , ServletSponse 还有一些其他的对象:如ServletConfig ServletContext session cookie 等

1./*ServletConfig对象(用于封装servlet的配置信息)*/

在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数

在servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,

将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息

该对象的作用: 1.获得字符集编码 2.获得数据库连接信息 3.获得配置文件,查看struts案例的web.xml文件

2./*ServletContext对象 (代表当前web应用)*/

  WEB容器在启动时,它会为每个web应用程序都创建出一个对应的ServletContext对象

  ServletConfig对象中维护了ServletContext对象的引用(即可以通过ServletConfig.getServletContext方法获得 (因为继承了HttpServlet也可以直接this.getServletContext ))

  ServletContext方法的应用

    1.多个Servlet通过ServletContext对象实现数据共享 ServletContext对象通常被称之为context/*域*/对象 (ServletContext域这个容器的作用范围:应用程序范围)

    2.获取web应用的初始化参数 <context-param>标签定义的参数为web应用的初始化参数 (会自动封装到ServletContext中)

    (ServletContext出生:web服务器启动(为每个web应用配一个ServletContext),死亡:web服务器关闭,或者web应用被删除)

    3.实现Servlet的转发(与重定向有所区别:Servlet的转发:别人找我借钱,我帮他向别人借 重定向:别人找我借钱,我让他找别人借)

    Servlet不适合用作数据的输出(网页要弄美观很麻烦),所以需要转给JSP(JSP可以看作一种特殊的Html,里面可以写java代码的Html)(用来专门显示数据)

    4.ServletContext读取web应用中的资源文件

    5.web应用中的普通Java程序如何读取资源文件 (servlet文件通过ServletContext,非servlet文件通过类装载器)

4.Servlet(动态web资源)的更多相关文章

  1. JavaWeb学习笔记——开发动态WEB资源(一)Java程序向浏览器输出数据

    开发一个动态web资源,即开发一个Java程序向浏览器输出数据,需要完成以下2个步骤: 1.编写一个Java类,实现Servlet接口 开发一个动态web资源必须实现javax.servlet.Ser ...

  2. JavaWeb学习笔记——开发动态WEB资源(五)servlet身份验证

    本工程的功能是实现Javaweb的servlet身份验证 一下是login.html文件中的代码 <!DOCTYPE html> <html> <head> < ...

  3. JavaWeb学习笔记——开发动态WEB资源(六)ServletConfig和ServletContext

    1.只有在第一次请求服务器产生实例的时候才会调用init()方法,有一种办法能在服务器一启动的时候就加载init()方法. 即服务器启动即加载Servlet,且按数字大小顺序实例化Servlet. 方 ...

  4. JavaWeb学习笔记——开发动态WEB资源(四)打印当前使用的是get方法

    该工程的名称是testhttp,功能是在页面中表格打印浏览过程中的相关头信息. 新建一个工程,然后在这个工程里面新建一个servlet,这样便可以省去编写web.xml的过程 以下是TestHttpS ...

  5. JavaWeb学习笔记——开发动态WEB资源(三)显示当前时间

    该工程的功能是实现在页面中显示当前的时间 以下的代码是HelloServlet.java中的代码 package helloapp2; import java.io.IOException; impo ...

  6. JavaWeb学习笔记——开发动态WEB资源(二)HelloWord

    该工程的功能是在页面上输出一段话 首先在src里面新建一个class,在interface里面添加javax.servlet.Servlet 以下是HelloServlet.java中的代码: pac ...

  7. JavaWeb学习笔记——开发动态WEB资源(八)cookies和httpsession

    会话: cookies: (1)cookies是WEB服务器发送到浏览器的简短文本信息 (2)cookies可以禁用 httpsession: 一次会话是从你打开浏览器开始到你关闭浏览器结束 提供一种 ...

  8. JavaWeb学习笔记——开发动态WEB资源(七)bookapp

    该工程的功能是实现一个bookapp 1.开发注册页面,注册使用properties文件,存储在classpath跟路径 2.注册成功跳转到登录页面 3.输入用户名密码登录,登录成功跳转到book显示 ...

  9. JavaWeb-入门第一课-1.静态web动态web 2.web服务器 3.下载和安装Tomcat-web服务器

    文章来源:http://www.cnblogs.com/xdp-gacl/p/3729033.html 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思 静态web资源(如html ...

随机推荐

  1. Hadoop 部署之 Hadoop (三)

    目录 一.Hadoop 介绍 1.HDFS 介绍 2.HDFS 组成 3.MapReduce 介绍 4.MapReduce 架构 JobTracker TaskTracker 二.Hadoop的安装 ...

  2. 刀塔OMG塔防1.26b单机版使用方法

    使用方法 1.确保魔兽的版本为1.26以上(低版本会报错),如果版本不对用附件中的版本转换器转一下 2.把 omg.w3x 复制到 魔兽的MAPS文件夹 WarcraftIII 游戏根目录\Maps\ ...

  3. “但行好事 莫问前程 只问耕耘 不问收获 成功不必在我 而功力必不唐捐” 科技袁人·年终盛典——5G是科技时代非常重要的基础设施

    中国的科技实力:用数据对比展示当前中国整体科技实力在国际中的发展水平和未来的发展趋势. 主要分为基础研究和应用研究.其中基础研究通过论文数据进行对比展示,应用研究通过发明专利数据. 又分别结合当今中国 ...

  4. Fabric 查看 blockfile_000000 区块文件

    进入peer docker exec -it peer bash cd /var/hyperledger/production/ledgersData/chains/chains

  5. 找到数组中频次大于1/k的数

    Majority Number III 给定一个数组(长度为L),找到所有出现频次大于1/k的数字. 我们主要使用摩尔投票法(Voting Algorithm)结合Map的数据结构解决此问题.其时间复 ...

  6. OpenGL.英文

    1. emission 英 [iˈmɪʃn] 美 [iˈmɪʃn] 排放 n. (光.热.气等的)发出,射出,排放;排放物;散发物 material 英 [məˈtɪəriəl] 美 [məˈtɪri ...

  7. Bootstrap 表单示例

    1.打开https://getbootstrap.com/docs/4.3/examples/checkout/复制表单源码 2.清空main标签内容 3.粘贴表单源码 4.示例图

  8. python解析html

    *参考 推荐BeautifulSoup http://blog.csdn.net/abclixu123/article/details/38502993 http://www.cnblogs.com/ ...

  9. 微信小程序的calc不生效处理

    大致文字初略的记录描述一下问题:外层是relative相对定位,内部一个view 需要绝对定位bottom的值为128rpx,同时还要兼容适配苹果x的底部,所以值是这样设置的: bottom: cal ...

  10. (十)springMvc 校验

    目录 文章目录 目录 @[toc] springMvc 校验 准备 踩坑 配置校验器 将校验器注入到适配器中 在 pojo 中配置校验规则 在 controller 层进行检验 获取错误信息 将错误信 ...