1、过滤器作用(过滤网站之间的数据)
- 解决中文乱码(数据从Servlet、Html、JSP、等资源到web服务器时过滤:response)
- 登陆验证
- 过滤一些垃圾请求(数据从web服务器到Servlet、Html、JSP、等资源时过滤:request)
- 。。。。
2、过滤器开发步骤
A、创建maven项目,导入一些会用到的jar包
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> </dependencies>B、建立Servlet、JSP等
public class ShowServlet 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); } }C、建立过滤器Filter
public class CharacterEncodingFilter implements Filter { //初始化 public void init(FilterConfig filterConfig) throws ServletException { System.out.println("已经初始化"); } 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");//解决中文乱码问题 System.out.println("执行前"); filterChain.doFilter(servletRequest,servletResponse);//将request、response转发给下一站,很多时候过滤器有好几层,没有这个数据就断了 System.out.println("执行后"); } //销毁 public void destroy() { System.out.println("已经销毁"); } }D、在web.xml中注册
<servlet> <servlet-name>show</servlet-name> <servlet-class>com.xiaocong.servlet.ShowServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>show</servlet-name> <url-pattern>/show</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>show</servlet-name> <url-pattern>/servlet/show</url-pattern> </servlet-mapping>//有两个映射 <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>com.xiaocong.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/servlet/*</url-pattern>//servlet/show会被过滤,而/show则不会被过滤,代表乱码没有解决 </filter-mapping>