`

jsp/servlet之过滤器

阅读更多

1,什么是过滤器(filter)?

   它是以一种组件的形式绑定到web应用程序当中的,与其他的Web应用程序组件不同的是:过滤器是采用“链”的方式进行处理(当需要限制用户访问某些资源或者处理请求时时提前处理某些资源时);当用户发出请求到web服务器,web服务器并没有直接去找到那个相应的web资源,而是交给了过滤器,所有的请求由过滤器去处理,然后在访问相应的web资源;这样可以达到对某些资源的访问限制;

2,实现过滤器!

   如果要定义一个过滤器,则直接让一个类实现javax.servlet.Filter接口;此接口定义了3个操作方法:

 

No 方法 类型 描述
1 public void init(FilterConfig filterConfig) throws ServletException 普通 过滤器初始化(容器启动时调用),可以通过FilterConfig配置的初始化参数
2 public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException 普通 完成具体的过滤操作,然后通过FilterChain让请求继续向下传递
3 public void destory() 普通 过滤器销毁时使用

上面的doFilter()方法中定义了ServletRequest,ServletResponse和FilterChain3个参数,都是ServletRequest/ServletResponse说明过滤器可以完成对任意协议的操作。FilterChain接口的主要作用是将用户的请求向下传递给其他的过滤器或者Servlet,此接口的方法如下:

No 方法 类型 描述
1 public void doFilter(ServletRequest request,ServletResponse response)throws IOException,ServletException 普通 将请求向下继续传递

在FilterChain接口中依然定义了一个同样的doFilter()方法,这样是因为一个过滤器后面可能存在另外一个过滤器,也可能是请求的最终目标(Servlet),这样就通过FilterChain形成一个"过滤链"的操作;

3,看一个简单的过滤器!

SimpleFilter:

package com.keith.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;

public class SimpleFilter implements Filter {
	/**
	 * 初始化过滤器
	 */
	public void init(FilterConfig config) throws ServletException {
		// 取得初始化参数
		String initParam = config.getInitParameter("ref");
		System.out.println("过滤器被初始化,初始参数:" + initParam);
	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("-------执行doFilter()之前---------------");
		chain.doFilter(req, resp);
		System.out.println("-------执行doFilter()之后---------------");
	}

	public void destroy() {
		System.out.println("-------filter销毁--------");
	}

}

 在web.xml中配置:

  <filter>
  	<filter-name>simple</filter-name>
  	<filter-class>com.keith.filter.SimpleFilter</filter-class>
  	<init-param>
  		<param-name>ref</param-name>
  		<param-value>Hello Filter</param-value>
  	</init-param>
  </filter>
  
  <filter-mapping>
  	<filter-name>simple</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>
  

 当服务器(tomcat)启动的时候:会输出:过滤器被初始化,初始参数:Hello Filter

当我们在浏览器访问目录的时候:会在控制台上:

-------执行doFilter()之前---------------


-------执行doFilter()之后---------------


 过滤器(Filter)和servlet的配置很相似,其中的<url-pattern>标签中,是拦截的内容,/*将对所有访问进行拦截,而如果我们只想对某些目录进行拦截可以这样:

	<url-pattern>/jsp/*</url-pattern>


	<url-pattern>/js/*</url-pattern>

4,过滤器的应用:

过滤器(Filter)属于是以一个组件的形式加入到应用程序中,

  • 编码过滤

如果我们在每一个jsp或者servlet中都写一个request.setCharsetEncoding("UTF-8");这样的工作太无趣和累赘,这个时候,我们就可以用到Filter:

EncodingFilter:

package com.keith.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;

public class EncodingFilter implements Filter {
	// 设置字符编码
	private String charSet;

	public void init(FilterConfig filterConfig) throws ServletException {
		// 取得初始化参数
		this.charSet = filterConfig.getInitParameter("charSet");
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// 设置统一编码
		request.setCharacterEncoding(this.charSet);
	}

	public void destroy() {

	}

}

 在web.xml里:

  <filter>
  	<filter-name>encoding</filter-name>
  	<filter-class>com.keith.filter.EncodingFilter</filter-class>
  	<init-param>
  		<param-name>charset</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>encoding</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  •  登陆验证:验证登陆是Web开发中不可缺少的一部分,以前都是通过验证session的方式完成,如果每个页面都这样做的话,会造成大量的冗余代码,这时候就可以通过Filter轻松的完成;

LoginFilter:

package com.keith.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.HttpSession;

public class LoginFilter implements Filter {
	public void init(FilterConfig filterConfig) throws ServletException {

	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpSession session = req.getSession();
		if (session.getAttribute("user") != null) {
			chain.doFilter(request, response);
		}else{
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}
	}

	public void destroy() {

	}

}
 

以上2个过滤器只是个演示,在实际开发中,并不是这么简单!

 

 

 

分享到:
评论

相关推荐

    jsp/servlet中过滤器和监听器的区别

    - **定义**:过滤器是一种基于Java Servlet API的组件,它在请求被Servlet处理之前和之后进行拦截。根据配置,过滤器可以对请求或响应进行修改、拦截、日志记录等操作。 - **工作原理**:过滤器遵循`Filter`接口,...

    jsp/servlet分页带查询示例

    2. **配置说明**:这可能指的是web.xml文件,它是Servlet容器的配置文件,用来定义Servlet、过滤器、监听器等组件,并设置它们的初始化参数和映射路径。在分页查询中,可能需要配置数据源或者Servlet的URL映射。 3....

    使用JSP/Servlet技术开发新闻发布系统(源码+数据库).rar

    8. **用户认证与授权**:新闻发布系统可能包含用户登录和权限管理功能,这可能涉及session管理和过滤器来实现用户身份验证。 9. **响应式设计**:考虑到新闻系统的多设备访问需求,源码可能采用了响应式设计,如...

    jsp/servlet帮助文档

    在Java Web应用中,部署描述符是配置文件,定义了应用程序的行为,包括Servlet和JSP的映射、过滤器、监听器等设置。它是应用程序部署的关键组成部分。 **Java_ee_javadocs** 这个文件可能是Java EE的API文档,包含...

    jsp/servlet个人学习笔记

    在 `web.xml` 文件中,开发者可以配置 JSP 页面、Servlet、过滤器和监听器的行为,以及定义 URL 映射、错误处理等。它是整个 Web 应用的配置中心。 9. **常见错误** 在 JSP 和 Servlet 开发中,常见的错误包括...

    S2 使用JSP/Servlet技术开发新闻发布系统

    4. **配置文件**:如`web.xml`,定义Servlet的映射路径、过滤器、监听器等,是部署应用的重要组成部分。 5. **业务逻辑**:包含Java类,执行如验证用户输入、处理业务规则、连接数据库等任务。这部分可能分为模型...

    jsp/servlet阶段测试

    8. 使用过滤器实现中文乱码和非法访问主页面:使用Filter可以实现中文乱码和非法访问主页面的过滤。Filter可以在请求到达Servlet之前对请求进行处理和过滤,从而实现中文乱码和非法访问的解决。 9. 在主页中显示...

    jsp+servlet登录验证过滤器

    在这个项目中,“jsp+servlet登录验证过滤器”涉及了用户登录验证的过程,以及使用过滤器(Filter)来实现这一功能。下面将详细介绍这个主题中的相关知识点。 1. **JSP**:JSP是一种服务器端的技术,允许开发者在...

    ACCP 5.0基于JSP/Servlet/JavaBean的网上书店源码

    5. **配置文件**:如web.xml,定义了Servlet的映射、过滤器、监听器等,是Web应用的配置中心。 6. **数据库脚本**:如book.sql,用于创建数据库表结构和初始化数据。 学习这个源码,不仅可以了解ACCP 5.0课程中的...

    JavaServlet_JSP.zip_Java Servlet JSP_Jsp/Servlet

    8. **Servlet过滤器**:在请求到达目标Servlet之前或之后进行拦截处理。 9. **Servlet监听器**:监听特定的Web事件,如会话创建或销毁。 深入学习这两个技术,你需要了解它们的原理、API以及如何在实际项目中应用。...

    servlet+jsp实现过滤器 防止用户未登录访问

    使用servlet和jsp技术时,我们可以通过过滤器(Filter)来实现这样的安全防护机制。过滤器是一种服务器端的组件,它能够对请求和响应进行拦截,执行一些预处理或者后处理操作。它常用于进行登录验证、权限检查、字符...

    在 JSP/Servlet 中使用 Bean 自动属性填充机制

    `web-app`目录通常包含`WEB-INF`目录,里面有`web.xml`部署描述符文件,定义了Servlet和过滤器的配置。`javadocs`则包含了API文档,方便开发者查阅Bean类的使用方法。 在实际应用中,开发者会根据需求创建对应的...

    jsp servlet中的过滤器Filter配置总结

    而Filter(过滤器)是Servlet API的一部分,它提供了一种机制,可以在请求到达目标资源之前或之后对请求和响应进行拦截处理。Filter在处理Web请求时扮演着不可或缺的角色,比如日志记录、权限验证、内容压缩等。以下...

    本科生/大学 JSP/servlet考试

    **学习JSP和Servlet不仅需要理解基本概念,还要熟练掌握它们的使用,以及如何与数据库、会话管理、过滤器、监听器等其他Web组件协同工作。通过对"jsp考试试题大全"的深入学习和实践,学生可以巩固理论知识,提升实际...

    Servlet过滤器的简单使用源码+文档

    在标题"Servlet过滤器的简单使用源码+文档"中,我们可以理解为这个压缩包包含了一个关于Servlet过滤器的基础应用示例,以及相关的源代码和文档资料。描述中提到的"实现一个登陆界面",表明了过滤器可能被用作验证...

    JSP Servlet学习资料--全套PPT

    8. **部署描述符(web.xml)**:配置Servlet、过滤器和监听器的核心文件。 **通过这套“JSP Servlet学习资料--全套PPT”,你将能够深入理解这两个技术的原理和应用,掌握它们的实战技能,为你的Java Web开发之路...

    JSP_Servlet学习笔记(第2版)

    本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。  本书在讲解的过程中,以“微博”项目贯穿全书,随着每一章的讲述都在适当的时候将JSP &Servlet;技术应用于...

    jsp servlet过滤器,登陆验证 获取session

    而`过滤器(Filter)`是Servlet API的一部分,它提供了一种机制来拦截请求和响应,实现诸如登录验证、字符编码转换、性能监控等功能。在这个场景中,我们关注的是使用过滤器进行登录验证,以及如何利用`session`来...

    jsp中servlet过滤器和侦听器

    而过滤器(Filter)和侦听器(Listener)是Servlet规范中的两个重要概念,它们增强了应用的功能和灵活性。 **过滤器(Filter)** 过滤器在JSP中起到中介的作用,它们可以拦截HTTP请求和响应,对数据进行处理或修改...

    fanka.zip_Jsp/Servlet_Java__Jsp/Servlet_Java_

    6. 服务器配置文件:如web.xml,用于部署描述符,定义Servlets和过滤器等。 7. 测试和样例数据:可能包括JUnit测试类和示例数据文件。 开发这样一个系统需要掌握JSP和Servlet的核心概念,如生命周期、页面指令、...

Global site tag (gtag.js) - Google Analytics