过滤器的作用
过滤器是用来过滤网站数据的
- 处理中文乱码
- 登陆验证
- 过滤垃圾信息等
所以过滤器也需要request和response及过滤器与Servlet本质上是一样的
Filter开发步骤
1.导入所需的包
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
2.编写过滤器(实现过滤器接口,重写方法)
CharacterEncodingFilter.java
package com.hao.filter;
import javax.servlet.*;
import java.io.IOException;
public class CharacterEncodingFilter implements Filter {
@Override
//初始化 web服务器启动时,就已经初始化(随时准备过滤)
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器已经初始化");
}
@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");
//向下传递request,response
filterChain.doFilter(servletRequest,servletResponse);
}
//销毁 Web服务器关闭的时候,过滤器会销毁
@Override
public void destroy() {
System.out.println("过滤器已经销毁");
}
}
showServlet.java
package com.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 showServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("援耗");
}
}
编写映射
<servlet>
<servlet-name>showServlet</servlet-name>
<servlet-class>com.servlet.showServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>showServlet</servlet-name>
<url-pattern>/servlet/show</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>showServlet</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.hao.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!--servlet下所有请求都会经过过滤器-->
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
启动服务器时发现
过滤器已经初始化紧跟在 Connected to server 说明过滤器在服务器启动时就已经初始化了
对比观察 /servlet/show 以及/show