<%@ page contentType="text/html; charset=gb2312"%> J2EE设计模式浅谈(二)之Filter
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
J2EE设计模式浅谈(二)之Filter
     发布者: 发布时间:2007-11-26
J2EE设计模式浅谈(二)之Filterzhaum@studyjava.com其实J2EE中太多的定义是很烦人的,设计模式也很抽象的,今天我就以Servlet2.3中新增的Filter在Web Application中的应用,来进一步的说明设计模式。首先假设我们现在想做一个Web Application(例如BBS)。要求具备下列功能:1、 在用户发帖子之前,要进行身份认证,以确认该用户是已登陆用户。2、 其次是要对删除帖子,修改帖子,进行权限检查。3、 访问特定资源(Web 页、JSP 页)时的身份认证那么对待这些要求我们该怎么去做,如果在每个页面中都写检查权限的代码,不是一个好想法,且使的程序的可重用性降低,对比设计模式Intercepting Filter(截获过滤)正好符合我们的要求,且在Servlet2.3中通过使用过滤器(Filter)能够使得Web Application开发者能够在请求到达Web资源之前截取请求,在处理请求之后修改应答。一个执行过滤器的Java 类必须实现javax.servlet.Filter 接口。这一接口含有三个方法:· init(FilterConfig):这是容器所调用的初始化方法。它保证了在第一次 doFilter() 调用前由容器调用。它能获取在 web.xml 文件中指定的filter初始化参数(文章的后面有lightningboard 的web.xml文件)。· doFilter(ServletRequest, ServletResponse, FilterChain):这是一个完成过滤行为的方法。它同样是上一个过滤器调用的方法。引入的 FilterChain 对象提供了后续过滤器所要调用的信息,Filter中因为有了 FilterChain,就使的几个FILTER 成了一个链条。· destroy():容器在销毁过滤器实例前,doFilter()中的所有活动都被该实例终止后,调用该方法在开源的lightningboard BBS中实现了两个Filter,如下1、ControllerFilter在这里起到的是Front Controller(前端控制器)的作用,是MVC模式中的控制器,是该BBS的入口点。package lightningboard;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.Filter;import javax.servlet.FilterConfig;import javax.servlet.FilterChain;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import lightningboard.action.*;/*** Control all *.do.* @version 0.3.5* @author Xiaobo Liu*/public class ControllerFilter implements Filter {/*** Action dispatch
* example: homde.do will be create HomeAction and call its excute() method.*/protected FilterConfig filterConfig;public void init(FilterConfig config) {this.filterConfig = config;}public void destroy() {this.filterConfig = null;}public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)throws IOException, ServletException{HttpServletRequest request = (HttpServletRequest)srequest;HttpServletResponse response = (HttpServletResponse)sresponse;long timeStart=System.currentTimeMillis();Configuration cfg=Configuration.getInstance();String encoding=cfg.getValue("SYS.ENCODING");request.setCharacterEncoding(encoding);String path = (String) request.getRequestURI();String actionString = path.substring(path.lastIndexOf("/") + 1,path.lastIndexOf("."));String forwardPage=null;try {if(actionString.equals("forum"))forwardPage=new ForumAction().excute(request,response);else if(actionString.equals("topic"))forwardPage=new TopicAction().excute(request,response);else if(actionString.equals("user"))forwardPage=new UserAction().excute(request,response);else if(actionString.equals("userList"))forwardPage=new UserListAction().excute(request,response);else if(actionString.equals("login"))forwardPage=new LoginAction().excute(request,response);else if(actionString.equals("register"))forwardPage=new RegisterAction().excute(request,response);else if(actionString.equals("post"))forwardPage=new PostAction().excute(request,response);else if(actionString.equals("postP"))forwardPage=new PostPAction().excute(request,response);else if(actionString.equals("userEdit"))forwardPage=new UserEditAction().excute(request,response);else if(actionString.equals("userEditP"))forwardPage=new UserEditPAction().excute(request,response);else if(actionString.equals("logout"))forwardPage=new LogoutAction().excute(request,response);else //default: homeforwardPage=new HomeAction().excute(request,response);}catch (ActionException ex) {Debug.out(ex);request.setAttribute("actionMessage",new ActionMessage("system_error"));forwardPage="/actionMessage.jsp";}// forward pageif (forwardPage!=null){String processTime=""+(System.currentTimeMillis()-timeStart);request.setAttribute("processTime",processTime);filterConfig.getServletContext().getRequestDispatcher(forwardPage).forward(request,response);}}}2、此FILTER起的是Intercepting Filter(截获过滤)的作用。package lightningboard.filter;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.Filter;import javax.servlet.FilterConfig;import javax.servlet.FilterChain;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class SessionAuthorizationFilter implements Filter {protected FilterConfig filterConfig;public void init(FilterConfig config) {this.filterConfig = config;}public void destroy() {this.filterConfig = null;}private boolean passed(ServletRequest request, ServletResponse response)throws IOException, ServletException {boolean result=false;String objectName=this.filterConfig.getInitParameter("OBJECT_NAME");HttpServletRequest req = (HttpServletRequest)request;HttpSession session =req.getSession(false);if(session!=null){Object object=session.getAttribute(objectName);if(object!=null)result= true;}return result;}public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)throws IOException, ServletException{if (passed(request,response))filterChain.doFilter(request, response);else{HttpServletResponse res = (HttpServletResponse)response;String errorPage=this.filterConfig.getInitParameter("ERROR_PAGE");res.sendRedirect(errorPage);}}}容器通过 Web 应用程序中的配置描述符 web.xml 文件解析过滤器配置信息。有两个新的标记与过滤器相关: 标记是一个过滤器定义,它必定有一个 子元素。 子元素给出了一个与过滤器实例相关的名字。 指定了由容器载入的实现类。您能随意地包含一个 子元素为过滤器实例提供初始化参数。 标记代表了一个过滤器的映射,指定了过滤器会对其产生作用的 URL 的子集。lightningboard 项目中的web.xml文件如下:controllerFilterlightningboard.ControllerFiltersessionAuthorizationFilterlightningboard.filter.SessionAuthorizationFilterERROR_PAGElogin.jspOBJECT_NAMEloginBeansessionAuthorizationFilter/post.dosessionAuthorizationFilter/postP.dosessionAuthorizationFilter/post.jspsessionAuthorizationFilter/userEdit.dosessionAuthorizationFilter/userEditP.dosessionAuthorizationFilter/userEdit.jspsessionAuthorizationFilter/userList.docontrollerFilter*.doindex.html由于本人水平有限,不当之处还请指正,谢谢!!!
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
Adapter模式在J2SE事件处理中的应用
设计模式之父谈如何使用设计模式
AOP是什么?
JDBC-ODBC桥
ATM银行取款机模拟程序(可连接数据库)
数据库集群应用C-JDBC发布1.3.2版本
 
最近评论:
        
鼠痤痱? 牮? crimeaua
?腧? 襦磬蝾痂? 铕腓眍? 沩彗漕 [URL=http://crimeaua.ru]?腧? 襦磬蝾痂? 铕腓眍? 沩彗漕[/URL] 桫? 觐腩觐朦?? - 邃桧铄 玟囗桢 蝾泐 镥疴钽? 脲?. 卿羼?, ? 龛骓彘 鬣耱? 项腓牦痤怦觐泐 躅腱?, ? 磬 禧耋 砚. 阮囗磬, 蜞?, 沅? 皴泐漤? 祛瘃觐? 忸赙嚯, ? 玎痤驿嚯?? 狍潴 ?腧? 铗潲? [URL=http://crimeaua.ru]?腧? 铗潲鮗/URL] 牮 襦磬蝾痂? 玎?? [URL=http://crimeaua.ru]牮 襦磬蝾痂? 玎??[/URL] 遽铍铋 蝈痧栩铕梃 忸牮筱, 黩? 篁铒噱? ? 珏脲睇? ? ?痍桴 牮耜桴 鲡弪圊. ? 眍戾疣? 怦? ? 溴疱忮 ? 蝈? 驽 鲡弪圊, ? 箐钺耱忄扈 ? 忮眚桦?蝾疣扈. 武桧 漕? - 耜痤祉邋, 怛铕铋 - 镳邃耱噔栩咫邋, ? 徉腙铐铎-蝈痧囫铋 磬 怛铕铎 噫?, 沅? 祛骓? 镱忄??螯??, 觐沅? 礤驽豚龛? 耧篑赅? 牮 襦磬蝾痂? 矬蝈怅? [URL=http://crimeaua.ru]牮 襦磬蝾痂? 矬蝈怅鑋/URL] ?腧? 箅 [URL=http://crimeaua.ru]?腧? 箅[/URL] 襦磬蝾痂? 麇痦铎铕 牮 [URL=http://crimeaua.ru]襦磬蝾痂? 麇痦铎铕 牮[/URL] 隋觐镱朦 (沭鬻尻), 桁?? 磬戾疱龛? 皲咫囹? 鲥眚痤? 署耜铋 钺豚耱?. 皖 ? 1787? 铐 忸? ? 耥钼? 钺疣?. 藻钿铖栝耜栝 箦玟 ? 镳箐 磬?. 镱 痼耨觇 - 羊囵 署. 牮 [URL=http://crimeaua.ru/map.html]牮[/URL] 牮
        
all credit card history free
Nice Site! http://google.com
        
春暖花开
wow power leveling2 wow power leveling gvf wow power levelingfcvg wow power leveling wow power leveling wow powerlevelingfcgv wow powerlevelingwq4 wow powerleveling wow powerleveling wow powerleveling world of warcraft power leveling world of warcraft power leveling world of warcraft power leveling world of warcraft power levelingszr world of warcraft power leveling world of warcraft powerleveling world of warcraft powerlevelinge5t world of warcraft powerleveling world of warcraft powerleveling world of warcraft powerleveling wow gold wow gold wow goldrfy5 wow gold wow gold world of warcraft goldre world of warcraft goldgh world of warcraft gold world of warcraft goldfr world of warcraft gold AOC Power Levelinggvgv AGE OF CONAN Power Levelingllwwbb928 f7i6s7zp
        
internet casino rollyo site.
http://rollyo.com/internetcasinoo internet casino internet casino internet casino
        
鍥炲
        
best casino rollyo site.
http://rollyo.com/bestcasino best casino best casino best casino
        
casino online rollyo site.
http://rollyo.com/casinoonline casino online casino online casino online
        
casino game rollyo site.
http://rollyo.com/casinogame casino game casino game casino game
        
casino bonus rollyo site.
http://rollyo.com/casinobonuse casino bonus casino bonus casino bonus
        
viagra - buycheapviagra rx
http://buycheapviagrarx.com buy cheap viagra buy cheap viagra buy cheap viagra http://buycheapviagrarx.com buy viagra buy viagra buy viagra http://buycheapviagrarx.com buy viagra online buy viagra online buy viagra online
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号