Servlet生命周期及线程安全

Servlet知识点

Servlet生命周期

Servlet运行在容器中,其生命周期是由容器进行管理的。Servlet生命周期通过javax.servlet.Servlet接口中的init()、service()、destroy()方法来表示。

加载和实例化

Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,会部署和加载所有的WEB应用。之后,容器会解析web.xml,找到其中所有的servlet、filter和Listener或者@WebServlet、@WebFilter和@WebListener注解的内容。对于所有的过滤器,以及配置有load-on-startup,或者@WebServlet中的loadOnStartup大于0的Servlet,则立即调用init()方法进行初始化。初始化的目的是为了在处理用户的请求前完成一些初始化的操作,譬如数据库的连接、获取初始化参数等等。对于每一个Servlet,init()方法只能调用一次。

请求处理

当用户的请求到来时,Servlet容器会调用Servlet的service()方法进行请求的处理。在service()方法中,Servlet实例通过ServletRequest对象从请求处获取请求信息,经过处理后,由ServletResponse对象返回结果信息给用户。

终止服务

当Servlet容器停止运行时,会调用Servlet的destroy()方法,释放占用的资源,并且存储信息到设备中,停止运行。

Servlet线程安全

Servlet和Filter是被所有请求所共享的,多个不同的线程(HTTP请求)可以使用同一个实例,这样避免了过于昂贵的开销。

public class ExampleServlet extends HttpServlet {
    private Object thisIsNOTThreadSafe;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object thisIsThreadSafe;

        thisIsNOTThreadSafe = request.getParameter("foo"); // BAD!! Shared among all requests!
        thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.
    }
}

参考

  1. ImportNew: http://www.importnew.com/17025.html
  2. 《JavaWeb开发详解》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值