java基础-filter
我们先看看没有filter的时候,整个web客户端-服务端的一个流程。
![](https://img-blog.csdn.net/20160630214953361?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
接下来我们再看看引入了filter之后的Uml图。尝试分析这两者之间的差别。
![](https://img-blog.csdn.net/20160630215008935?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
filter从哪里来?
是在servlet2.3规范中加入的。
filter的生命周期?
同servlet的生命周期相同。
filter的执行过程?
![](https://img-blog.csdn.net/20160630215036409?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
看到这里有没有想起我们的数据库结构关于栈的描述,filter和栈一样,也是按照先进后出的顺序。
filter的实质(个人之言)
现阶段在我看来,filter其实是对http的请求进行过滤,所以有时候完全可以实现页面拦截的功能。它是一种声明式的服务,具有可插拔的能力。
应用
1.继承filter
- package com.bjpowernode.drp.util.filter;
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
-
-
-
-
-
- public class CharsetEncodingFilter implements Filter {
- private String encoding;
- public void destroy() {
- }
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- System.out.print("刚刚进来");
-
- request.setCharacterEncoding("GB18030");
-
- chain.doFilter(request, response);
- System.out.print("好了,结束了");
- }
-
-
-
- public void init(FilterConfig filterConfig) throws ServletException {
- this.encoding = filterConfig.getInitParameter("encoding");
- System.out.print("encoding"+encoding);
- }
- }
2.在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">
- <display-name></display-name>
-
- <filter>
- <filter-name>CharsetEncodingFilter</filter-name>
- <filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
-
- <init-param>
- <param-name>encoding</param-name>
- <param-value>GBK</param-value>
- </init-param>
- </filter>
-
- <filter-mapping>
- <filter-name>CharsetEncodingFilter</filter-name>
- <url-pattern>*.jsp</url-pattern>
- </filter-mapping>
- </web-app>
3.然后在页面加载的时候,就可以看到filter的效果了。