JAVA Web基础4-过滤器与监听器

一.过滤器
1.定义:过滤器是指定义在服务器端的一段程序, 可以截获客户端发来的请求, 并根据一定规则进行过滤和拦截。
2.过滤器的生命周期:
        1.服务器启动:先通过web.xml加载过滤器进行实例化(这个过程是调用过滤器中init()方法, 同样也是只执行一次);
        2.客户端发送请求:执行过滤器中的doFilter()方法, 这个方法会执行N次, 每次有请求发送过来, 都会执行这个方法进行过滤;
        3.销毁过程:同servlet, 关闭或者停止服务器的时候会执行destroy()方法;
3.过滤器链:
        不同的请求互不影响,过滤器链主要是针对多个过滤器过滤同一个url请求,过滤器的先后顺序是按照在web.xml的配置顺序来的;
        运行顺序: 请求--->过滤器1过滤--->过滤器2过滤--->后台处理层--->过滤器2过滤--->过滤器1过滤--->客户端接收
4.在web.xml中配置过滤器:

<filter>
	<filter-name>Myfilter</filter-name>
	<filter-class>com.hanqi.filter.Myfilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>Myfilter</filter-name>
	<url-pattern>/Testfilter</url-pattern><!-- 指哪些请求可以被过滤 -->
</filter-mapping>

 5.过滤器应用示例:检测当前用户是否有效。

package com.hanqi.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.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(value = "/*", initParams = { @WebInitParam(name = "page", value = "Login,Register,index,.js") })
public class SessionFilter implements Filter {
	private String[] page;
	//构造方法
	public SessionFilter() {

	}
	//销毁方法,以便释放资源
	public void destroy() {

	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request1 = (HttpServletRequest) request;//HttpServletRequest是ServletRequest的子类,可以强转获得request
		HttpServletResponse response1 = (HttpServletResponse) response;
		String url = request1.getRequestURI();//获取请求路径
		if (checkUrl(url)) {
			chain.doFilter(request1, response1);//对请求进行放行
		} else {
			Object o = request1.getSession().getAttribute("currentUser");
			if (o == null) {
				request.setAttribute("errmsg", "用户名已失效!");
				request.getRequestDispatcher("/WEB-INF/page/login.jsp").forward(request, response);
			} else {
				chain.doFilter(request1, response1);
			}
		}

	}
	//过滤器初始化时会调用该方法
	public void init(FilterConfig fConfig) throws ServletException {
		String pages = fConfig.getInitParameter("page");//获取初始化参数值
		this.page = pages.split(",");
		System.out.println(pages);
	}

	public boolean checkUrl(String url) {
		for (String p : page) {
			if (url.contains(p)) {
				return true;
			}
		}
		return false;
	}
}

6.关于注解:
在新版本(从Web2.5开始)中可以使用注解代替在web.xml中配置对象。
格式:@注解("属性值"),其等同于@注解(属性="属性值")例:@WebFilter("/*")或@WebFilter(value="/*")
带参数的格式:@WebFilter(filterName="Myfilter",value="/*",initParams= {@WebInitParam(name="",value="")})
注意:value和urlPatterns都可以用来声明过滤的请求, 也同样都可以使用数组的形式定义, 但是这两个属性不能同时使用, 否则会报java.lang.IllegalArgumentException异常而无法启动Tomcat服务器;

原文地址:https://www.cnblogs.com/wyc1991/p/9194252.html

时间: 2024-10-12 00:34:19

JAVA Web基础4-过滤器与监听器的相关文章

Java Web基础 --- Servlet 综述(实践篇)

摘要: 伴随 J2EE 6一起发布的Servlet 3.0规范是Servlet规范历史上最重要的变革之一,它的许多新的特性都极大的简化了 Java Web 应用的开发.本文从一个简单的 Servlet 例子开始,说明了如何开发.配置一个 Servlet.此外,还重点叙述了Servlet的一些新特性,包括Servlet 异步处理.Servlet 非阻塞IO 以及 Servlet 文件上传等内容,以便我们对Servlet有一个更全面的了解. 本篇主要介绍 Servlet 实践方面的知识,更多关注于S

Java Web基础知识之Filter:过滤一切你不想看到的事情

