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>

 

你可能感兴趣的:(Servlet的生命周期+实现方式)