vlambda博客
学习文章列表

Java面试 | servlet的生命周期及servlet常用方法

(1)问题分析:

考官主要想考核Java基本功的掌握和应用。一方面,是servlet的生命周期;另一方面,则是其单例非线程安全对于安全这块的一个处理。


(2)核心答案讲解:

1)init()方法

在Servlet的生命周期中,仅执行一次init()方法,它是在服务器装入Servlet 时执行的,可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入 Servlet。无论有多少客户机访问Servlet,都不会重复执行init();

2)service()方法

它是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的 Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest) 对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存 在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

3)destroy()方法

仅执行一次,在服务器端停止且卸载Servlet时执行该方法,有点类似于C++的 delete方法。一个Servlet在运行service()方法时可能会产生其他的线程,因 此需要确认在调用destroy()方法时,这些线程已经终止或完成。


(3)问题扩展

如何解决servlet线程安全:

☛第一种,继承SingleThreadModel但是这样每次都会创建一个新的servlet实例, 但这样消耗服务器的内存,降低了性能,并且这个接口现在已经过时了,不推荐使用。


☛第二种:我们尽量避免使用全局变量,就我个人而言,我比较喜欢使用这种方法。


☛第三种,我们可以通过使用ThreadLocal, 内部结构是一个Map结构,用当前线 程作为key,他会创建多个副本。get,set方法。


☛第四种,我们当然还可以来加锁,进行解决线程问题。


而且我还知道,向我们这种常用的MVC框架,struts1,spring这些MVC框架,都 是基于servlet发展而来的,就比如struts1 的核心总控制器是ActionServlet, 而springMVC的前端总控制器是dispatchServlet,在项目我们曾经用serlet来 生成 图片验证码的,防止用户进行暴力破解。


(4)结合项目中使用

servlet的配置文件 web.xml

Java面试 | servlet的生命周期及servlet常用方法


描述:


Servlet的生命周期是由Servlet容器来控制的,它始于装入Web服务器的内存时,并在终止或重新装入Servlet时结束。


在代码中,Servlet生命周期由接口javax.servlet.Servlet定义。所有的Java Servlet 必须直接或间接地实现javax.servlet.Servlet接口,这样才能在Servlet Engine上运行。


-END-

Java面试 | servlet的生命周期及servlet常用方法


点击关注黑马程序员
获得更多面试干货
Java面试 | servlet的生命周期及servlet常用方法Java面试 | servlet的生命周期及servlet常用方法
黑马程序员
黑马程序员是传智教育旗下高端IT教育品牌,以高品质教学质量赢得好口碑,为企业输送大批优质IT人才,致力于培养高级软件工程师。现开设12个精品学科,19所直营分校遍布全国。
49篇原创内容
Official Account