1. 生命周期

1.1. Servlet生命周期

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

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

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

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

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

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

测试源码Servlet.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 Servlet 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配置

 <web-app>
<!-- servlet实例 -->
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>study.myServlet.Servlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>

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

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

1.2. Filter生命周期

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

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

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

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

Web.xml配置文件

 <filter>
<filter-name>Filter</filter-name>
<filter-class>study.myFilter.Filter</filter-class>
<!-- 过滤参数 -->
<init-param>
<param-name>includeString</param-name>
<param-value>.do;.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Filter1.java

 import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest; public class Filter implements Filter {
private FilterConfig Config; public void init(FilterConfig filterConfig) throws ServletException {
Config = filterConfig;
System.out.println("1过滤器初始化成功");
} public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest hrequest = (HttpServletRequest) servletRequest; //过滤资源后缀参数,获取web.xml配置文件的的<param-name>includeString</param-name>的参数值value
String includeStrings = Config.getInitParameter("includeString");
String stringList[] = includeStrings.split(";"); //判断请求链接是否符合过滤要求的后缀
if(! this.isContains(hrequest.getRequestURI(),stringList)){
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("1执行过滤失败");
return;
}
System.out.println("1执行过滤成功");
} //判断是否存在符合的后缀
public static boolean isContains(String container, String[] regx) {
boolean result = false; for (int i = 0; i < regx.length; i++) {
if (container.indexOf(regx[i]) != -1) {
return true;
}
}
return result;
} public void destroy() {
System.out.println("1销毁过滤器");
}
}

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

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

 <filter-mapping>
<filter-name>Filter</filter-name>
<url-pattern>/*</url-pattern><!-- 拦截所有请求 -->
</filter-mapping> <!-- 匹配后缀名 -->
<filter-mapping>
<filter-name>Filter</filter-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.do</url-pattern>
<url-pattern>*.html</url-pattern>
</filter-mapping> <!-- 根目录请求路径过滤 -->
<filter-mapping>
<filter-name>Filter</filter-name>
<url-pattern>/kk/hello</url-pattern>
<url-pattern>/kk/*</url-pattern>
</filter-mapping> <!-- 匹配单一路径-->
<filter-mapping>
<filter-name>Filter</filter-name>
<url-pattern>/hello.html</url-pattern>
</filter-mapping>

Servlet和Filter生命周期的更多相关文章

  1. Servlet、Filter 生命周期

    Servlet作为JavaEE必须掌握的内容,Struts2通过使用Filter的功能实现了一个MVC的框架.因此掌握这Servlet以及Filter的生命周期显得非常重要. 1. Servlet的生 ...

  2. Servlet生命周期 、Filter生命周期、Listering(监听器)总结

    Servlet生命周期简述 (1)加载和实例化 当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求:如果不存在 ...

  3. Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)

    该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法. Tomcat是一个Servlet容器: 1.Servlet容器管理了Servlet的整个生命周期,并调用s ...

  4. Servlet配置及生命周期

    1.设置Ecilipse快捷  file new 2.创建Servlet程序 1). 创建一个 Servlet 接口的实现类.              public class HelloServl ...

  5. 面试之jsp、Servlet相关知识——生命周期, 区别等

    1.servlet生命周期 所谓生命周期,指的是servlet容器如何创建servlet实例.分配其资源.调用其方法.并销毁其实例的整个过程. 阶段一: 实例化(就是创建servlet对象,调用构造器 ...

  6. Servlet和JSP生命周期概述

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt374 Servlet生命周期分为三个阶段: 1,初始化阶段  调用init( ...

  7. servlet简介及生命周期

    Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上 ...

  8. jsp当做第二个servlet request的生命周期 请求 响应 不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束 request的域消失

    jsp当做第二个servlet  request的生命周期   请求 响应  不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束  request的域消失

  9. java Web servlet简介及其生命周期

    Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容. 我们可 ...

随机推荐

  1. CENTOS6.6下mysql5.7.11带boost和不带boost的源码安装

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn Mysql5.7版本更新后有很多变化,比如json等,连安装都有变化 ...

  2. ci框架基础知识点

    一.路由 1.index.php/test/hello->控制器test的hello方法 2. 也可以手动配置路由   app/config/routes.php中     I:$route[' ...

  3. java定时器schedule和scheduleAtFixedRate区别

    package cn.lonecloud.test; import java.util.Date; import java.util.Timer; import java.util.TimerTask ...

  4. UVA - 12186 Another Crisis (树形DP)

    思路:dp[i]表示让上司i签字至少需要多少工人签字.       转移方程:将i的所有节点根据所需工人数量升序排序,设i需要k个下属签字,dp[i] = sum{dp[v]| 0 <= v & ...

  5. JavaScript的this和作用域

    本文主要讨论一下JS的作用域和this关键字.作用域,就是你的方法或者变量可访问的区域,是他们执行的上下文.如果你见过这样的代码: function someFunc() { var _this = ...

  6. mex (离散化+线段树)

    Time Limit: 3000 ms   Memory Limit: 256 MB Description 给你一个无限长的数组,初始的时候都为0,有3种操作: 操作1是把给定区间$[l,r]$设为 ...

  7. centos7安装zabbix3.2.4

    系统:CentOS Linux release 7.2.1511 (Core) zabbix:3.2.4 一.yum -y install httpd mysql mysql-server mysql ...

  8. windows下常用工具

    下面是平时自用的一些软件,感觉挺好用的,推荐给大家咯. everything 搜索神器 faststone capture 红绿小工具,工具小功能强 clcl 复制粘贴神器 f.lux linux和w ...

  9. MySQL参数max_connect_errors分析释疑

      最近一MySQL服务器,由于一些特殊因素遇到"ERROR 1129 (00000): Host 'xxx' is blocked because of many connection e ...

  10. 《实战Nginx》读书笔记

    最近今天读了一本书叫做<实战Nginx:取代Apache的高性能Web服务器>,看后对Nginx 了解了不少.但是还有很多地方不是很了解.不过此书可以作为一本参考手册来使用,里面的讲解很详 ...