45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 电脑教程 > 阅读资讯:开发Servlet2.3 filter的步骤

开发Servlet2.3 filter的步骤

2016-08-30 04:38:13 来源:www.45fan.com 【

开发Servlet2.3 filter的步骤

简单 Servlet2.3 filter 开发
作者:润名

一:简介

新的 Java Servlet 2.3 规范有不少最激动人心的功能,其中之一便是 filter (过滤器)。filter可以改变一个请求(request)或者是修改响应(response)。filter不是一个servlet,它只是一个servlet接受到请求前的预处理器。就是说,用户发送一个请求给servlet时,在servlet处理之前,这个filter首先执行,然后才是servlet的执行。

二:作用

filter可以用在下面几个方面

1:访问特定资源(Web 页、JSP 页、servlet)时的身份

2:访问资源的记录

3:访问资源的转换

三:编写filter

一个filter 必须实现javax.servlet.Filter 接口,即实现下面的三个方法:


1: doFilter(ServletRequest, ServletResponse, FilterChain):这是一个完成过滤行为的方法。这同样是上游过滤器调用的方法。引入的 FilterChain 对象提供了后续过滤器所要调用的信息。


2: init(FilterConfig):这是一个容器所调用的初始化方法。它保证了在第一次 doFilter() 调用前由容器调用。您能获取在 web.xml 文件中指定的初始化参数。


3: destroy():容器在破坏过滤器实例前,doFilter()中的所有活动都被该实例终止后,调用该方法。

四:示例

功能:限制客户端 IP 的访问

代码如下:

package com.Servlet.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.Filter;

public class myfilter implements Filter
{
private FilterConfig filterConfig = null;

public void init(FilterConfig filterConfig)
{
this.filterConfig = filterConfig;
}

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException
{
try
{
res.setContentType("text/html;charset=GBK");
PrintWriter out = res.getWriter();
String remoteAddr = ((HttpServletRequest) req).getRemoteAddr();

if ((remoteAddr.indexOf("127.0.0.1") != -1) || (remoteAddr.indexOf("localhost") != -1)) { //这里做判断

out.println("<html><head></head><body>");
out.println("<h1>哈哈,IP 127.0.0.1 和 IP localhost 不能访问本网站~~</h1>");
out.println("</body></html>");
out.close();
return;
}
else
{
out.println("<html><head></head><body>");
out.println("<h1>恭喜,你已经成功访问本网站了~~</h1>");
out.println("</body></html>");
out.close();
}

}
catch (Exception e)
{
e.printStackTrace();
}
}

public void destroy()
{
}
}


实现思路:通过ServletRequest类的getRemoteAddr()方法得到访问这个应用的客户端ip,然后对这个ip作一些处理,如果不符合条件,可以限制访问。这样可以很好的保护应用。

五:配置

以 Weblogic 为例:每个使用filter的应用的web.xml类似下面


<?xml version="1.0" ?>
<!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>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

// 下面是过滤器的配置

<filter>
<filter-name>MyFilter</filter-name> //这里是Filter的名字,随便你怎么起
<filter-class>com.Servlet.filter.myfilter</filter-class> //Filter的类名,注意包含package
</filter>

<filter-mapping>
<filter-name>MyFilter</filter-name>//与上面的保持一致
<url-pattern>/*</url-pattern> //对所有资源应用此filter
</filter-mapping>
</web-app>
 

本文地址:http://www.45fan.com/dnjc/69558.html
Tags: 开发 filter Servlet2.3
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部