[置顶]Servlet的生命周期+实现方式
来源:互联网 发布:大数据具体应用 编辑:程序博客网 时间:2024/06/07 23:25
1.Servlet的生命周期:
(1)被创建:
默认情况下,Servlet第一次被访问时,被服务器创建。会调用init()方法。
一个Servlet只会被创建一次。init()方法也只会被调用一次。
Servlet是单例的。而服务器时多线程的。可能存在线程安全问题。
为了避免安全问题,在Servlet中尽量不要定义成员变量。即使定义了。也不要进行其他操作(只能查询)。
可以配置启动服务器时,创建Servlet
配置启动创建
值:
0和正整数:在服务器启动时创建
数字越小 优先级越高
负整数:-1是默认值。在第一次被访问时创建
<load-on-startup>2</load-on-startup>
(2)提供服务:
每一次被被访问,都会调用service方法提供服务。调用多次。
提供服务:
1.获取请求消息数据
2.设置响应消息数据
(3)被销毁:
服务器关闭时,servlet被销毁。
服务器正常关闭前,会销毁Servlet,在销毁之前,会调用destory()方法。只调用一次。
2.Servlet的实现方式:
(1)实现Servlet接口:
* ServletConfig:Servlet配置对象
* getInitParameter(String name) :获取servlet的初始化参数值
* Enumeration getInitParameterNames() :获取servlet的初始化参数的名称枚举
* ServletContext getServletContext() :获取ServletContext
* String getServletName() :获取Servlet名称
* 服务器创建的。
* 对于getServletConfig()的实现。
1.定义成员变量。ServletConfig config
2.在init 方法中 对其赋值
3.在getServletConfig() 返回成员变量。
(2)继承GenericServlet:
优化1:对于getServletConfig()的实现。
在该类中,init方法有两个,一个有参的,一个无参的。我们要复写无参的。
优化2:实现了ServletConfig 接口
我们可以通过简单方式获取ServletContext对象。
(3)继承HTTPServlet:对HTTP协议的封装。
// 1.获取请求方式
String method = req.getMethod();
//2.根据方式的不同,执行不同的操作
if("GET".equals(method)){
//get方式的代码
doGet(req,resp);
}else if("POST".equals(method)){
//get方式的代码
doPost(req,resp);
}
以后我们需要复写 doGet()和 doPost();
(1)被创建:
默认情况下,Servlet第一次被访问时,被服务器创建。会调用init()方法。
一个Servlet只会被创建一次。init()方法也只会被调用一次。
Servlet是单例的。而服务器时多线程的。可能存在线程安全问题。
为了避免安全问题,在Servlet中尽量不要定义成员变量。即使定义了。也不要进行其他操作(只能查询)。
可以配置启动服务器时,创建Servlet
配置启动创建
值:
0和正整数:在服务器启动时创建
数字越小 优先级越高
负整数:-1是默认值。在第一次被访问时创建
<load-on-startup>2</load-on-startup>
(2)提供服务:
每一次被被访问,都会调用service方法提供服务。调用多次。
提供服务:
1.获取请求消息数据
2.设置响应消息数据
(3)被销毁:
服务器关闭时,servlet被销毁。
服务器正常关闭前,会销毁Servlet,在销毁之前,会调用destory()方法。只调用一次。
2.Servlet的实现方式:
(1)实现Servlet接口:
* ServletConfig:Servlet配置对象
* getInitParameter(String name) :获取servlet的初始化参数值
* Enumeration getInitParameterNames() :获取servlet的初始化参数的名称枚举
* ServletContext getServletContext() :获取ServletContext
* String getServletName() :获取Servlet名称
* 服务器创建的。
* 对于getServletConfig()的实现。
1.定义成员变量。ServletConfig config
2.在init 方法中 对其赋值
3.在getServletConfig() 返回成员变量。
(2)继承GenericServlet:
优化1:对于getServletConfig()的实现。
在该类中,init方法有两个,一个有参的,一个无参的。我们要复写无参的。
优化2:实现了ServletConfig 接口
我们可以通过简单方式获取ServletContext对象。
(3)继承HTTPServlet:对HTTP协议的封装。
// 1.获取请求方式
String method = req.getMethod();
//2.根据方式的不同,执行不同的操作
if("GET".equals(method)){
//get方式的代码
doGet(req,resp);
}else if("POST".equals(method)){
//get方式的代码
doPost(req,resp);
}
以后我们需要复写 doGet()和 doPost();
代码演示:
1 import java.io.IOException; 2 3 import javax.servlet.Servlet; 4 import javax.servlet.ServletConfig; 5 import javax.servlet.ServletException; 6 import javax.servlet.ServletRequest; 7 import javax.servlet.ServletResponse; 8 9 10 public class ServletTest implements Servlet {11 12 /**13 * 初始化方法。Servlet创建之后调用,调用一次14 */15 public void init(ServletConfig config) throws ServletException {16 17 System.out.println("init() 被调用了。。。");18 }19 20 /**21 * 获取ServletConfig对象的方法22 */23 public ServletConfig getServletConfig() {24 // TODO Auto-generated method stub25 return null;26 }27 28 /**29 * 提供服务的方法,调用多次30 */31 public void service(ServletRequest req, ServletResponse res)32 throws ServletException, IOException {33 34 res.setContentType(getServletInfo());35 String ip = req.getRemoteAddr();36 System.out.println(req.getRemoteAddr() +"哎呀,怎么就被访问了呢?!。。。。。。");37 if("192.168.1.65".equals(ip)){38 res.getWriter().write("<h1>你被和谐了!。。。</h1>");39 return;40 }41 res.getWriter().write("<h3>haha Servlet</h3>");42 43 }44 45 /**46 * 获取Servlet信息的方法。如:版本号,作者等47 */48 public String getServletInfo() {49 // TODO Auto-generated method stub50 return null;51 }52 53 /**54 * 销毁方法 调用一次。55 */56 public void destroy() {57 58 System.out.println("destroy() 要挂了...");59 }60 61 62 }
XML文件:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7 8 <servlet> 9 <servlet-name>one</servlet-name>10 <servlet-class>Serlet.ServletTest</servlet-class> 11 <load-on-startup>5</load-on-startup>12 </servlet>13 <servlet-mapping>14 <servlet-name>one</servlet-name>15 <url-pattern>/one</url-pattern>16 </servlet-mapping>17 18 <display-name></display-name> 19 <welcome-file-list>20 <welcome-file>index.jsp</welcome-file>21 </welcome-file-list>22 </web-app>
0 0
- [置顶]Servlet的生命周期+实现方式
- Servlet实现方式及其生命周期
- Servlet实现方式及生命周期
- Servlet的生命周期和三种实现方式
- 详细理解servlet实现的几种方式和生命周期
- 5.servlet----->生命周期,实现servlet接口方式,工作时序
- 【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期
- [Servlet]Servlet的生命周期
- 【Servlet】Servlet的生命周期
- 实现Servlet接口——理解Servlet的生命周期
- (2) Servlet - 生命周期,工作方式
- Servlet生命周期及创建方式
- 置顶操作的实现
- 置顶功能的实现
- Servlet详解---Servlet的生命周期
- Servlet入门----Servlet的生命周期
- Servlet的生命周期
- Servlet 的生命周期
- [置顶]数据类型转换(面试题)
- [置顶]JDBC快速入门
- [置顶]单例设计模式 (代码实现)
- [置顶]pull解析器: 反序列化与序列化
- struts2出现Could not find action or result的错误原因
- [置顶]Servlet的生命周期+实现方式
- [置顶]Request 和 Response 原理
- [置顶]会话技术( Cookie ,Session)
- [置顶]android 四大组件之---Service
- #CentOS on Mac#4.WebBench测试TinyHttpd
- [置顶]showSetPwdDialog--自定义对话框
- [置顶]popupwindow展示
- [置顶]手机APP创建桌面快捷方式
- [置顶]Android中Listview展示及其优化好处