今天看啥
    热点:

      天发国际娱乐官网:之所以被流放,是因为他参加了永王李璘的叛乱。

      Servlet生命周期,


      1. 生命周期

      1.1. Servlet生命周期

      servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要。servletservlet容器管理,servlet容器也叫 servlet引擎,是servlet的运行环境,给发送的请求和响应提供网络服务。

       

      1)容器装载servlet(容器装载servlet时,会根据web.xml配置判断是否对实例初始化,否则等待http第一次请求servlet的时候,才调用init()进行初始化,并执行相应service操作)

      2)创建servlet实例,并初始化对应的init()方法(仅执行一次)

      3)接收客户Http请求,调用并执行相应的service()方法(doGetdoPOST),(执行多次)

      4)在服务端停止服务或应用关闭时执行destroy()方法销毁servlet实例(仅执行一次)

      注:如果是多线程的情况下,必须要确保所有所有线程都终止。

      测试源码servlet1.java

      import java.io.IOException;
      
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      public class servlet1 extends HttpServlet{
          @Override
          public void init() throws ServletException {
              System.out.println("我被初始化了");
          }
      
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              System.out.println("我被调用了");
          }
      
          @Override
          public void destroy() {
              System.out.println("我被销毁了");
          }
      }
      

      Web.xml配置

       

       1 <web-app>
       2   <!-- servlet实例 -->
       3   <servlet>
       4     <servlet-name>servlet1</servlet-name>
       5     <servlet-class>study.myServlet.servlet1</servlet-class>
       6     <load-on-startup>1</load-on-startup>
       7   </servlet>
       8   <servlet-mapping>
       9     <servlet-name>servlet1</servlet-name>
      10     <url-pattern>/hello</url-pattern>
      11   </servlet-mapping>
      12 </web-app>

       

      1)其中配置了<load-on-startup>1</load-on-startup> 表示在容器启动的时候就实例化该servlet,其中的数字越小表示启动优先级别越高,

      2servlet的生命周期的销毁顺序和启动顺序相反。

       

      1.2. Filter生命周期

       

      Filter(拦截器)主要对web服务器所管理的所有资源(包括:JSPServlet,静态图片)进行拦截和过滤处理,如果配置了/*,表示拦截所有请求,每次请求都会先调用FilterdoFilter方法进行处理。

       

      1)服务器启动加载过滤器实例并调用init()方法,(过滤器实例的加载优先级高于servlet

       

      2)每一次请求都会事先调用doFilter()进行过滤处理

       

      3)停止服务时执行destroy()销毁过滤器

       

       

      Web.xml配置文件

       

       1 <filter>
       2     <filter-name>filter1</filter-name>
       3     <filter-class>study.myFilter.filter1</filter-class>
       4     <!-- 过滤参数 -->
       5     <init-param>
       6       <param-name>includeString</param-name>
       7       <param-value>.do;.jsp</param-value>
       8     </init-param>
       9   </filter>
      10   <filter-mapping>
      11     <filter-name>filter1</filter-name>
      12     <url-pattern>/*</url-pattern>
      13   </filter-mapping>

       

      Filter1.java

       1 import javax.servlet.Filter;
       2 import javax.servlet.FilterChain;
       3 import javax.servlet.FilterConfig;
       4 import javax.servlet.ServletException;
       5 import javax.servlet.ServletRequest;
       6 import javax.servlet.ServletResponse;
       7 import javax.servlet.http.HttpServletRequest;
       8 
       9 public class filter1 implements Filter {
      10     private FilterConfig Config;
      11 
      12 
      13     public void init(FilterConfig filterConfig) throws ServletException {
      14         Config = filterConfig;
      15         System.out.println("1过滤器初始化成功");
      16     }
      17 
      18     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
      19         HttpServletRequest hrequest = (HttpServletRequest) servletRequest;
      20 
      21         //过滤资源后缀参数,获取web.xml配置文件的的<param-name>includeString</param-name>的参数值value
      22         String includeStrings = Config.getInitParameter("includeString");
      23         String stringList[] = includeStrings.split(";");
      24 
      25         //判断请求链接是否符合过滤要求的后缀
      26         if(! this.isContains(hrequest.getRequestURI(),stringList)){
      27             filterChain.doFilter(servletRequest,servletResponse);
      28             System.out.println("1执行过滤失败");
      29             return;
      30         }
      31         System.out.println("1执行过滤成功");
      32     }
      33 
      34     //判断是否存在符合的后缀
      35     public static boolean isContains(String container, String[] regx) {
      36         boolean result = false;
      37 
      38         for (int i = 0; i < regx.length; i++) {
      39             if (container.indexOf(regx[i]) != -1) {
      40                 return true;
      41             }
      42         }
      43         return result;
      44     }
      45 
      46     public void destroy() {
      47         System.out.println("1销毁过滤器");
      48     }
      49 }

       有了Filter拦截器,web服务器在每次调用资源之前都会执行一遍doFilter()方法,web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方法,即web资源就会被访问,否则web资源不会被访问。

       

       

      Filter的拦截匹配模式xml配置:

       

       1 <filter-mapping>
       2     <filter-name>filter1</filter-name>
       3     <url-pattern>/*</url-pattern><!-- 拦截所有请求 -->
       4   </filter-mapping>
       5 
       6   <!-- 匹配后缀名 -->
       7   <filter-mapping>
       8     <filter-name>filter1</filter-name>
       9     <url-pattern>*.jsp</url-pattern>
      10     <url-pattern>*.do</url-pattern>
      11     <url-pattern>*.html</url-pattern>
      12   </filter-mapping>
      13 
      14   <!-- 根目录请求路径过滤 -->
      15   <filter-mapping>
      16     <filter-name>filter1</filter-name>
      17     <url-pattern>/kk/hello</url-pattern>
      18     <url-pattern>/kk/*</url-pattern>
      19   </filter-mapping>
      20 
      21   <!-- 匹配单一路径-->
      22   <filter-mapping>
      23     <filter-name>filter1</filter-name>
      24     <url-pattern>/hello.html</url-pattern>
      25   </filter-mapping>

       

      www.1click-soft.comtruehttp://www.1click-soft.com/Javabc/1229111.htmlTechArticleServlet生命周期, 1. 生命周期 1.1. Servlet 生命周期 servlet 是一个基于 java 技术的 WEB 组件,运行在服务器端,我们利用 sevlet 可以很轻松的扩...

      相关文章

      相关搜索: 生命周期

      帮客评论

      视觉看点
      百度 360 搜狗