| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java面试 | servlet的生命周期及servlet常用方法 -> 正文阅读 |
|
[Java知识库]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 在web.xml中,首先需要写一个servlet标签,servlet标签中有两个子标签,一个叫servlet-name,这个name可以随便起,但是要保证唯一性,除此之外,在这个servlet-name下有一个servlet-class,这个servlet-class对应的就是我后台提高服务的servlet,除此之外还有一个servlet-mapping,这个里边首先有一个servl-name。,这个servl-name首先要保证和上边的servlet-name保持一致,除此之外还有一个url-pattern,这是一个虚拟路径,是用来发送请求的url地址。 Servlet的生命周期是由Servlet容器来控制的,它始于装入Web服务器的内存时,并在终止或重新装入Servlet时结束。 在代码中,Servlet生命周期由接口javax.servlet.Servlet定义。所有的Java Servlet 必须直接或间接地实现javax.servlet.Servlet接口,这样才能在Servlet Engine上运行。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 21:43:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |