📜  Servlet-编写过滤器(1)

📅  最后修改于: 2023-12-03 15:05:11.117000             🧑  作者: Mango

Servlet-编写过滤器

过滤器(Filter)是Servlet技术中非常重要的组成部分。过滤器可以在Servlet容器中通过对请求和响应进行过滤,来增加对Web应用程序的安全性、可靠性和性能。本文将提供一个完整的例子来介绍如何编写一个过滤器。

过滤器的作用

在Web应用程序中,过滤器在请求和响应之间进行过滤和修改。过滤器的主要作用是:

  • 过滤请求:比如对某些URL请求进行拦截,只有特定的请求才能够通过。
  • 过滤响应:比如修改响应内容,重定向请求,或者添加HTTP头信息等。

过滤器还有其他一些作用,比如对请求进行编码、解码等。

过滤器的实现

本文以一个简单的例子来展示如何编写一个过滤器。代码将通过对请求进行拦截和对响应进行修改来说明过滤器的作用。

编写HelloServlet

首先,我们需要编写一个简单的Servlet来处理HTTP请求。例如,我们创建一个名为HelloServlet的Servlet,用于在页面上显示Hello, Servlet!

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/plain");
        resp.getWriter().write("Hello, Servlet!");
    }

}
编写Filter

下面,我们将创建一个过滤器来对请求和响应进行拦截和修改。该过滤器将检查请求的URL是否为/hello,如果是,则将响应的内容改为Hi, Servlet!

@WebFilter("/hello")
public class HelloFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        // 如果请求的URL是/hello
        if (request.getRequestURI().endsWith("/hello")) {
            // 修改响应的内容为Hi, Servlet!
            response.setContentType("text/plain");
            response.getWriter().write("Hi, Servlet!");
        } else {
            // 否则,继续执行过滤器链
            filterChain.doFilter(request, response);
        }
    }

    @Override
    public void destroy() {}

}

该过滤器的作用非常简单:当请求的URL为/hello时,修改响应内容;否则,继续执行过滤器链。

测试过滤器

现在,我们已经编写好了一个Servlet和一个过滤器,可以启动服务器来测试。在浏览器中打开http://localhost:8080/hello,你可以看到Hi, Servlet!的响应内容。而如果你在浏览器中打开其他URL,如http://localhost:8080/index.html,则会按正常方式返回内容。

结论

过滤器可以通过拦截和修改HTTP请求和响应来增加Web应用程序的安全性、可靠性和性能。使用过滤器时,需要设置好URL模式和顺序,以便正确地执行过滤器链。