过滤器Filter
对一些数据在请求前或者响应后进行处理
实现Filter接口(servlet包下的)
例子与配置
package com.szz.filter;
import javax.servlet.*;
import java.io.IOException;
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//过滤器初始化,服务器启动就会自动执行
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//所有过滤器相关代码都在这里
/*
* 处理乱码问题
* */
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html;charset=UTF-8");
//以下这句必写,让过滤器执行下去(因为过滤器可能有多个),不写的话,程序到这里就会被拦截无法进行下去
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
//过滤器销毁,服务器关闭就自动销毁
}
}
在web.xml文件下配置过滤器
<!-- 配置过滤器-->
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.szz.filter.TestFilter</filter-class>
</filter>
<!-- 设置/filter路径下的所有路由都使用该过滤器-->
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/filter/*</url-pattern>
</filter-mapping>
测试结果
servlet类
package com.szz.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//用来测试过滤器
public class TestFilter extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// resp.setCharacterEncoding("UTF-8");
//上面这句不设置的话可能出现乱码,通过过滤器来解决
resp.getWriter().print("天天傻兮兮");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
配置servlet
<servlet>
<servlet-name>TestFilter</servlet-name>
<servlet-class>com.szz.servlet.TestFilter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestFilter</servlet-name>
<url-pattern>/filter/test</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TestFilter</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
由于过滤器设置的过滤路径是
/filter/*
,所以此时访问/test
会出现乱码,访问/filter/test
内容正常