`
DxnPratice
  • 浏览: 18285 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

过滤器的工作原理和生命周期详解

阅读更多

    Filter 是java下的一种过滤器 ,能实现对java web程序 客户端和服务器端消息的过滤,也就是在服务器段接受request之前,可以预先对request进行处理,或在客户端接受response之前,对response进行处理。

  1,过滤器的概念:

 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。

 2,过滤器的运行机制:

     Tomcat在接收到一个来自客户端(如浏览器)的请求之后,在这个请求被传递给servlet之前,需要经过层层Filter的过滤。它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response

 3,如何实现一个filter呢?

 (1),编写一个类实现filter接口

   

package 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;

public class MyFilter implements Filter {
      //拦截方法
   public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filter) throws IOException, ServletException {
		System.out.println("权限过滤器");
		//类型转换
		HttpServletRequest req = (HttpServletRequest) request;
		//获得客户请求的页面
		String uri = req.getRequestURI();
		if (uri.contains("login.jsp")) {
			//正常的请求就直接放行
			filter.doFilter(request, response);
			
		} else {
			request.setAttribute("errorMsg", "ERROR VISTED");
			request.getRequestDispatcher("error.jsp")
					.forward(request, response);
		}
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

}

 error.jsp:

 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    ${errorMsg}
</body>
</html>

 (2).在web.xml中配置filter

 

 <filter>
		<filter-name>MyFilter</filter-name>
		<filter-class>Filter.MyFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>MyFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 明确:<url-pattern>/*</url-pattern>中,/*代表拦截该web工程下面的所有JSP和Servlet;

     <url-pattern>*.jsp</url-pattern> *.jsp代表拦截web工程下面的所有.jsp文件

(4),filter工作周期

    1,init(FilterConfig filterConfig)throws ServletException:
   和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法进行初始化(注:filter对象只会创建一次,init方也只会执行一次 )。
  2,doFilter(ServletRequest,ServletResponse,FilterChain)每次filter进行拦截,在实际开发中方法中参数request和response通常转换为HttpServletRequest和HttpServletResponse类型进行操作。
  3,destroy():
  在Web容器卸载 Filter 对象之前被调用。

 

     

  

 

  

  

 

 

 

 

  

分享到:
评论

相关推荐

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    java基础 一、仓库说明 Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结。 2、分类文档 JVM虚拟机 JVM特点,结构与执行周期 ...过滤器、监听器、拦截器,应用详解 Servlet 集成 C3P0

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    20.5 对用户进行统一验证的过滤器 594 20.6 对请求和响应数据进行替换的 20.6 过滤器 600 20.7 小结 609 第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    20.5 对用户进行统一验证的过滤器 594 20.6 对请求和响应数据进行替换的 20.6 过滤器 600 20.7 小结 609 第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对...

    vue面试题问题及答案详解

    1. 什么是Vue? 2. 什么是Vue的双向数据绑定? 3. 什么是Vue的组件? ...6. 什么是Vue的过滤器? 7. 什么是Vue的计算属性? 8. 什么是Vue的生命周期? 9. 什么是Vue的插件? 10. 什么是Vue的混入?

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    20.5 对用户进行统一验证的过滤器 594 20.6 对请求和响应数据进行替换的 20.6 过滤器 600 20.7 小结 609 第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对...

    吴天雄--JavaWeb完整笔记.doc

    模块八:过滤器和监听器(三大组件、八大监听器、session的绑定、解绑、钝化、活化);模块九:文件上传和下载(限制上传(文件的大小和类型)、详细代码、解决下载时文件名乱码问题) --author

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    20.5 对用户进行统一验证的过滤器 594 20.6 对请求和响应数据进行替换的 20.6 过滤器 600 20.7 小结 609 第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对...

    精通AngularJS part1

    针对日期、数字和货币的自定义过滤器285 104小结287 第11章开发健壮的AngularJS应用289 111理解AngularJS的内部运作机制290 AngularJS不是基于字符串的模板引擎290 响应DOM事件更新模型291 将模型变化传播给...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    hibernate 框架详解

    长生命周期session和自动版本化 12.3.3. 脱管对象(deatched object)和自动版本化 12.3.4. 定制自动版本化行为 12.4. 悲观锁定(Pessimistic Locking) 13. 拦截器与事件(Interceptors and events) 13.1. 拦截...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    VUE常用方法整理.pdf

    1、过滤器有全局过滤器和组件内的过滤器 应用 {{ msg | 过滤器名}} 8 2、 vue中的this是vue封装好给我们使用的,跟平常方法里面的this是不同的 9 第六节 数据监听watch(深度监听)计算属性computed 9 watch监听单个,...

    vue中各选项及钩子函数执行顺序详解

    vue的生命周期如下图: 在页面首次加载执行顺序有如下: beforeCreate //在实例初始化之后、创建之前执行 created //实例创建后执行 beforeMounted //在挂载开始之前调用 filters //挂载前加载过滤器 computed //...

    Java基础知识点总结.docx

    线程的生命周期 44 线程管理 45 线程同步 49 线程通信 52 线程池 58 死锁 64 线程相关类 65 十三、 同步★★★★★ 67 十四、 Lock接口 70 十五、 API 71 &lt; java.lang &gt;String字符串:★★★☆ 71 &lt; java.lang &gt;...

    Android入门到精通源代码.

    3.2.1 Activity的生命周期 3.2.2 Activity类的结构 3.3 Activity的两种界面设计方式 3.3.1 基于XML的界面设计 3.3.2 基于代码的界面设计 3.4 应用实例:在界面中显示图片 第4章 Android人机界面和常用组件 4.1 用户...

    Hibernate实战(第2版 中文高清版)

     9.1 持久化生命周期   9.1.1 对象状态   9.1.2 持久化上下文   9.2 对象同一性和等同性   9.2.1 引入对话   9.2.2 对象同一性的范围   9.2.3 脱管对象的同一性   9.2.4 扩展持久化上下文   9.3 ...

Global site tag (gtag.js) - Google Analytics