8-过滤器Filter和监听器Listener
一。web监听器:监听特殊事件的发生
1.监听实现步骤
a。写一个java类,实现特定的接口,重写相关方法
b。在web.xml中,牌配置
<listener>
<listener-class>com.listener.MyContextLisenter</listener-class>
</listener>
c.注解方式:在java类上写一个@WebLisenter
2.可以在web.xml中可以配置servetContext初始化的参数
<context-param>
<param-name>basePath</param-name>
<param-value>http://localhost:8888/StudentManager/</param-value>
</context-param>
在程序中获取方式:sce.getServletContext().getInitParameter("basePath");
3.三种监听:请求监听(ServletRequestListener),会话监听(HttpSessionListener),上下文监听(ServletContextListener)
二。过滤器
1、特点:在服务器中第一个被执行,可以拦截任意指定的路径请求
2.用于项目中的非法访问,字符集设置等等
3.实现步骤:
a.写一个java程序,实现Filter接口,重写方法
b.在web.xml中配置
<filter>
<filter-name>charfilter</filter-name>
<filter-class>com.filter.CharSetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>charfilter</filter-name>
<!-- 拦截根目录下的所有请求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
c.dofilter方法里面的最后一句,应该将请求继续放行china.doFilter(req,resp);
web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>javaweb06</display-name>
<!-- <listener> -->
<!-- <listener-class>com.listener.MyRequestListener</listener-class> -->
<!-- </listener> -->
<context-param>
<param-name>basePath</param-name>
<param-value>http://localhost:8888/StudentManager/</param-value>
</context-param>
<filter>
<filter-name>charset</filter-name>
<filter-class>com.filter.CharSetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>charset</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <servlet>
<servlet-name>loginservlet</servlet-name>
<servlet-class>com.control.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginservlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>loginservlet2</servlet-name>
<servlet-class>com.control.LoginServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginservlet2</servlet-name>
<url-pattern>/login2</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
实例1:
package com.listener; import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener; public class MyRequestListener implements ServletRequestListener{
@Override
public void requestInitialized(ServletRequestEvent sre) {
sre.getServletContext();
sre.getServletRequest();
System.out.println("请求开始");
} @Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("请求结束");
}
}
实例2:
package com.listener; import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class MySessionListener implements HttpSessionListener{ @Override
public void sessionCreated(HttpSessionEvent se) {
String path = se.getSession().getServletContext().getInitParameter("basePath");
System.out.println("初始化参数为:"+path);
ServletContext app = se.getSession().getServletContext();
Integer online = (Integer)app.getAttribute("online");
if(online==null){
online = 0;
}
System.out.println("当前在线人数是:"+ ++online);
app.setAttribute("online", online);
} @Override
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext app = se.getSession().getServletContext();
Integer online = (Integer)app.getAttribute("online");
System.out.println("当前在线人数为:"+ --online);
app.setAttribute("online", online);
}
}
实例3:
package com.filter; import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebFilter("/student/*")
public class IsLoginFilter implements Filter{ @Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain arg2)
throws IOException, ServletException {
//1.从session中获取用户信息
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String username = (String) request.getSession().getAttribute("username"); System.out.println(request.getRequestURI());
if(request.getRequestURI().endsWith("/login.jsp")||request.getRequestURI().endsWith("/login3")){
arg2.doFilter(req, resp);
return;
} if(username==null){//非法登录
response.sendRedirect("login.jsp");
}else{
arg2.doFilter(req, resp);
}
} }
实例4:
package com.filter; import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter; /**
* 将所有请求的字符集统一修改
* @author allen
*/
@WebFilter("/*")
public class CharSetFilter implements Filter{
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain arg2)
throws IOException, ServletException {
System.out.println("请求字符集修改为utf-8");
req.setCharacterEncoding("utf-8");
arg2.doFilter(req,resp);//将请求继续往下放行
}
}
8-过滤器Filter和监听器Listener的更多相关文章
- 过滤器Filter与监听器Listener
过滤器Filter 过滤器也是一种servlet 它也可以对用户的请求进行处理 , 但是他所做的处理,只是一些轻量级的处理.Fileter就好像jsp页面与servlet之间的一道关卡,如果这个 ...
- 过滤器(filter),监听器(listener),与servlet的执行顺序
创建: 加载顺序 监听器-->过滤器-->Servlet.项目启动后,容器会首先创建声明的各种监听器,为后继的各个事件监听做准备,然后创建过滤器,最后是Servlet.销毁的时候是反序进行 ...
- 二十五、过滤器Filter,监听器Listener,拦截器Interceptor的区别
1.Servlet:运行在服务器上可以动态生成web页面.servlet的声明周期从被装入到web服务器内存,到服务器关闭结束.一般启动web服务器时会加载servelt的实例进行装入,然后初始化工作 ...
- Servlet过滤器Filter和监听器
一.Servlet过滤器的概念: *********************************************************************************** ...
- JavaWeb学习篇之----Servlet过滤器Filter和监听器
首先来看一下Servlet的过滤器内容: 一.Servlet过滤器的概念: ************************************************************** ...
- Java Web(五) 监听器Listener
监听器概述 在上一篇里介绍了过滤器Filter,而Listener是Servlet的另一个高级特性.Listener用于监听Java Web程序中的事件,例如创建,修改,删除Session,reque ...
- 过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)
一.Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servle ...
- Introduction of Servlet Filter(介绍javaweb组件之一过滤器filter)
javaweb的三大组件都需要交给web服务器运行,都需要在web.xml文件中配置. ①Servlet:javax.servlet.Servlet通过http协议接受客户端的请求,并作出响应的Jav ...
- SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】
配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter ...
随机推荐
- RocketMQ源码分析之RocketMQ事务消息实现原理上篇(二阶段提交)
在阅读本文前,若您对RocketMQ技术感兴趣,请加入 RocketMQ技术交流群 根据上文的描述,发送事务消息的入口为: TransactionMQProducer#sendMessageInTra ...
- [二]基础数据类型之Long详解
Long Long 基本数据类型long 的包装类 Long 类型的对象包含一个 long类型的字段 属性简介 值为 263-1 的常量,它表示 long 类型能够表示的最大值 ...
- python基础3--函数
1.函数定义 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 ...
- SpringBoot集成rabbitmq(一)
前言 Rabbitmq是一个开源的消息代理软件,是AMQP协议的实现.核心作用就是创建消息队列,异步发送和接收消息.通常用来在高并发中处理削峰填谷.延迟处理.解耦系统之间的强耦合.处理秒杀订单. 入 ...
- webpack4.0各个击破(10)—— Integration篇
webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习we ...
- 第58章 Profile Service - Identity Server 4 中文文档(v1.0.0)
IdentityServer通常在创建令牌或处理对userinfo或内省端点的请求时需要有关用户的身份信息.默认情况下,IdentityServer仅具有身份验证cookie中的声明,以便为此身份数据 ...
- Java开发笔记(八十)利用反射技术操作私有方法
前面介绍了如何利用反射技术读写私有属性,不单是私有属性,就连私有方法也能通过反射技术来调用.为了演示反射的逆天功能,首先给Chicken鸡类增加下列几个私有方法,简单起见弄来了set***/get** ...
- 数据结构(java版)学习笔记(二)——线性表之顺序表
顺序表的优点: 随机存取元素方便,根据定位公式容易确定表中每个元素的存储位置,所以要指定第i个结点很方便 简单,直观 顺序表的缺点: 插入和删除结点困难 扩展不灵活,难以确定分配的空间 容易造成浪费 ...
- java日期 Calendar类的使用
举例: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public clas ...
- js 颜色16进制转RGB方法
//颜色16进制转RGB方法 String.prototype.colorRgb = function(){ var sColor = this.toLowerCase(); //十六进制颜色值的正则 ...