Servlet的调用过程和生命周期

来源:互联网 发布:中山大学网络教育官网 编辑:程序博客网 时间:2024/04/29 21:33

API中对Servlet的解释


A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP

Servlet接口中的方法定义

init(ServletConfig config) ;//其中ServletConfig对象中包装了Servlet在初始化时的一些信息,当第一次请求Servlet资源时,就会调用此方法创建servlet对象,此对象一旦被创建,就会驻留在内存中

service(ServletRequest req, ServletResponse res) ;//处理客户端的请求响应方法,在调用此方法之前,传入request\response两个对象

destroy() ;//当servlet对象从容器中移除时,既是当WEB服务器停止时,就会调用此方法,最终会被垃圾回收器回收

通过代码观察servlet的创建与销毁:

public class Demo extends HttpServlet{    private static final long serialVersionUID = 1L;    @Override    public void init() throws ServletException {        //当在地址栏第一次请求访问这个Demo时,console就会打印这句话        System.out.println("servlet创建了");    }    @Override    public void destroy() {        //当WEB服务器停止时,console就会打印这句话        System.out.println("servlet摧毁了");    }    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        //.....    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        doGet(req, resp);    }}

在做测试时,由于MyEclipse闪退了,重新部署的时候出现了以下异常:

java.net.BindException: Address already in use: JVM_Bind

原因:应该是之前闪退时候JVM还在运行,再重新部署的时候就占用了
解决办法:启动任务管理器–>结束掉javaw.*…..这个名字开头的进程即可

配置Web.xml文件,让servlet对象在启动时就创建

关键属性:

<servlet>    <servlet-name>Demo</servlet-name>    <servlet-class>servlet.Demo</servlet-class>    <load-on-startup>2</load-on-startup>  </servlet><!--在Servlet中配置这个属性即可<load-on-startup>,至于为什么是2,应该是启动优先级,设置2就好-->

图示Servlet调用过程


调用过程图

图示说明

3.浏览器根据查询到的IP找到URL
4.连接WEB容器,如TOMCAT
5.浏览器发送HTTP请求给WEB容器
6-8.WEB容器对HTTP请求作出一系列的反应,找到写好的资源Demo1
9.WEB容器第一次创建servlet对象
10.WEB容器调用servlet,life-circle中的init()方法初始化
11.WEB容器创建出代表请求的参数request和代表响应的参数response,并且调用service()方法
12.service()方法执行,并且运行其中的代码,向response对象写入其中的代码数据,包装在response对象中
13.service()方法返回给WEB容器
14.WEB容器从response对象中取出数据
15.WEB容器回写HTTP响应到浏览器
16.浏览器解析HTTP响应,然后显示数据给客户

0 0