JavaWeb-Filter
2021-02-08 03:16
标签:prot alt 图片 lock mode https org ide ppi
过滤器Filter
参考视频: https://www.bilibili.com/video/BV12J411M7Sj?p=24
Filter:过滤器,用来过滤网站的数据。
- 处理中文乱码
- 登陆验证
路径
依赖
JavaWeb
com.huangdekai 1.0-SNAPSHOT 4.0.0
0008_filter
javax.servlet
servlet-api
2.5 javax.servlet.jsp
javax.servlet.jsp-api
2.3.3 javax.servlet.jsp.jstl
jstl-api
1.2 taglibs
standard
1.1.2 mysql
mysql-connector-java
5.1.47
代码
- CharacterEncodingFilter
package com.huangdekai.JavaWeb.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* @Autord: HuangDekai
* @Date: 2020/4/25 1:34
* @Version: 1.0
* @since: jdk11
*/
public class CharacterEncodingFilter implements Filter {
// 初始化 Web服务器启动,就已经初始化了,等待过滤对象出现
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharaterEncodingFilter已经初始化了");
}
// chain:链
/*
* 1.过滤器中的所有代码,在过滤特定请求的时候都会执行
* 2.必须要让过滤器继续进行
* */
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("CharacterEncodingFilter执行前...");
filterChain.doFilter(servletRequest, servletResponse);//让请求继续走,如果不写,请求在这里就被拦截停止了
System.out.println("CharacterEncdoingFilter执行后...");
}
// 销毁 web服务器关闭,filter销毁
public void destroy() {
System.out.println("CharaterEncodingFilter已经销毁了");
}
}
CharacterEncdoingFilter是过滤器,很显然,功能就是处理中文乱码的问题。注意继承的是javax.servlet.Filter:
- ShowServlet:
package com.huangdekai.JavaWeb.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Autord: HuangDekai
* @Date: 2020/4/25 1:48
* @Version: 1.0
* @since: jdk11
*/
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);
}
}
web.xml
ShowServlet com.huangdekai.JavaWeb.servlet.ShowServlet ShowServlet /servlet/show /show CharacterEncodingFilter com.huangdekai.JavaWeb.filter.CharacterEncodingFilter CharacterEncodingFilter /servlet/*
配置好之后,启动Tomcat,可以在IDEA中发现这段:
可以修改为英文 查看是否是init的内容。这就是过滤器在web服务器的启动时就初始化的证明。
访问页面
在上面的Web.xml中设置了两个地址,都可以访问到同一个Servlet:
而过滤器设置过滤的是/servlet/地址下的所有页面(指的是servlet设置的地址):
因此分别访问/servlet/show和/show一个能经过过滤器,一个不经过过滤器:
JavaWeb-Filter
标签:prot alt 图片 lock mode https org ide ppi
原文地址:https://www.cnblogs.com/duzhuan/p/12773641.html