ajie

Java天下社区 http://www.javatx.cn 欢迎大家上来交流Java技术
posts - 4, comments - 8, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2005年12月18日

      Filter的意思是可以在Servlet实例进行实质性的处理之前,起到“过滤”的作用.

       一个Filter可以过滤一个或多个Servlet,Filter必须实现javax.Servlet.Filter接口,并且必须定义以下三个方法:init(),destory(),doFilter().

       下面的例子演示记录客户端主机信息的Filter:

程序代码:
/**
 *  该实例演示记录客户端主机信息的Filter
 *  www.javatx.cn
 */

package cn.javatx;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**
 * @author ljfan
 *
 */

public class logFilter implements Filter {
private ServletContext context;

/* (non-Javadoc)
 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
 */

public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
context = arg0.getServletContext();
}

/* (non-Javadoc)
 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
 */

public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
context.log("[" + arg0.getRemoteHost() + "] request: " +((HttpServletRequest)arg0).getRequestURI());
arg2.doFilter(arg0, arg1);
context.log("[" + arg0.getRemoteHost() + "] done");
}

/* (non-Javadoc)
 * @see javax.servlet.Filter#destroy()
 */

public void destroy() {
// TODO Auto-generated method stub
context = null;
}

}


         当前web应用的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>logFilter</filter-name>
<filter-class>cn.javatx.logFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>logFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>


最后用myeclipse插件自动部署到tomcat路径下,启动tomcat,在浏览器中输入
http://localhost:8080/Filter/  (Filter为此web应用名称)

可以在tomcat  目录的log目录下的localhost.2006-01-02.log看到以下消息:

2006-1-2  16:25:51  org.apache.catalina.core.ApplicationContext  log
信息:  [127.0.0.1]  request:  /Filter/
2006-1-2  16:25:51  org.apache.catalina.core.ApplicationContext  log
信息:  [127.0.0.1]  done

这表明logFilter已经被server调用成功.
当然在实际应用中filter还有其他用处,象登陆验证,编码转化等.

Java天下社区
http://www.javatx.cn
欢迎大家上来交流Java技术。

posted @ 2006-01-02 16:39 ajie 阅读(5033) | 评论 (0)编辑 收藏

     摘要: 用到开源软件POI,详细见以下URL: http://jakarta.apache.org/poi/index.html /** *//** * 该类演示了POI的应用 * 版权 本文版权属Java天下 * Created on 2005-7-22 */package bss...  阅读全文

posted @ 2005-12-18 00:45 ajie 阅读(1473) | 评论 (0)编辑 收藏

     摘要:   1/** *//**  2 * 该类演示了Java Mail的应用  3 * 版权 本文版权属Java天下  4 * @author ljfan  5 * @version&n...  阅读全文

posted @ 2005-12-18 00:38 ajie 阅读(2680) | 评论 (2)编辑 收藏

软引用(Soft  Reference)的主要特点是具有较强的引用功能。只有当内存不够的时候才回收这类内存,因此在内存足够的时候,他们通常不被回收。另外,这些引用对象还能保证在Java  抛出OutOfMemory异常之前,被设置为null。他可以用于实现一些常用资源的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory异常。

     下面是软引用的实现代码:
 
 1/**
 2 * 该类演示了Soft Reference的应用
 3 * 版权 本文版权属Java天下
 4 */

 5package cn.javatx;
 6
 7import java.lang.ref.SoftReference;
 8
 9/**
10 * @author ajie
11 */

12
13public class softReference {
14
15    /**
16     * @param args
17     */

18    public static void main(String[] args) {
19        // TODO Auto-generated method stub
20        A a = new A();
21        
22        //使用a
23        a.test();
24
25        //使用完了a,将它设置为soft引用类型,并且释放强引用
26        SoftReference sr = new SoftReference(a);
27        a = null;
28        
29        //下次使用
30        if (sr != null{
31            a = (A)sr.get();
32            a.test();
33        }
 else {
34            //GC由于低内存,已释放a,因此需要重新装载
35            a = new A();
36            a.test();
37            a = null;
38            sr = new SoftReference(a);
39        }

40    }

41
42}

43
44class A {
45    public void test() {
46        System.out.println("Soft Reference test");
47    }

48}

49


       软引用技术的引进使Java应用可以更好的管理内存,稳定系统,防止系统内存溢出,避免系统崩溃。因此在处理一些占用内存大而且声明周期较长,但使用并不频繁的对象时应尽量应用该技术。但事物总带有两面性的,有利也有弊,在某些时候对软引用的使用会降低应用的运行效率与性能,例如:应用软引用的对象的初始化过程较为耗时,或者对象的状态在程序的运行过程中发生了变化,都会给重新创建对象与初始化对象带来不同程度的麻烦,有些时候我们要权衡利弊择时应用。

Java天下
http://www.javatx.cn

posted @ 2005-12-18 00:29 ajie 阅读(10951) | 评论 (6)编辑 收藏