`
wx1569484809
  • 浏览: 63770 次
文章分类
社区版块
存档分类
最新评论

servlet和jsp页面过滤器Filter的作用及配置

 
阅读更多

刚刚有个朋友问我,Servlet的过滤器有什么作用?
现在发个帖子说明一下,
           过滤器是一个对象,可以传输请求或修改响应。它可以在请求到达Servlet/JSP之前对其进行预处理,而且能够在响应离开Servlet /JSP之后对其进行后处理。所以如果你有几个Servlet/JSP需要执行同样的数据转换或页面处理的话,你就可以写一个过滤器类,然后在部署描述文 件(web.xml)中把该过滤器与对应的Servlet/JSP联系起来。你可以一个过滤器以作用于一个或一组servlet,零个或多个过滤器能过滤 一个或多个servlet。
         一个过滤器实现java.servlet.Filter接口并定义它的三个方法:
    1. void init(FilterConfig config) throws ServletException:在过滤器执行service前被调用,以设置过滤器的配置对象。
    2. void destroy();在过滤器执行service后被调用。
    3. Void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException;
       可能这么说,大家还是不太理解。举个例子来说,面向对象语言的特征里有个接口的概念,一个类实现该接口,就必须要实现接口的所有方法。那么如果我写了一个类,实现这个接口又不想实现所有方法,怎么办呢?
      写个抽象类,实现这个接口的所有方法,然后我写的类继承这个抽象类。就可以不用实现所有方法了。看到这里大家都懂了过滤器是干什么的吧
      
      既然懂了,那就直接上代码说明一下怎么配置的。

开发EncodingFilter.java文件,继承自javax.servlet.Filter:
package bluemoon.crm.systemmanage.struts.Filter;

import java.io.*;
import javax.servlet.*;

public class EncodingFilter implements Filter
{
protected String encoding = null;
protected FilterConfig config;

public void init(FilterConfig filterConfig) throws ServletException
{
this.config = filterConfig;
//从web.xml配置文件中获取编码配置
this.encoding = filterConfig.getInitParameter("Encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
if(request.getCharacterEncoding() == null)
{
String encode = getEncoding();
if(encode != null)
{
//设置request的编码方式
request.setCharacterEncoding(encode);
}
}
chain.doFilter(request,response);
}
public String getEncoding()
{
return encoding;
}
public void destroy()
{

}
} 
在web.xml文件中加入如下配置信息:
<!-- 页面请求编码过滤器 注意每个页面的pageEncoding="GB2312" -->
<filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>bluemoon.crm.systemmanage.struts.Filter.EncodingFilter</filter-class>
  <init-param>
  <param-name>Encoding</param-name>
  <param-value>GB2312</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <!-- 对全部的jsp页面有效,比较郁闷的是没有太多的配置方式 -->
  <url-pattern>/*</url-pattern>
</filter-mapping>

 用户是否登陆过滤器:
1.首先增加一个Action、ActionForm & JSP: login.jsp中为一个登陆表单: UserActionForm.java为一个Struts的ActionForm。 UserAction.java将用户登陆信息添加到session中。

开发UserLoginedFilter.java:
package bluemoon.crm.systemmanage.struts.Filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.*;

import bluemoon.crm.systemmanage.struts.forms.UserActionForm;

public class UserLoginedFilter extends HttpServlet implements Filter
{
protected FilterConfig config;

public void init(FilterConfig filterConfig) throws ServletException
{
this.config = filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
RequestDispatcher dispatcher = request.getRequestDispatcher("userLogin.jsp");
HttpServletRequest userRequest = (HttpServletRequest)request;
UserActionForm userActionForm = (UserActionForm)userRequest.getSession().getAttribute("userActionForm");
if(userActionForm == null || userActionForm.getUser_name() == null || userActionForm.getUser_name().trim().length()<1)
{
System.out.println("用户未登录!");
dispatcher.forward(request,response);
return;
}
System.out.println("用户已登录!");
chain.doFilter(request,response);
}
public void destroy()
{
}
}

 

在web.xml文件中添加如下配置信息:
<!—用户是否登陆过滤器配置 注意只过虑jsp页面,不过虑.do -->
<filter>
<filter-name>userLoginedFilter</filter-name>
<filter-class>bluemoon.crm.systemmanage.struts.Filter.UserLoginedFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>userLoginedFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<!—用户是否登陆过滤器配置结束 -->

 

用户是否登陆过滤器在多模块中的应用:
1.修改上面的过滤器代码:
package bluemoon.crm.systemmanage.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.*;

import bluemoon.crm.systemmanage.struts.forms.UserForm;

//用户未登陆过滤器
public class UserNoLoginedFilter extends HttpServlet implements Filter
{

protected FilterConfig config;

public void init(FilterConfig filterConfig) throws ServletException
{
this.config = filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
//首先预定义到要转向的页面,由此带来的问题就是userLogin.jsp页面的图片必须要使用绝对路径,方法见userLogin.jsp页面
RequestDispatcher dispatcher = request.getRequestDispatcher("/toLogin.do?prefix=&page=/userLogin.jsp");
//注意在struts-config.xml中增加一个Action,如下:
/*
*<action
* attribute="userForm"
* name="userForm"
* path="/toLogin"
* scope="request"
* type="org.apache.struts.actions.SwitchAction" />
*/
// 从session中获取用户form
HttpServletRequest userRequest = (HttpServletRequest)request;
UserForm userForm = (UserForm)userRequest.getSession().getAttribute("userForm");

//如果未登陆则没有userFrom信息
if(userForm == null || userForm.getUser_name() == null || userForm.getUser_name().trim().length()<1)
{
System.out.println("用户未登录!");

//分发到登陆页面
dispatcher.forward(request,response);
//((HttpServletResponse)response).sendRedirect("toModule.do?prefix=&page=/userLogin.jsp");
return;
}


System.out.println("用户"+userForm.getUser_name()+"已登录!");
chain.doFilter(request,response);
}
public void destroy()
{

}
}

                                                                                                                  注:版权所有,未经本人同意不得转载

转载于:https://my.oschina.net/A0926/blog/736419

分享到:
评论

相关推荐

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

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

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

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

    servlet过滤器Filter入门

    如果没有另一个过滤器与 servlet 或 JSP 页面关联,则 servlet 或 JSP 页面被激活。 7. 过滤器的注册 在部署描述符文件(web.xml)中使用 filter 和 filter-mapping 元素来注册过滤器。 8. 禁用激活器 servlet ...

    如何配置Filter过滤器处理JSP中文乱码

    【如何配置Filter过滤器处理JSP中文乱码】 在开发Java Web应用时,尤其是在处理包含中文字符的请求时,可能会遇到中文乱码的问题。解决这个问题的一种常见方法是使用Filter过滤器。以下是配置Filter过滤器处理JSP...

    jsp+servlet登录验证过滤器

    4. **过滤器(Filter)**:在Java Web应用中,过滤器是实现特定功能的类,它们可以在请求到达目标资源(如Servlet或JSP)之前和之后拦截请求和响应。在这个场景下,登录验证过滤器会检查每个请求,如果用户未登录,...

    servlet过滤器配置,解决JSP的所有乱码

    在标题“servlet过滤器配置,解决JSP的所有乱码”和描述“JSP页面获得servlet是不是经常出现乱码呢?很烦人哦,那就试试这个吧,可以解决所有的乱码,里面有说明教你怎么配”中,主要涉及的知识点是通过配置Servlet...

    Servlet与jsp与Filter的使用

    当一个请求到达时,服务器会根据web.xml配置文件中的过滤器映射,依次调用每个Filter的doFilter方法。每个Filter可以通过FilterChain对象调用下一个Filter或直接调用目标servlet/JSP页面。在Filter中,开发者可以...

    servlet过滤器技术实例,

    通过合理地设计和配置过滤器,我们可以实现各种功能,提高应用程序的安全性和效率。在学习和使用servlet过滤器时,理解其工作原理和生命周期,以及如何在`web.xml`或Spring框架中配置,都是非常关键的。

    使用filter拦截servlet和jsp页面的内容,进行过滤后输出

    为了增强应用程序的安全性、性能优化或者实现特定的功能,我们常常会使用过滤器(Filter)来拦截请求和响应。本文将详细介绍如何使用filter来对servlet和jsp页面的内容进行过滤,并在过滤后输出。 首先,了解...

    Java servlet过滤器配置详解

    本篇将深入讲解Java Servlet过滤器的配置,包括`EncodingFilter`类的使用、jsp页面配置以及`web.xml`文件的配置。 首先,`EncodingFilter`是一个常见的过滤器,主要用于解决HTTP请求和响应中的编码问题。在处理中文...

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

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

    jsp中servlet过滤器和侦听器

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

    jsp filter 过滤器判断用户是否登录

    通过使用过滤器(Filter),可以在请求到达目标资源(如Servlet或JSP页面)之前进行处理,例如实现登录状态检查、权限验证等功能。下面我们就通过分析一个具体的示例代码来详细了解如何使用JSP Filter过滤器来判断...

    Servlet 和 Jsp 学习指南+ 代码

    7. **过滤器(Filter)和监听器(Listener)**:这两种组件在Servlet容器中的作用,如何使用它们增强应用的功能,比如日志记录、会话管理等。 8. **Servlet配置**:web.xml文件的使用,以及在现代应用中采用注解...

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

    在这些技术中,过滤器(Filter)和监听器(Listener)是两个关键的概念,它们在处理请求、响应以及管理应用程序状态时发挥着重要作用。下面将详细讲解这两者的区别。 1. **过滤器(Filter)** - **定义**:过滤器...

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

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

    Servlet配置过滤器 Filter

    ### Servlet配置过滤器Filter知识点详解 #### 一、概述 在Java Web开发中,`Servlet`过滤器(`Filter`)是一种重要的技术组件,它可以在请求到达目标资源(如Servlet或JSP页面)之前或者响应返回客户端之前进行...

    servlet和jsp学习指南

    - 探索Servlet的过滤器(Filter)和监听器(Listener)机制,以及它们在应用中的实际应用场景。 2. JSP技术的原理和应用 - JSP是一种易于使用的模板技术,其文件扩展名通常为.jsp,可以看作是Servlet的一种简化...

    Servlet3.0使用注解标注过滤器(Filter)

    通过上述介绍可以看出,Servlet 3.0 提供的 `@WebFilter` 注解极大地简化了过滤器的配置过程,提高了开发效率,并且增强了代码的可读性和可维护性。对于现代的Java Web 开发者来说,了解并掌握这一特性是非常重要的...

    jsp中过滤器配置实现所有过滤

    在Java服务器页面(JSP)开发中,过滤器(Filter)是Servlet规范的一部分,它允许开发者在请求被处理之前或之后执行某些操作,比如字符编码转换、权限验证、日志记录等。本话题将深入探讨如何在`web.xml`配置文件中...

Global site tag (gtag.js) - Google Analytics