JBuilder2005 Servlet开发之过滤器
发布时间:2006-05-08 16:13:38 来源:天极网 网友评论 0 条过滤器可以在请求到达JSP或Servlet之前或响应返回客户端之前添加一些额外的操作。如果有多个JSP页面和Servlet都需要进行一个相同或相似的操作,我们可以把这个操作抽取到一个Servlet过滤器中,并通过匹配路径截获感兴趣JSP或Servlet。
我们举几个典型的过滤器应用的例子,读者可以推而广之:
·编码转换
乱码问题困扰了不少的Web应用程序开发者,这是因为基于Java的Web应用程序可能运行于不同的Web应用程序器、操作系统平台或硬件服务器上,不同的环境有自己默认的编码类型,在数据的转换过程中不同的默认编码是乱码问题的始作俑者,所以在开发JSP时常常需要将数据进行编码转换。我们可以创建一个Servlet过滤器在请求进入服务程序前都进行编码转换。
·添加统一的标题或脚注
有些网页需要添加统一的标题头或脚注,可以通过Servlet过滤器在响应返回到客户端前给网页添加上统一的标题和脚注。
·进行安全的控制
登录系统后,一般都会将用户信息对象放入到session中,可以通过Servlet过滤器在请求进入JSP或Servlet前判断session中是否有用户信息对象,如果有,则说明用户已经登录,如果没有,则说明用户还没有登录,将请求重定向到登录页面。
本节所提供的Servlet过滤器就是为了实现安全控制,下面我们就来开发这个Servlet。
1.打开创建Servlet过滤器的向导。
通过File->New...->Web->双击Filter Servlet图标启动创建Servlet过滤器的向导,如下图所示:
图 7 指定Servlet过滤器的名字
和创建标准的Servlet相似,在这步里指定过滤器的类名和包名。在Class name中输入LoginCheckFilter,包名依就为bookstore.servlet。按Next到下一步。
2.指定过滤器的路径匹配模式
图 8 指定过滤器的匹配路径模式
·Name:logincheckfilter,指定过滤器的名字
·URL pattern:/*,指定过滤器路径匹配模式,这里我们使过滤器对所有的请求都进行过滤。
按Finish创建此过滤器。
打开向导创建的LoginCheckFilter.java文件,并录入粗体所示的代码,如下所示:
代码清单 4 LoginCheckFilter.java代码
1. package bookstore.servlet;
2. …
3. public class LoginCheckFilter
4. extends HttpServlet implements Filter
5. {
6. …
7. public void doFilter(ServletRequest request, ServletResponse response
8. , FilterChain filterChain)
9. {
10. try
11. {
12. //进行请求和响应的类型转换
13. HttpServletRequest httpRequest = (HttpServletRequest) request;
14. HttpServletResponse httpResponse = (HttpServletResponse) response;
15.
16. boolean isValid = true;
17. String uriStr = httpRequest.getRequestURI().toUpperCase();
18. if (uriStr.indexOf("LOGIN.JSP") == -1 &&
19. uriStr.indexOf("SWITCH.JSP") == -1 &&
20. httpRequest.getSession().getAttribute("ses_userBean") == null)
21. {
22. isValid = false;
23. }
24. if (isValid)
25. {
26. filterChain.doFilter(request, response);
27. } else
28. {
29. httpResponse.sendRedirect("/webModule/login.jsp");
30. }
31.
32. } catch (ServletException sx)
33. {
34. filterConfig.getServletContext().log(sx.getMessage());
35. } catch (IOException iox)
36. {
37. filterConfig.getServletContext().log(iox.getMessage());
38. }
39. }
40. …
41. }由于login.jsp是用户登录页面,而switch.jsp是用户登录处理页面,在访问这两个页面时用户信息对象都还没有产生,所以应该将这两个页面排除在过滤器检验规则这外。我们通过判断请求路径获知是否是login.jsp和switch.jsp,如第18~19行所示。
如果不是这两个页面,则都必须进行检验,判断页面的session对象中是否包含以ses_userBean命名的对象(第20行)。如果没有包含以ses_userBean命名的对象,重定向到登录页面(第29行),否则将请求传给请求的目标程序(第26行)。
打开web.xml,你将看到有关LoginCheckFilter过滤器的部署描述配置信息,如下粗体所示:
代码清单 5 过滤器的部署描述配置信息
1. <web-app>
2. <display-name>webModule</display-name>
3. <filter>
4. <filter-name>logincheckfilter</filter-name>
5. <filter-class>bookstore.servlet.LoginCheckFilter</filter-class>
6. </filter>
7. <filter-mapping>
8. <filter-name>logincheckfilter</filter-name>
9. <url-pattern>/*</url-pattern>
10. </filter-mapping>
11. …
12. </web-app><filter-name>配置过滤器的名字和实现类,而<filter-mapping>配置过滤器的路径匹配模式。
- 推荐阅讯
- Java手机软件图形界面API之慨述
- 实战体会Java的多线程编程
- JBuilder2005 Servlet开发之监听器
- 如何在JDeveloper 10g中使用JSF
- Java咖啡馆(11):Java插件技术
- JAVA开发者应该去的20个英文网站
- 全面剖析Java 6中新型模态对话框API
- Weblogic81和Hibernate 的集成问题
- Java程序性能调优的基本知识和JDK调优
- Java核心类库GNU Classpath 0.90发布
- 阅读排行
- 1.Java连接SQL Server 2000
- 2.Java文件操作详解
- 3.Java控件设计入门
- 4.Java操作Excel电子表格
- 5.Java: JNI完全手册
- 6.Java命令行简介
- 7.开发J2EE应用应遵循的几点原则
- 8.Servlet与Javabean配置
- 9.Java规则引擎与其API应用详解
- 10.CLASSPATH详解
- 专题教程
- Windows Server-Windows Server文档-Windows Server新闻-Windows Ser PostgreSQL-PostgreSQL文档-PostgreSQL新闻-PostgreSQL专家
- WebLogic-WebLogic文档-WebLogic新闻-WebLogic专家 FreeBSD-FreeBSD文档-FreeBSD新闻-FreeBSD专家
- Linux-内核 GUI KDE Gnome DNS FTP 安全 安装-Linux专区 Windows-AD IIS ServerCore 虚拟化 安全 HPC-Windows专区
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
