在实际项目中,很多通用的校验或者模块,可以放在过滤器中进行实现,不用都写在 servlet 中。
1. 新建一个javaweb项目开发环境:
- IDEA
- jdk 8
- maven 3.6.3
- tomcat 9
使用 maven 的模板创建一个 webapp 项目
手动创建 java 以及 resources 目录,创建后的目录结构如下所示
在 pom.xml 文件中,引入需要用到的依赖,如下为本次用到的所有依赖
javaweb com.yuhuofei.servlet 1.0-SNAPSHOT 4.0.0 03-filter war 03-filter Maven Webapp http://www.example.com UTF-8 1.8 1.8 javax.servlet javax.servlet-api 4.0.1 javax.servlet.jsp jsp-api 2.2 jstl jstl 1.2 taglibs standard 1.1.2 mysql mysql-connector-java 5.1.49 junit junit 4.11 test 03-filter maven-clean-plugin 3.1.0 maven-resources-plugin 3.0.2 maven-compiler-plugin 3.8.0 maven-surefire-plugin 2.22.1 maven-war-plugin 3.2.2 maven-install-plugin 2.5.2 maven-deploy-plugin 2.8.2
为项目配置好 tomcat 服务器
到此,项目基本的创建就算完成了,接下来就是写处理逻辑
这里以使用过滤器统一处理乱码问题为例,演示过滤器的使用
1、新建一个 Servlet 类——TestServlet.java
package com.yuhuofei.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;
public class TestServlet 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 {
super.doGet(req, resp);
}
}
2、新建一个过滤器类——MyFilter.java
package com.yuhuofei.javaweb.filter;
import javax.servlet.*;
import java.io.IOException;
public class MyFilter implements Filter {
//初始化
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("=====MyFilter开始初始化=====");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
System.out.println("MyFilter开始执行");
//这行的作用是让请求继续往后走,如果不写,程序到此会被拦截停止!
chain.doFilter(request,response);
System.out.println("MyFilter执行完成");
}
//销毁
@Override
public void destroy() {
System.out.println("=====MyFilter销毁=====");
}
}
3、修改 web.xml
testServlet com.yuhuofei.javaweb.servlet.TestServlet testServlet /test testServlet /filter/test MyFilter com.yuhuofei.javaweb.filter.MyFilter MyFilter /filter/*
4、启动 tomcat 服务器,测试
(1)启动 tomcat 服务器后,访问 http://localhost:8080/test,会展示乱码,因为这个路径下没有做乱码处理
(2)返回 http://localhost:8080/filter/test ,会展示中文内容,如下所示,原因是在过滤器中对 /filter/ 路径下的请求,做了乱码处理
5、过滤器的初始化和销毁
过滤器会随着服务器的启动和关闭,进行初始化和销毁,如下所示



