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 ...
随机推荐
- Let's Encrypt,免费好用的 HTTPS 证书
很早之前我就在关注 Let's Encrypt 这个免费.自动化.开放的证书签发服务.它由 ISRG(Internet Security Research Group,互联网安全研究小组)提供服务,而 ...
- IT技术有感
今天看技术文章,spring相关的,某一个点以前每次看一直不理解, 可是不知道为什么隔了1年左右,中间什么都没做,现在却都懂了. 在看懂的那一刻,笼罩在我心上的躁动突然平静了许多,我的心这一年来前所未 ...
- WPF项目学习.四
信息收录项目 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案. 需求文案.设计思路.简要数据库结构.简要流程图和明细代码,动图细化每步操作 ...
- 浅析php过滤html字符串,防止SQL注入的方法
批量过滤post,get敏感数据 复制代码 代码如下: $_GET = stripslashes_array($_GET);$_POST = stripslashes_array($_POST); 数 ...
- vue基础特性
在这里我们主要是讲解一些vue实例的属性和一些基础的指令 vue实例属性: 其实和我们之前所学的对象的属性是相似的东西 vue的基础指令: 对于指令,大家可能之前么有接触过相关的概念,其实大家可以这样 ...
- Redis、Memcache与MongoDB的区别
>>Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境 ...
- 使用springcloud zuul构建接口网关
一 微服务网关背景及简介 不同的微服务一般有不同的网络地址,而外部的客户端可能需要调用多个服务的接口才能完成一个业务需求.比如一个电影购票的收集APP,可能回调用电影分类微服务,用户微服务,支付微服 ...
- java String的各种方法及操作
No. 方法名称 功能 字符与字符串 01 public String(char[] value) 将字符数组中所有内容变为字符串 02 public String(char[] value,int ...
- [HNOI 2011]数矩形
Description 题库链接 给出平面上 \(n\) 个点,选出四个点作为矩形顶点.求出矩形最大面积. \(1\leq n\leq 1500\) Solution 转载自 Z-Y-Y-S dark ...
- [HNOI 2015]亚瑟王
Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...