`
唐朝
  • 浏览: 259760 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

过滤器的使用

    博客分类:
  • jsp
阅读更多
一.页面编码过滤器
1.开发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()
{

}
}
2. 在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中。
2. 开发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()
{

}
}
3.在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()
{

}
}

四.关闭Session过滤器
1.相关的HibernateUtil.java源码:
package com.worklog.util;

import org.hibernate.*;
import org.hibernate.cfg.*;



public class HibernateUtil {

private static SessionFactory sessionFactory;
static
{
try
{
sessionFactory = new Configuration().configure().buildSessionFactory();
}
catch(Exception e)
{
e.printStackTrace();
}
}

public static final ThreadLocal<Session> threadLocalSession = new ThreadLocal<Session>();
public static final ThreadLocal<Transaction> threadLocalTransaction = new ThreadLocal<Transaction>();
public static Session currentSession()
{
Session session = threadLocalSession.get();
try
{
if(session == null || !session.isOpen())
{
session = openSession();
threadLocalSession.set(session);
}
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("获取Session失败");
}
return session;
}
public static Session openSession() throws Exception
{
return getSessionFactory().openSession();
}
public static SessionFactory getSessionFactory() throws Exception
{
return sessionFactory;
}
public static void closeSession()
{
Session session = (Session)threadLocalSession.get();
threadLocalSession.set(null);
try
{
if(session != null && session.isOpen())
{
//System.out.println("HibernateUtil.java--line59,关闭Session!");
session.close();
}
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("关闭Session失败");
}
}
public static void beginTransaction()
{
Transaction tx = (Transaction)threadLocalTransaction.get();
try
{
if(tx == null)
{
tx = currentSession().beginTransaction();
threadLocalTransaction.set(tx);
}
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("开始事务失败");
}
}
public static void commitTransaction()
{
Transaction tx = (Transaction)threadLocalTransaction.get();
try
{
if(tx !=null && !tx.wasCommitted() && !tx.wasRolledBack())
{
tx.commit();
}
threadLocalTransaction.set(null);
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("提交失败");
}
}
public static void rollbackTransaction()
{
Transaction tx = (Transaction)threadLocalTransaction.get();
try
{
threadLocalTransaction.set(null);
if(tx != null && !tx.wasCommitted() && !tx.wasRolledBack())
tx.rollback();
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("回滚失败");
}
}
}
2.CloseSessionFilter.java源码:
package com.worklog.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.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.worklog.util.HibernateUtil;


public class CloseSessionFilter implements Filter{
Log log = LogFactory.getLog(this.getClass());
protected FilterConfig config;

public void init(FilterConfig config) throws ServletException
{
this.config = config;
}

public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException,ServletException
{
try
{
//让后面的Filter链处理请求,这个Filter仅仅拦截响应处理Hibernate操作
chain.doFilter((HttpServletRequest)request, (HttpServletResponse)response);
}
finally
{
try
{
//一直没有合适的关闭session的方法
HibernateUtil.closeSession();
//System.out.println("close session success");
log.debug("close session success");
}
catch(Exception e)
{
HibernateUtil.rollbackTransaction();
System.out.println("can not close session!\nerrors:"+e.getMessage());
log.debug("can not close session!\nerrors:"+e.getMessage());
}
finally
{
HibernateUtil.closeSession();
}
}
}

public void destroy()
{

}
}
3.web.xml配置
<?xml version="1.0" encoding="GB2312"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <!-- 关闭Session过滤器 -->
  <filter>
    <filter-name>closeSessionFilter</filter-name>
    <filter-class>com.worklog.filter.CloseSessionFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>closeSessionFilter</filter-name>
    <servlet-name>action</servlet-name>
  </filter-mapping>
  <!-- 关闭Session过滤器结束 -->
 
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

分享到:
评论

相关推荐

    石英砂过滤器使用手册范本.pdf

    石英砂过滤器使用手册范本.pdf

    hibernate过滤器使用例子

    在探讨“hibernate过滤器使用例子”这一主题时,我们深入分析了如何在Hibernate框架中运用过滤器功能,以及如何结合分页技术优化数据查询效率。以下将详细阐述相关知识点,包括过滤器的基本概念、配置方法、源码解析...

    完整IP端口过滤器使用下载

    "完整IP端口过滤器使用下载"这个标题暗示我们将会讨论一个工具或程序,它能够帮助用户筛选并管理IP地址及其对应的开放端口。这种过滤器在网络安全、服务器管理、网络监控以及数据包分析等场景下具有广泛的应用。 ...

    过滤器使用更换周期资料.pdf

    不过,基于标题和描述中提到的“过滤器使用更换周期资料.pdf”以及能够识别出的文字片段,我们可以推测这份文档很可能涉及过滤器的相关技术参数和推荐的更换周期。 那么,尽管部分文字片段看起来似乎是一些压力值...

    过滤器文档过滤器使用中的方法过滤器.pdf

    本文档将深入探讨过滤器的使用及其功能。 **过滤器概述** 过滤器(Filter)的主要作用是对客户端发起的HTTP请求进行预处理,也可以在响应返回给客户端之前进行后处理。例如,过滤器可以用于以下用途: 1. **敏感...

    过滤器使用说明书.doc

    【过滤器使用说明书】 本文将详细讲解微孔过滤器ZG-10.0的使用、特点、滤芯选择及设备的维护等关键知识点,帮助用户更好地理解和操作该设备。 一、产品介绍 微孔过滤器ZG-10.0主要用于食品、乳品、饮料、酒类、...

    压缩空气精密过滤器使用说明书.doc

    **压缩空气精密过滤器使用详解** 压缩空气精密过滤器是一种重要的工业设备,主要应用于清除压缩空气中的固体微粒、水滴以及油雾等杂质,确保空气的洁净度。本使用说明书详细介绍了过滤器的结构、功能、性能以及安装...

    石英砂过滤器使用手册范本.doc

    "石英砂过滤器使用手册范本.doc" 本文档是石英砂过滤器的使用手册,旨在指导用户正确地操作和维护机械过滤器,以确保其正常运行和高效过滤水质。 工作原理 机械过滤器的工作原理是利用石英砂的截污能力,将原水中...

    java Web项目中过滤器使用方法

    本文将详细讲解Java Web项目中过滤器的使用方法,以及如何配置和实现过滤器。 1. **过滤器的概念** 过滤器是Servlet规范的一部分,它在请求被Servlet处理之前或之后执行,可以用来实现如登录检查、字符编码转换、...

    过滤器的使用过滤器的使用

    本篇文章将深入探讨Java中的过滤器使用技术,旨在帮助开发者理解和掌握这一核心技术。 首先,我们需要了解过滤器的概念。在Java Servlet规范中,过滤器是一个实现了javax.servlet.Filter接口的类,它可以对HTTP请求...

    wpe高级过滤器的使用

    wpe高级过滤器的使用

    java-web -- servlet 拦截器 过滤器使用

    2. **过滤器的使用**:实现Filter接口,覆写doFilter方法,设置过滤规则。在web.xml中配置Filter,指定需要拦截的URL模式,以及Filter的顺序。也可以使用Java配置方式。 3. **拦截器的使用**:在Spring MVC中,创建...

    java过滤器的使用

    Java过滤器(Filter)是Java Web开发中的一个重要概念,它主要应用于Servlet容器中,如Tomcat、Jetty等。过滤器允许我们在请求被发送到目标...通过熟练掌握过滤器的使用,我们可以提高Java Web应用的健壮性和用户体验。

    篮式过滤器使用说明书.pdf

    篮式过滤器使用说明书.pdf

    Servlet过滤器使用

    这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数。 b、doFilter(ServletRequest,ServletResponse,FilterChain)...

    石英砂过滤器使用说明书.doc

    石英砂过滤器使用说明书.doc

    自清洗过滤器使用说明书.doc

    自清洗过滤器使用说明书.doc

    全自动浅层过滤器使用手册doc.doc

    全自动浅层过滤器使用手册doc.doc

    Cuckoo过滤器:实际上比 Bloom 更好_Go语言_代码_相关文件_下载

    Cuckoo 过滤器是近似集合成员查询的...Cuckoo 哈希表可以非常紧凑,因此对于需要低误报率 () 的应用程序,cuckoo 过滤器可以比传统的 Bloom 过滤器使用更少的空间。 更多详情、使用方法,请下载后阅读README.md文件

Global site tag (gtag.js) - Google Analytics