切面性服务——DRP项目中Filter的应用
来源:互联网 发布:内网端口转发工具 编辑:程序博客网 时间:2024/05/21 05:42
Filter是Servlet中一个很重要的规范。它能够对request和response进行拦截,并进行预处理。也就是说在request到达Servlet之前预处理request,在reponse离开Servlet,到达客户端之前预处理response。有了Filter,我们就可以对系统进行统一管理。
拿字符集设置来举例,如果我们不使用Filter,那么我们就需要在每个页面的Servlet里面都要设置字符集:
上面是添加用户的时序图,在添加用户时,我们需要设置一次字符集;而在修改用户时,我们仍然需要需要设置字符集,假如现在我们有新需求。所有页面都不需要进行字符集设置了,那么,我们就需要相对每一个页面进行修改,不利于同一控制。
另外,在上面添加用户的逻辑中,设置字符集显然是一个独立的逻辑单元,所以我们非常有必要将它分离开来。
web.xml配置文件中进行配置,写在配置文件是为了便于日后修改字符集,不在程序里写死:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><filter><filter-name>CharsetEncodingFilter</filter-name><filter-class>com.xxjstgb.drp.util.filter.CharsetEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>GBK</param-value></init-param></filter> <filter-mapping> <filter-name>CharsetEncodingFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CharsetEncodingFilter</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping></web-app>
CharsetEncodingFilter的filter-mapping中,它的url-pattern为*.jsp,这表示对所有jsp都起作用。/servlet/*表示以/servlet/的所有URL将被过滤。
字符编码过滤器代码:
package com.xxjstgb.drp.util.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 CharsetEncodingFilter implements Filter {private String encoding; public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//设置字符集【这里没有写死,而是读取配置文件】request.setCharacterEncoding(encoding);//继续执行chain.doFilter(request, response);}public void init(FilterConfig filterConfig) throws ServletException {//读取xml文件里面设置的参数,成员变量里面this.encoding=filterConfig.getInitParameter("encoding");}}
这样就能够完成统一字符集设置了。
另外,Filter仍然能够跳转到登录页面的问题:首先,用户需要通过登录页面才能够登录系统;然后,由于权限问题,某用户登录系统后,在地址栏输入相应的url,不应该跳到越权页面;还有,就是Session过期后,需要跳到登陆页面重新登录,不应该允许用户继续访问。
这些问题,依然能够使用Filter进行统一管理。不往上贴了。有兴趣的话,大家可以照葫芦画葫芦自己做一下。
- 切面性服务——DRP项目中Filter的应用
- Java Drp项目实战——Web应用服务器
- Ajax的DropDrowList应用——改变一个drp会引起另一个drp的值改变
- Java Drp项目实战——Drp知多少
- DRP项目(九)----Filter原理
- Java Drp项目实战——Servlet
- Java Drp项目实战——Servlet
- 【drp项目】——读取xml数据
- DRP中用到的几个filter
- 【DRP】拦截器Filter的使用
- 管理手记:DRP项目中软件系统架构的比较
- 【DRP】EL表达式的应用
- DRP项目总结(一)——项目简介
- 过滤器Filter在项目中应用详解
- 面向切面的 Spring —— 如何在 XML 中声明切面?
- 【Java项目实战】——DRP之HTML总结
- 【Java项目实战】——DRP之Oracle_11g数据库安装
- Java Drp项目实战—— 环境搭建
- Android中自定义属性(attrs.xml,TypedArray)的使用
- HttpClient 学习整理
- 安全完美终止线程大全,各种各样情况
- 多线程通信——事件
- upnp协议编程一
- 切面性服务——DRP项目中Filter的应用
- hadoop启动后进safemode不出来
- 字典树
- RobotFrameWork(三)数据类型
- hdu1333/poj1142-Smith Numbers
- JSON
- C++ list用法
- HTTP 416 错误 – 所请求的范围无法满足 (Requested Range not satisfiable)
- MFC窗口程序显示命令行输出窗口的方法