zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Redis入门
    k8s dubbo微服务之maven配置
    NoSQL发展历史与阿里巴巴架构演进分析
    k8s交付dubbo微服务之部署Jenkins
    k8s版本平滑升级
    读 <The Lost Horizon> 感
    luogu P1026 统计单词个数
    acm一些小细节/技巧
    数据结构与算法——常用高级数据结构及其Java实现
    数据结构与算法——常用排序算法及其Java实现
  • 原文地址:https://www.cnblogs.com/rongsnow/p/5164730.html
Copyright © 2011-2022 走看看