11、Filter(过滤器 重点)
作者:互联网
文章目录
11、Filter(过滤器 重点)
springMVC、springBoot、安全框架(Shiro,做安全认证的)里边的一些东西都是用过滤器实现的
Filter:过滤器,用来过滤网站的数据
- 处理中文乱码
- 登录验证……
Filter开发步骤:
1.导包
在pom.xml下
<dependencies>
<!--Servlet 依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<!--JSP 依赖-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<!--JSTL表达式的依赖-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard 标签库-->
<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.24</version>
</dependency>
</dependencies>
2.编写过滤器
1.导包不要错
2.实现Filter接口
重写对应的方法即可
方法
- init(FilterConfig filterConfig) ,初始化 :
- web服务器启动,就已经初始化了,随时等待过滤器对象出现!
- 他和服务器一同启动的
- doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain),
- FilterChain Chain :链
- destroy()
- 销毁 web服务器关闭的时候,过滤器会销毁
package com.kuang.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* 字符集编码过滤器
* @author <1455272942@qq.com>
* @since 2021/6/21 18:33
*
* 过滤器 总结
* 1.过滤器中的所有代码,在过滤特点请求的时候都会执行
* 2.必须要让过滤器 继续同行 :把这个请求往下转交 转交的代码
* filterChain.doFilter(servletRequest,servletResponse); 固定的死代码
*
*/
public class CharacterEncodingFilter implements Filter {
@Override
// 初始化 :web服务器启动,就已经初始化了,随时等待过滤器对象出现! 他和服务器一同启动的
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
// FilterChain Chain :链
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 过来的请求等于utf-8编码
servletRequest.setCharacterEncoding("utf-8");
// 过去的请求等于utf-8编码
servletResponse.setCharacterEncoding("utf-8");
// 上下文
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("CharacterEncodingFilter执行前");
// 让我们的请求继续走,如果不写,程序到这里就拦截停止了 如:两个过滤器
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("CharacterEncodingFilter执行前后");
}
@Override
// 销毁 web服务器关闭的时候,过滤器会销毁
public void destroy() {
System.out.println("CharacterEncodingFilter销毁");
}
}
3.在web.xml中配置 servlet 和 filter
<servlet>
<servlet-name>ShowServlet</servlet-name>
<servlet-class>com.kuang.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>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!--只要是 / servlet下的任何请求,都会经过这个过滤器-->
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
4.展示Servlet
package com.kuang.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 展示Servlet
* @author <1455272942@qq.com>
* @since 2021/6/21 18:35
*/
public class ShowServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//以前的处理方式
// resp.setCharacterEncoding("utf-8");
// 乱码
resp.getWriter().write("你好,世界");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
结论:
当路径是 localhost:8080/servlet/show的时候 显示 你好,世界 过滤器启动了
当路径是localhost:8080/show的时候,显示 ??? 乱码 过滤器未启动
过滤器 总结
-
- 过滤器中的所有代码,在过滤特点请求的时候都会执行
-
- 必须要让过滤器 继续同行 :把这个请求往下转交 转交的代码
- filterChain.doFilter(servletRequest,servletResponse); // 固定的死代码
标签:11,Filter,servletResponse,过滤器,import,servlet,javax 来源: https://blog.csdn.net/weixin_52093131/article/details/121864660