[转帖]Servlet过滤器分析(2)_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3858 | 回复: 0   主题: [转帖]Servlet过滤器分析(2)        下一篇 
eink
注册用户
等级:上尉
经验:764
发帖:54
精华:0
注册:2012-11-13
状态:离线
发送短消息息给eink 加好友    发送短消息息给eink 发消息
发表于: IP:您无权察看 2012-11-16 16:01:32 | [全部帖] [楼主帖] 楼主

[2].实例:报告过滤器

    趁热打铁,我们来试验一个简单的过滤器,只要调用相关的servletJSP页面,它就打印一条消息到标准输出。为了完成此任务,相应的过滤器必须具有下面的内容:

1)实现Filter接口的一个类。这个类名为ReportFilter,如程序清单9-2所示。这个类对initdestroy方法提供空体。

2)在doFilter方法中过滤行为。每当调用与这个过滤器相关的servletJSP页面时,doFilter方法就生成一个打印输出,此输出列出请求主机和调用的URL。因为getRequestURL方法位于HttpServletRequest而不是ServletRequest中,所以把ServletRequest对象构造为HttpServletRequest类型。

3)调用FilterChaindoFilter方法。在打印输出报告后,过滤器调用FilterChaindoFilter方法激活servletJSP页面(如果有的话,调用下一个过滤器)

4)对Web应用主页和显示TodaysSpecialservlet进行注册。首先,filter元素将名称Reporter与类moreservlets.filters.ReportFilter相关联。然后,filter-mapping元素使用/index.jspurl-pattern将过滤器与主页相关联。最后,filter-mapping元素使用TodaysSpecialservlet-name将过滤器与TodaysSpecialservlet(名称TodaysSpecial是在servlet元素中声明的)相关联。参见程序清单9-3

5)禁用激活器servlet。首先,建立一个RedirectorServlet(见程序清单9-6),它把接收到的所有请求重定向到此Web应用的主页。接着,利用servletservlet-mapping元素(参见程序清单9-3)指定所有以http://host/webAppPrefix/servlet/ 开始的URL都应该激活RedirectorServlet

给出这些设置后,每当客户机请求此Web应用主页(程序清单9-4)或TodaysSpecialservlet(程序清单9-5)时,都调用此过滤器。

程序清单9-2 ReportFilter.java

package moreservlets.filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*; // For Date class
public class ReportFilter implements Filter {
      public void doFilter(ServletRequest request,
      ServletResponse response,
      FilterChain chain)
      throws ServletException, IOException {
            HttpServletRequest req = (HttpServletRequest)request;
            System.out.println(req.getRemoteHost() +
            " tried to access " +
            req.getRequestURL() +
            " on " + new Date() + ".");
            chain.doFilter(request,response);
      }
      public void init(FilterConfig config)
      throws ServletException {
      }
public void destroy() {}
}


程序清单9-3 web.xml(针对报告过滤器的摘录)

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- Register the name "Reporter" for ReportFilter. -->
<filter>
<filter-name>Reporter</filter-name>
<filter-class>
moreservlets.filters.ReportFilter
</filter-class>
</filter>
<!--  -->
<!-- Apply the Reporter filter to home page. -->
<filter-mapping>
<filter-name>Reporter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
<!-- Also apply the Reporter filter to the servlet named
"TodaysSpecial".
-->
<filter-mapping>
<filter-name>Reporter</filter-name>
<servlet-name>TodaysSpecial</servlet-name>
</filter-mapping>
<!--  -->
<!-- Give a name to the Today's Special servlet so that filters
can be applied to it.
-->
<servlet>
<servlet-name>TodaysSpecial</servlet-name>
<servlet-class>
moreservlets.TodaysSpecialServlet
</servlet-class>
</servlet>
<!--  -->
<!-- Make /TodaysSpecial invoke the servlet
named TodaysSpecial (i.e., moreservlets.TodaysSpecial).
-->
<servlet-mapping>
<servlet-name>TodaysSpecial</servlet-name>
<url-pattern>/TodaysSpecial</url-pattern>
</servlet-mapping>
<!-- Turn off invoker. Send requests to index.jsp. -->
<servlet-mapping>
<servlet-name>Redirector</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
<!--  -->
</web-app>


:http://hi.baidu.com/javatwt/blog/item/d0b5bcef3c164fefcf1b3e11.html




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论