`

WEB开发 16:Servlet Filter

 
阅读更多

 

 

doFilter方法中有一个FilterChain参数,用于表示过滤器链,下面这个草图就是过滤器链的简单表述。

 

将在第15课中的登录程序使用过滤器重写

LoginFilter.java     在这个过滤器中判断session中的user是否存在,如不存在就返回登录界面

package com.test.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 destroy() {
		System.out.println("filter destroy invoed");
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest r = (HttpServletRequest)request;
		String requestURI = r.getRequestURI();
		//下面这两个页面,不能过滤,在MyLoginServlet中还是需要判断session中的user是否为空
		if(requestURI.endsWith("login.jsp") || requestURI.endsWith("MyLoginServlet")){
			chain.doFilter(request, response);
			return;
		}
		
		HttpSession session = r.getSession();
		//如果session中的user为空,则返回登录页面
		if(null == session.getAttribute("user")){
			request.getRequestDispatcher("/filter/login.jsp").forward(request, response);
			return;
		}else{
			chain.doFilter(request, response);
		}
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("filter init invoked");
	}

}

 

过滤器新建好后,需要配置web.xml文件

<filter>
  	<filter-name>loginfilter</filter-name>
  	<filter-class>com.test.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
   	<filter-name>loginfilter</filter-name>
   	<url-pattern>/*</url-pattern>
  </filter-mapping>

 

过滤链

存在多个过滤链时,是以在web.xml文件中的序列来排队过滤。

如下图,两个url-pattern是一样的,表示都对note进行过滤,先进filter1再进filter2过滤器。

 

此外还可以为过滤器配置初始参数

<filter>
  	<filter-name>loginfilter</filter-name>
  	<filter-class>com.test.filter.LoginFilter</filter-class>
  	<init-param>
  		<param-name>hello</param-name>
  		<param-value>world</param-value> 	
  	</init-param>
  	<init-param>
  		<param-name>zhang</param-name>
  		<param-value>sang</param-value> 	
  	</init-param>
  </filter>

 然后在filter类的init方法中取出。

public void init(FilterConfig filterConfig) throws ServletException {
		String value1 = filterConfig.getInitParameter("hello");
		String value2 = filterConfig.getInitParameter("zhang"); 
	}

 

此外还可以在filter类中获取application对象,如下

filterConfig.getServletContext();

 

HttpServletRequest r = (HttpServletRequest)request;
r.getSession().getServletContext();

 

分享到:
评论

相关推荐

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

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    深入Java Web心脏:Servlet工作原理全解析

    - **Web开发**:Java Servlet和JavaServer Pages (JSP)是构建动态网站的核心技术。 - **大数据技术**:Java在Hadoop等大数据技术栈中占据重要地位。 - **桌面应用**:JavaFX为构建富客户端应用程序提供了API。 - **...

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

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

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

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    深入学习:Java Servlet开发与实例

    Java Servlet是Java Web开发中的核心组件之一,它是一种用于扩展Web服务器功能的接口。本教程“深入学习:Java Servlet开发与实例”旨在帮助Java从业者深入理解Servlet技术,并通过实例进行实践,提升开发能力。 ...

    chapter04第四章:Servlet技术

    在JavaWeb开发中,Servlet技术扮演着至关重要的角色。Servlet是一种Java编程语言的接口,它由Java Servlet API...在实际开发中,结合Servlet与MVC模式、Filter和其他JavaWeb组件,可以构建出高效、可维护的Web应用。

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

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    Servlet Filter 的单元测试

    在实际的开发环境中,"Servlet UT"可能表示Servlet单元测试的相关代码,包括Filter的测试类和测试方法。这些文件应包含如何配置和运行测试的细节,以及期望的测试结果。 总的来说,Servlet Filter的单元测试是一个...

    简单的web开发——servlet案例

    在本文中,我们将深入探讨"简单的web开发——servlet案例"这一主题,旨在为初学者提供一个基础的servlet应用理解。Servlet是Java Web开发中的重要组成部分,它是一种用于扩展服务器功能的Java类,通常用来处理HTTP...

    JasperReport+Servlet Web应用之:打印

    2. **开发工具**: 提及的博客可能推荐了一些用于开发和调试JasperReport和Servlet应用的工具,如IDEA、Eclipse、Tomcat等。 综上所述,这个主题涵盖了使用JasperReport生成报表并与Servlet结合在Web应用中进行打印...

    servlet+filter+listener 详解

    Servlet、Filter 和 Listener 是 JavaEE 中三种重要的组件,它们在 Web 开发中扮演着重要的角色。Servlet 负责处理客户端的请求,Filter 负责过滤和拦截 Web 资源,而 Listener 负责监听Servlet 容器中的事件。

    Tomcat(二) Tomcat实现:Servlet与web.xml介绍 以及 源码分析Tomcat实现细节1

    web.xml是Web应用的部署描述符,它包含了应用的配置信息,如Servlet、Filter、Listener的定义,以及它们之间的映射关系。通过web.xml,Tomcat知道如何正确地初始化和管理Web应用的各个组件。 5. **Tomcat源码分析*...

    Java程序开发教学课件:15Servlet高级编程.pptx

    * 基于 Annotation 配置 Servlet、Filter、Listener 和安全,替代 web.xml 文件 * 可以将配置分割为若干 xml 片段文件,实现 Web 应用的模块化 * 异步 Servlet(Asynchronous Servlet)避免长任务阻塞服务器 创建 ...

    Servlet Tutorial

    Servlet API 提供了丰富的接口和类,例如 Servlet、GenericServlet、HttpServlet、ServletRequest、ServletResponse 等,用于开发 Web 组件。 2. Servlet 的定义: Servlet 可以从不同的角度进行描述: - 技术层面...

    深入学习:Java Servlet开发与实例.rar

    **Java Servlet 深入学习:开发与实例** ...通过这份《深入学习:Java Servlet开发与实例》的学习,开发者不仅可以掌握Servlet的基础知识,还能了解其在实际项目中的应用,进一步提升Java Web开发能力。

    Servlet JSP深入详解 基于Tomcat的Web开发

    Servlet和JSP是Java Web开发中的核心技术,它们与Tomcat服务器紧密相连,共同构成了Web应用程序的基础。本篇文章将深入探讨这三个关键概念,并介绍如何利用它们进行基于Tomcat的Web开发。 **Servlet概述** Servlet...

    javax.servlet-3.0

    【标题】"javax.servlet...综上所述,"javax.servlet-3.0"代表了Servlet API的一个重要里程碑,提供了许多现代化的特性,极大地改进了Java Web开发的效率和性能。对于Java开发者来说,理解和掌握这些特性是至关重要的。

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    在Java Web开发中,`javax.servlet`包是核心的API之一,它提供了处理HTTP请求和响应的标准接口。这个jar包是Java Servlet规范的一部分,用于构建动态、交互式的Web应用程序。当你遇到“找不到javax.servlet.*”这样...

    servlet3.0.jar下载

    总之,Servlet 3.0的这些特性大大简化了Java Web开发,提高了开发效率,并为现代Web应用的需求提供了更强的支撑。在实际项目中,使用"javax.servlet-api-3.0.1.jar"可以享受到这些改进带来的益处。

    初学 Java Web 开发,请远离各种框架,从 Servlet 开发

    初学者在接触Java Web开发时,常常会被各种框架所吸引,然而,资深的开发者建议,初学者应当先远离框架,从基础的Servlet开发开始学习。这样做的目的是为了更好地理解Web开发的基本原理,为后续深入学习和掌握复杂...

Global site tag (gtag.js) - Google Analytics