Servlet的调用过程和生命周期

本文详细介绍了Servlet的工作原理,包括Servlet的生命周期方法init()、service()和destroy()的作用及调用时机,通过示例代码展示了Servlet的创建与销毁过程,并解释了如何配置Web.xml使Servlet在服务器启动时即创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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响应,然后显示数据给客户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值