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 ...
随机推荐
- php类中的$this,static,const,self这几个关键字使用方法
本篇文章主要分享一下关于php类中的$this,static,final,const,self这几个关键字使用方法 $this $this表示当前实例,在类的内部方法访问未声明为const及stati ...
- python-map的用法
map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 1.当seq只 ...
- aws - shadow 影子使用
参考链接: https://github.com/aws/aws-iot-device-sdk-java 一.设备注册 二.设备主题
- Angular 学习笔记 ( CDK - Observers )
<div class="projected-content-wrapper" (cdkObserveContent)="projectContentChanged( ...
- GIT入门笔记(7)- 修改文件并向版本库提交
1.修改文件vi readme.txt git status 发现被修改的文件列表git diff readme.txt 2.git add readme.txt git status --注意gi ...
- 详解Ajax请求(四)——多个异步请求的执行顺序
首先提出一个问题:点击页面上一个按钮发送两个ajax请求,其中一个请求会不会等待另一个请求执行完毕之后再执行? 答案是:不会,这两个异步请求会同时发送,至于执行的快与慢,要看响应的数据量的大小及后台逻 ...
- SourceTree 03 - 跳过账号登录直接进入主界面
SourceTree系列第1篇 SourceTree 01 - git 客户端介绍(http://www.cnblogs.com/geaosu/p/8807666.html) SourceTree系列 ...
- 屏幕上两点画线+DDALine算法
编译环境VS2017+EasyX #include "stdafx.h" #include"graphics.h" void DDALine(int x0, i ...
- NGUI----简单聊天系统一
1:聊天背景的创建 新建一个场景-----保存场景 NGUI---->Create-----Panel 选中UIRoot,然后新建一个sprite 选择图集 效果如下图 添加一个可拖拽的功能 选 ...
- sqli-lab 第一题 单引号 error based single quotes
一.第一次见面 1.初识 http://localhost/Less-1/ 提示输入id,因此访问http://localhost/Less-1/?id=1 可以继续测试id=2.3.4等的情况,会输 ...