Servlet的生命周期+实现方式
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 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 stub 25 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 stub 50 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>
posted on 2016-01-27 22:10 Jusenr/荣雪-rongsnow 阅读(504) 评论(0) 编辑 收藏 举报