不要相信客户端, 所以做后端的人都应该铭记的事情.因为前端传过来的数据并不总是合法和有效的,所以后端是对访问资源的最后一道保护伞.之前我们在Spring中说到过AOP编程,AOP基础知识,它就可以在执行我们的方法之前进行一些预处理和验证来保护后端的资源.不难想到她的实现方式和本篇要说的过滤器的实现原理应该是相同的,都是通过Java的动态代理实现的(自己的理解). 在Java Web的开发中,过滤器用于拦截请求,并对ServletRequest对象进行处理,我们可以想到的,它可以用来验证权限.加密

java 拦截器、过滤器、监听器

转自:http://www.cnblogs.com/wangyuyu/archive/2013/07/02/3167354.html 一.理解Struts2拦截器 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack).Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链.在访问被拦截的方法或字段时,Struts2拦截器链中的拦截

Java Web 基础 --- Filter 综述

摘要: 伴随J2EE一起发布的Servlet规范中还包括一个重要的组件--过滤器(Filter).过滤器可以认为是Servlet的一种加强版,它主要用于对用户请求进行预处理以及对服务器响应进行后处理,是个典型的处理链.Servlet规范使用了三个接口对过滤器进行了抽象,即Filter是对具体过滤器的抽象,FilterChain是基于AOP理念对责任链方面的抽象,FilterConfig则是对Filter配置的抽象.本文概述了Filter的提出动机.工作原理.使用流程和应用实例,并指出Java W

Java web基础总结七之—— Filter与Listener

Java web基础总结七之-- Filter与Listener 一.Filter 1. Filter简介 Filter是Servlet体系中非常重要的一个技术.Filter的意思是过滤器,那么它过滤的是什么呢?就是web服务器管理的所有web资源.例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.它的代码逻辑执行在访问这些资源之前,从而进行一些特殊的操作.例如实现权限访问控制.编码和词汇的过滤等一些高级功能. Servlet API中提供了一

Java Web总结二十一Listener监听器

一.事件三要素 1.事件源:操作事件的对象,例如:窗体Frame 2.事件监听器:事件监听器监听事件源,例如WindowListner,它是一个接口 3.事件,例如:单击事件,通过事件,可以取得事件源 二.适配器模式 1.当一个接口有较多的方法时,而实现类只需对其中少数几个实现,此时可以使用适配器模式 2.适配器模式常用于GUI编程 三.八种Web监听器 1.Web中有三个事件源,分别是ServletContext->HttpSession->ServletRequest 2.ServletC

从Java Web 基础看SSH架构

Java Web开发现在已然成为大型Wed项目的标准,之前一直盲目的使用框架,往往知其然不知其所以然.在经过一段时间的学习与开发,大概掌握了其脉络的基础上,对其做一定总结. 一.Java Web 基础 一个典型的Java Web项目往往包含这些元素:Jsp页面.Servlet.Listener.Filter,以及配置文件web.xml.其中: Jsp和Servlet基本是一回事,主要用来响应客户端的请求.当然Jsp中可以直接嵌入HTML标签,主要还是负责展现. Listener则是负责监听Web

Java Web基础 --- Jsp 综述(上)

摘要: J2EE是一套规范,而Servlet/Jsp是J2EE规范的一部分,是Tomcat的主要实现部分.在最初的应用实践中,当用户向指定Servlet发送请求时,Servlet利用输出流动态生成HTML页面,这导致Servlet开发效率极为低下.JSP技术通过实现普通静态HTML和动态部分混合编码,使得逻辑内容与外观相分离,大大简化了表示层的实现,提高了开发效率.本文以JSP的本质是Servlet为主线,结合JSP转译后所得的Servlet,详细探讨了JSP的原理.执行过程.脚本元素.编译指令

Java Web基础 --- Jsp 综述(下)

摘要: JSP脚本中包含九个内置对象,它们都是Servlet-API接口的实例,并且JSP规范对它们进行了默认初始化.本文首先通过一个JSP实例来认识JSP内置对象的实质,紧接着以基于请求/响应架构应用的运行机制为背景,引出JSP/Servlet的通信方式与内置对象的作用域,并对每个内置对象的常见用法进行深入介绍和总结. 一. JSP 九大内置对象概述及相关概念说明 JSP脚本中包含九个内置对象,这九个内置对象都是 Servlet API 接口的实例,并且JSP规范对它们进行了默认初始化(由 J