0
点赞
收藏
分享

微信扫一扫

java web开发(过滤器)


        过滤器,或许换成拦截器更合适一点。看到这个词,让我想到了linux kernel里面的netfilter&iptables这个工具。一个报文从进到网卡,到软件处理完,再从网卡发送出去,这中间也同样有很多次filter处理。所以,报文在被处理前,ip、port、vlan这些可能都发生了改变,同样在被网卡发出去之前,ip、port、port也同样可能又发生了好几次变化。java web中的过滤器也是同样的道理。

        那么过滤器有什么用呢?其实用处很多,比如可以用来做加密、解密运算,可以用做数据统计分析,可以添加调试日志,可以验证访问客户的合法性等等。

        今天,我们可以做一个简单的应用,统计web访问的次数。有的同学也许会说,这不是可以通过在每一个servlet class中添加计数代码也可以完成的。确实是这样的!但是,有了filter,只需要一个filter类,并且在web.xml配置一下可以更便捷地完成这个功能。

1、利用idea+maven创建一个maven-archetype-webapp工程

2、创建main/java、main/resources两个目录

3、准备SiteHitCounter.java代码

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class SiteHitCounter implements Filter{

private int hitCount;

public void init(FilterConfig config)
throws ServletException{
// 重置点击计数器
hitCount = 0;
}

public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws java.io.IOException, ServletException {

// 把计数器的值增加 1
hitCount++;

// 输出计数器
System.out.println("Total website access: "+ hitCount );

// 把请求传回到过滤器链
chain.doFilter(request,response);
}
public void destroy()
{
// 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库
}
}

        如代码所示,SiteHitCounter继承自Filter类。实现的最重要一个函数就是doFilter。doFilter函数中,除了完成hitCount自增、打印输出外,剩下的就是调用doFilter继续处理了。

4、修改pom.xml文件

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>

        添加dependency后,更新maven方便后续编译使用。

5、修改web.xml文件

<filter>
<filter-name>SiteHitCounter</filter-name>
<filter-class>SiteHitCounter</filter-class>
</filter>

<filter-mapping>
<filter-name>SiteHitCounter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

        这部分内容和之前的servlet类似,有两个部分的内容。第一,添加filter,主要将filter-name和filter-class绑定在一起。第二,将filter-name和url-pattern绑定在一起,即对那些url进行过滤处理。

6、配置tomcat

        配置tomcat,两点需要配置,一是端口,二是正确设置deployment。配置保存后,就可以启动tomcat服务器,不出意外就可以看到Hello World的打印,

java web开发(过滤器)_jvm

        循环按下F5,就可以看到之前SiteHitCounter添加的打印了,

[2022-10-03 01:49:07,425] Artifact Hello:war exploded: Artifact is being deployed, please wait...
[2022-10-03 01:49:07,604] Artifact Hello:war exploded: Artifact is deployed successfully
[2022-10-03 01:49:07,604] Artifact Hello:war exploded: Deploy took 179 milliseconds
Total website access: 1
Total website access: 2
03-Oct-2022 13:49:17.158 淇℃伅 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 鎶妛eb 搴旂敤绋嬪簭閮ㄧ讲鍒扮洰褰� [D:\software\apache-tomcat-8.5.82-windows-x86\webapps\manager]
03-Oct-2022 13:49:17.205 淇℃伅 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Web搴旂敤绋嬪簭鐩綍[D:\software\apache-tomcat-8.5.82-windows-x86\webapps\manager]鐨勯儴缃插凡鍦╗46]姣鍐呭畬鎴�
Total website access: 3
Total website access: 4
Total website access: 5
Total website access: 6
Total website access: 7
Total website access: 8
Total website access: 9
Total website access: 10
Total website access: 11
Total website access: 12
Total website access: 13
Total website access: 14
Total website access: 15
Total website access: 16

举报

相关推荐

0 条评论