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. 自动化测试工具selenium的使用

    1.自动化测试的前提

  2. 使用Netbeans内置的Git工具

    在 NetBeans IDE 中使用 Git 支持 NetBeans IDE 为 Git 版本控制客户端提供支持.通过利用 IDE 的 Git 支持,您可以从 IDE 内的项目中直接执行版本控制任务. ...

  3. Mysql给某一台主机授权访问,修改root密码

    ubuntu上用的是phpstudy,安装好之后,敲mysql,提示没有,需要安装mysql的客户端. 安装好之后直接敲mysql,敲 mysql 再敲use mysql 再敲mysql -uroot ...

  4. ErrorKiller:Failed to decode response: zlib_decode(): data error

    先更新composer自己,composer self-update 然后再更新依赖关系 composer update

  5. 隐藏文件的查看(Win/Linux/macOS)

    Windows(10): 点查看->点选项,弹出文件夹选项,点查看,高级设置里找到隐藏文件和文件夹这个选项,按需求选显示或者隐藏即可. Linux: Linux下,类似于.ssh开头的文件或者文 ...

  6. network programming-简单的TCP客户服务器编程

    简单的TCP程序客户端流程:创建套接字(套接字用IP地址:端口号)表示)socket()->请求连接connect()->交换数据 send()/recv()->关闭连接 close ...

  7. 10分钟入门spark

    Spark是硅谷各大公司都在使用的当红炸子鸡,而且有愈来愈热的趋势,所以大家很有必要了解学习这门技术.本文其实是笔者深入浅出hadoop系列的第三篇,标题里把hadoop去掉了因为spark可以不依赖 ...

  8. Zookeeper笔记二-各种一致性协议解释

    我们知道Zookeeper的一致性是解决分布式事务的. 那么分布式事务代表的是强一致性. 强一致性解决的代表有以下协议(注意这几个协议跟zookeeper是没任何关系的,这是分布式的理论基础): 1. ...

  9. 文本处理三剑客之grep&正则表达式

    grep是一个文本过滤工具,它支持正则表达式,能把搜索匹配到的行打印出来.grep的全称是Global Regular Expression Print(全局正则表达式)使用权限是所有用户. 一.gr ...

  10. ios学习笔记(一)Windows7上使用VMWare搭建iPhone开发环境

    我们都知道开发iPhone等ios平台的移动应用时需要使用Mac本,但是Mac本都比较昂贵,所以我们可以采用Windows7上利用VMWare安装Mac操作系统的方法来模拟ios开发环境,达到降低成本 ...