filter和listener的生命周期
filter(过滤器)和listener(监听器)的生命周期
老实说
生命周期要是说成作用的时间范围我会理解的更好
filter
package com.javaweb.filter; import java.io.IOException; 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;
import javax.servlet.http.HttpServletResponse; public abstract class HttpFilter implements Filter { private FilterConfig filterConfig; @Override
public void destroy() {
} @Override
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)servletrequest;
HttpServletResponse response=(HttpServletResponse)servletresponse;
doFilter(request,response,filterchain);
} public abstract void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterchain)
throws IOException, ServletException ; @Override
public void init(FilterConfig filterconfig) throws ServletException {
this.filterConfig=filterconfig;
init();
} public FilterConfig getFilterConfig() {
return filterConfig;
} public void init() throws ServletException{ } }
package com.javaweb.login; import java.io.IOException;
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;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class LoginFilter extends HttpFilter { public void destroy() {
// TODO Auto-generated method stub
System.out.println("离开LoginFilter");
} public void init() throws ServletException {
// TODO Auto-generated method stub
System.out.println("初始化LoginFilter 只会出现一次!");
} public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterchain)
throws IOException, ServletException {
System.out.println("进入LoginFilter");
filterchain.doFilter(request, response);//放行
System.out.println("离开LoginFilter");
}
}
listener
package com.javaweb.listener; import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener; public class MyHttpRequestListener implements ServletRequestListener,ServletRequestAttributeListener { @Override
public void requestDestroyed(ServletRequestEvent servletrequestevent) {
System.out.println("requestDestroyed...");
} @Override
public void requestInitialized(ServletRequestEvent servletrequestevent) {
System.out.println("requestInitialized...");
} @Override
public void attributeAdded(ServletRequestAttributeEvent servletrequestattributeevent) {
// TODO Auto-generated method stub } @Override
public void attributeRemoved(ServletRequestAttributeEvent servletrequestattributeevent) {
// TODO Auto-generated method stub } @Override
public void attributeReplaced(ServletRequestAttributeEvent servletrequestattributeevent) {
// TODO Auto-generated method stub } }
servlet
package com.javaweb.login; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = -6820554522964310475L; private String userName; private String password; public void init(){
userName=getServletConfig().getInitParameter("username");
password=getServletConfig().getInitParameter("password");
} @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username=req.getParameter("username");
String pwd=req.getParameter("password");
if(username!=null && !"".equals(username) && pwd!=null && !"".equals(pwd)){
if(userName.equals(username) && password.equals(pwd)){
HttpSession session=req.getSession();
session.setAttribute("username", username);
session.setAttribute("password", pwd);
resp.sendRedirect(req.getContextPath()+"/login.jsp");
}else{
resp.sendRedirect(req.getContextPath()+"/index.jsp");
}
}
}
}
filiter在服务器第一次加载时就运行一次init
而监听器每一次request请求就会运行一次init
但在响应时
监听器先得到响应
过滤器后得到响应
(在实际中,是并发执行,只是过滤器慢一点)
过滤器的过滤顺序是按web.xml里
那个先注册哪个先过滤的
filter和listener的生命周期的更多相关文章
- servelt filter listener 的生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后 ...
- Filter的使用及其生命周期介绍
一.Filter 1. Filter简介 > Filter翻译为中文是过滤器的意思. > Filter是JavaWeb的三大web组件之一:Servlet.Filter.Listener ...
- Listener监听器生命周期
一.Listener生命周期 listener是web三大组件之一,是servlet监听器,用来监听请求,监听服务端的操作. listener分为:(都是接口类,必须实现相应方法) 1.生命周期监听器 ...
- Java实现生命周期管理机制
先扯再说 最近一直在研究某个国产开源的MySQL数据库中间件,拉下其最新版的代码到eclipse后,启动起来,然后做各种测试和代码追踪:用完想要关闭它时,拉出它的STOP类想要运行时,发现这个类里赫然 ...
- JavaWEB 通过Listener理解域对象生命周期
利用 ServletRequestListener.HttpSessionListener 以及 ServletContextListener 可以把request,session,以及Applica ...
- servlet 和filter 的生命周期说明
servlet : 当客户端第一次访问servlet的时候,服务器就会创建servlet实例,servlet 就会执行init方法,每次请求,服务器会开一个新的线程访问servlet中得service ...
- [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Servlet、Filter 生命周期
Servlet作为JavaEE必须掌握的内容,Struts2通过使用Filter的功能实现了一个MVC的框架.因此掌握这Servlet以及Filter的生命周期显得非常重要. 1. Servlet的生 ...
- Servlet和Filter生命周期
1. 生命周期 1.1. Servlet生命周期 servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要.s ...
随机推荐
- win-zabbix_agent端配置解析
Zabbix agent 在windows上安装部署 部署windows服务器需要在agent服务器上添加到10.4.200.2的路由 蓝泰服务器需要添加10.0.90.5的网关,联通的机器需要添加到 ...
- OAuth2.0学习(2-1)Spring Security OAuth2.0 开发指南
开发指南:http://www.cnblogs.com/xingxueliao/p/5911292.html Spring OAuth2.0 提供者实现原理: Spring OAuth2.0提供者实际 ...
- T410升级笔记
T410 win7 旗舰版 32 sp1 三星 DDR3 1066 mhz core i5 M 540 2.53GHZ 双核 日立 HTS725032A9A364 320G/7200转/分 sa ...
- OAuth2.0学习(1-11)新浪开放平台微博认证-使用OAuth2.0调用微博的开放API
使用OAuth2.0调用API 使用OAuth2.0调用API接口有两种方式: 1. 直接使用参数,传递参数名为 access_token URL 1 https://api.weibo.com/2/ ...
- anguar使用指令写选项卡
今天,我们来学习一下angular中怎么使用指令来实现两个选项卡的问题. 首先,要先引入jQuery文件与angularjs文件. <!DOCTYPE html><html lang ...
- SpringMVC(十):SpringMVC 处理输出模型数据之Map及Model
Spring MVC提供了以下几种途径输出模型数据: 1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据: 2)Map及Model:处理方法 ...
- SpringMVC(九):SpringMVC 处理输出模型数据之ModelAndView
Spring MVC提供了以下几种途径输出模型数据: 1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据: 2)Map及Model:处理方法 ...
- js实现继承的5种方式
js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...
- C# 类型、存储和变量
如果广泛地描述C和C++程序的源代码的特征,可以说C程序是一组函数和数据类型,C++程序是一组函数和类,然而C#程序是一组类型声明. 既然C#程序就是一组类型声明,那么学习C#就是学习如何创建和使用类 ...
- h5视频和音频 -2018/04/16
HTML5 规定了一种通过 video 元素来包含视频的标准方法. 当前video元素支持的三种视频格式: (1)Ogg 带有Theora视频编码和Vorbis音频编码的ogg文件 (2)MPEG4带 ...