过滤器和拦截器,监听器

news/2024/7/8 3:40:00

过滤器(filter):请求,响应,需要拦截器放行。
实现一个接口,init(初始化),destroy(摧毁),需要在xml中配置过滤器。
配置过滤器,同配置servlet一样。

<filter>
		<filter-name>MyServlet<filter-name>
		<filter-class>org.student.filter.MyFilter</filter-class>
</fiter>

<filter-mapping>
		<servlet-name>MyServlet</servlet-name>
		<url-pattern>/MyServlet</url-pattern>
</fiter-mapping>

①是需要拦截的对象,箭头表示xml执行顺序。这里的name可以自己取名,不过为了方便,大多数时候不改。
filter映射:
/MyServlet 拦截具体一项
/* 拦截所有请求;
通配符:dispatcher请求方式
REQUEST: 拦截http请求,get,post.
FORWARD: 之拦截通过请求转发方式的请求
INCLUDE: 只拦截通过request.getRequestDispatcher("").include("");通过
ERROR: 只拦截发出的请求。
在这里插入图片描述

拦截器代码示例:

public class MyFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
system.out.print("init");
}
@Override
public void doFilter( ServletResquest request,ServletResponse response,FilterChain chain) throws IOException,ServletException {
system.out.print("拦截请求");
//放行
chain.doFilter(request,response);
system.out.print("拦截响应");
//
}
@Override
public void destroy() {
	system.out.print("destroy");
}
}

监听器:
四个范围对象,PageContext,request,session.application。监听器主要监听后三个。
request: ServletRequestLisener
session: HttpSessionListener,
application: ServletContextListener

实例综合:

public class App implements ServletRequestLisener,HttpSessionListener,ServletContextListener{
//每个监听器,提供两个方法,一个监听开始,一个监听结束
	@Override
	public void contextInitialized(ServletContextEvent sec){
		system.out.print("start");
	}
	@Override
	public void contextDestroy(ServletContextEvent sec){
		system.out.print("destroy");
	}
	@Override
	public void sessionCreated(HttpSesionEvent se){
		system.out.print("start");
	}
	@Override
	public void sessionDestroy(ServletContextEvent se){
		system.out.print("destroy");
	}
	@Override
	public void requestInitialized(ServletContextEvent sre){
		system.out.print("start");
	}
	@Override
	public void requestInitialized(ServletContextEvent sre){
		system.out.print("destroy");
	}
}

配置文件-----监听器

	<listener>
		<listener-class>包名.App</listener-class>
	</listener>

监听器增加属性:每个接口有三个方法。
request: ServletRequestAttributeLisener
session: HttpSessionAttributeListener,
application: ServletContextAttributeListener

实例综合:

public class AppAttribute implements ServletRequestAttributeLisener,HttpSessionAttributeListener,ServletContextAttributeListener{
//每个监听器,提供两个方法,一个监听开始,一个监听结束
	@Override
	public void attributeAdded(ServletContextAttributeEvent scae){
		system.out.print("add");
	}
	@Override
	public void attributeRemoved(ServletContextAttributeEvent  scae){
		system.out.print("remove");
	}
	@Override
	public void attributeReplaced(ServletContextAttributeEvent  scae){
		system.out.print("replace");
	}
	@Override
	public void attributeAdded(HttpSessionAttributeEvent  hsae){
		system.out.print("add");
	}
	@Override
	public void attributeRemoved(HttpSessionBindingEvent  hsae){
		system.out.print("remove");
	}
	@Override
	public void attributeReplaced(HttpSessionBindingEvent  hsae){
		system.out.print("replace");
	}
		@Override
	public void attributeAdded(HttpSessionBindingEvent  fsbe){
		system.out.print("add");
	}
	@Override
	public void attributeRemoved(ServletRequestAttributeEvent  fsbe){
		system.out.print("remove");
	}
	@Override
	public void attributeReplaced(ServletRequestAttributeEvent  fsbe){
		system.out.print("replace");
	}
}

http://www.niftyadmin.cn/n/1967380.html

相关文章

经纬度距离搜索数据库操作以及hibernate操作、Java比较两点间的距离

数据库语句&#xff1a; select * from ls_region_user order by ACOS(SIN((39.975092 * 3.1415) / 180 ) *SIN((lat * 3.1415) / 180 ) COS((39.975092 * 3.1415) / 180 ) * COS((lat * 3.1415) / 180 ) *COS((116.385476 * 3.1415) / 180 - (lng * 3.1415) / 180 ) ) * 6378.…

ajax传输

ajax:异步传输jsxml 异步刷新&#xff1a;网页中只有某一块需要修改&#xff0c;不影响其他块。比如说弹幕&#xff0c;点赞等&#xff01; 实现&#xff1a; js: XMLHttpRequest 对象&#xff1b; 该对象的方法&#xff1a; open( 提交方式,服务器地址 ,true):与服务器建立连…

20170210解题报告

精英班考试题 2017.2.10 题目名 工资 藏妹子之处 银河之星 源文件 money.cpp/c/pas excel.pas/cpp galaxy.cpp/c/pas 输入文件 money.in excel.in galaxy.in 输出文件 money.out excel.out galaxy.out 时间限制 1000MS 1000MS 1000MS 内存限制 256MB 128…

MySQL 关于count与group by一起用的效果

本来想要效果是有多少个userId&#xff0c;结果却显示的是&#xff0c;去重后每组userId有多少个。 select count(id) from ls_wweb_log_call where userId is not null and companyUserId:companyUserId and createDate BETWEEN :nowDate AND :nextDate group by userId后来使…

Jackson将实体转为json形式,且未空或者null(不参加序列化)

Jackson将实体转为json形式&#xff0c;且未空或者null(不参加序列化), 常见用法&#xff1a; ObjectMapper mappernew ObjectMapper().setSerializationInclusion(JsonIclude.Inculde.NON_NULL) 常见还有&#xff1a;Include.ALAWAYS 默认&#xff1b;NON_DEFAULT 默认不序列化…

python的class里面的function怎么被调用

2019独角兽企业重金招聘Python工程师标准>>> 如果python class的类名和class的文件名相同&#xff0c;那么类中的function就默认是可见的。 例如&#xff1a; abc.py class abc { def function1&#xff08;&#xff09; def function2 () } function1和function2都…

MySQL启动不起来和关闭不了的问题记录

昨天centos系统上的MySQL&#xff0c;不能启动&#xff08;一直在启动中&#xff0c;不停的.....&#xff0c;也不报错&#xff0c;就一直启动中&#xff09;&#xff0c;也不能关闭&#xff08;和启动效果一样&#xff09;。 甚至&#xff1a; ps aux | grep mysql kill -9 1…

fetch传输方式

fetch传输方式 vue所利用的一种传输方式。 ①在前后台传输之前&#xff0c;需要配置好前台画面跳转的url; ②请求封装后&#xff0c;传输给后台url,返回请求数据。 ③将请求的到参数&#xff0c;导入对应的.vue,取值赋值。 <template><div class"detailsContai…