一个入门案例:
将会在服务器请求myServlet.do,但是中间会加上过滤器。加上后请求流程为,发送请求->过滤器处理->服务器处理并响应->过滤器处理->响应回网页
我们先创建一个servlet
import java.io.*;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.*;
public class MyServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
System.out.println("myServlet 执行了sevice方法");
resp.setContentType("text/html;charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.getWriter().print("myServlet响应数据");
}
}
配置web.xml让浏览器可以访问
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.example.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/myServlet.do</url-pattern>
</servlet-mapping>
此时浏览器里访问myServlet.do可以访问得到资源
现在开始创建一个过滤器
import jakarta.servlet.*;
import java.io.IOException;
public class MyFilter implements Filter {
//初始化方法
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
//销毁方法
@Override
public void destroy() {
Filter.super.destroy();
}
//做出过滤方法
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter doFilter 对请求做出过滤");
//处理完后需要放行请求,不然是不会到达服务器的
//将放行请求交给过滤器链继续进行过滤
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("Filter doFilter 对响应做出过滤");
//过滤器也是可以往响应里追加数据的
servletResponse.getWriter().print(" filter 追加一些数据");
}
}
继续配置web.xml,让访问资源前要经过过滤器
<filter>
<filter-name>filter</filter-name>
<filter-class>com.example.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<!--对那个资源的请求和响应进行过滤-->
<!--方式1-->
<!--<url-pattern>/myServlet.do</url-pattern>-->
<!--方式2-->
<!--<servlet-name>myServlet</servlet-name>
<!--方式3-->
<!--/表示除了jsp的资源,/*表示所有资源-->
<url-pattern>/*</url-pattern>
</filter-mapping>
运行结果:
服务器端:
浏览器端: