一、什么是过滤器(Filter)
过滤器是对Servlet容器调用Servlet的过程进行拦截过滤,从而在Servlet进行相应处理的前后实现一些特殊功能。
Filter程序是一个现实Filter接口的java类,由Servlet容器进行调用和执行。Filter程序需要在web.xml文件中进行注册和设置他所连接的资源。
二、过滤器的工作原理
当在web.xml中注册一个Filter来对某个Servlet程序进行拦截处理时,这个Filter就会成为Servlet容器与Servlet程序直接的一道关卡,该Filter可以对Servlet容器的请求和Servlet程序送回给Servlet容器响应进行拦截,可以决定是否将请求继续传递给Servlet程序,以及对请求和响应信息是否进行修改。

三、应用(使用web.xml配置方式)
@WebServlet("/oneServlet")
public class OneServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("2.OneServlet开始执行...");
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("one Servlet");
System.out.println("3.one servlet执行完毕...");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
public class OneFilter implements Filter{
/**
*构造器
*/
public OneFilter() {
System.out.println("constructor");
}
/**
* 初始化方法
*/
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("init");
String encoding = config.getInitParameter("encoding");
System.out.println("filter中配置的编码格式:"+encoding);
}
/**
* 执行过滤
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("1.OneFilter开始过滤");
//放行
chain.doFilter(request, response);
response.getWriter().write("hello");
System.out.println("4.OneFilter过滤完毕");
}
/**
* 销毁
*/
@Override
public void destroy() {
System.out.println("destroy");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>006Fliter</display-name>
<!--配置过滤器-->
<filter>
<filter-name>oneFilter</filter-name>
<filter-class>com.szy.filter.OneFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>oneFilter</filter-name>
<url-pattern>/oneServlet</url-pattern>
</filter-mapping>
</web-app>
三、应用(使用注解配置方式)
@WebFilter("/oneServlet") //拦截的Servlet
public class ThreeFilter implements Filter {
public ThreeFilter() {
}
public void init(FilterConfig fConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("ThreeFilter");
chain.doFilter(request, response);
}
public void destroy() {
}
}
四、典型案例:使用过滤器修改请求响应的编码
public class EncodingFilterFilter implements Filter {
String encoding = null;
public EncodingFilterFilter() {
}
public void init(FilterConfig fConfig) throws ServletException {
encoding = fConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//设置编码格式
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
req.setCharacterEncoding(encoding);
res.setCharacterEncoding(encoding);
chain.doFilter(req, res);
}
public void destroy() {
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>006Fliter</display-name>
<!-- 设置编码格式 -->
<!-- EncodingFilter -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.szy.filter.EncodingFilterFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
本文深入讲解了Servlet过滤器(Filter)的概念,工作原理及其在Web应用程序中的应用。通过实例演示了如何使用web.xml配置和注解配置过滤器,以及如何通过过滤器修改请求和响应的编码格式。
4万+

被折叠的 条评论
为什么被折叠?



