Servlet的生命周期+实现方式
博客专区 > Jusenr 的博客 > 博客详情
Servlet的生命周期+实现方式
Jusenr 发表于2年前
Servlet的生命周期+实现方式
  • 发表于 2年前
  • 阅读 7
  • 收藏 0
  • 点赞 2
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

    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>

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 20
码字总数 10876
×
Jusenr
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: