什么是过滤器Filter?
1 Filter过滤器是JavaWeb三大组件之一。(servlet程序,Linstener监听器,Filter过滤器)
2 Filter使Java EE的规范,也就是接口。
3 作用是请求拦截,过滤响应 例如处理中文乱码,屏蔽非法词汇…
Filter过滤器的使用步骤:
1,编写一个类实现Filter接口。
2,实现过滤方法DoFilter()。
3.在web.xml中配置过滤器拦截路径。
举个栗子:过滤器处理中文乱码
新建一个空的web工程,编写一个FilterDemo类实现Filter接口。重写init(),doFilter(),destroy()三个方法。
package com.tt.filter;
import javax.servlet.*;
import java.io.IOException;
public class FilterDemo implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}
注意: Filter导包一定是javax下的servlet包。
新建一个servletDemo类,该servlet用于输出一串乱码。
package com.tt.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 ServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("晚安,世界!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
由于没有经过编码转换,输出的是一串乱码。
在FilterDemo类中的DoFilter()方法中处理乱码:
接下来在web.xml中配置编写的过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>servletDemo</servlet-name>
<servlet-class>com.tt.servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletDemo</servlet-name>
<url-pattern>/servlet/s1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servletDemo</servlet-name>
<url-pattern>/s1</url-pattern>
</servlet-mapping>
<filter>
<filter-name>filterDemo</filter-name>
<filter-class>com.tt.filter.FilterDemo</filter-class>
</filter>
<filter-mapping>
<filter-name>filterDemo</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
</web-app>
上面的代码表示任何servlet路径下的请求,都会经过过滤器。在浏览器网址网址输入http://localhost:8080/servlet/s1。乱码不存在了,说明servlet经过了编写的过滤器。
在浏览器网址网址输入http://localhost:8080/s1。乱码依旧存在,说明servlet没有经过编写的过滤器。