📅  最后修改于: 2023-12-03 15:05:11.117000             🧑  作者: Mango
过滤器(Filter)是Servlet技术中非常重要的组成部分。过滤器可以在Servlet容器中通过对请求和响应进行过滤,来增加对Web应用程序的安全性、可靠性和性能。本文将提供一个完整的例子来介绍如何编写一个过滤器。
在Web应用程序中,过滤器在请求和响应之间进行过滤和修改。过滤器的主要作用是:
过滤器还有其他一些作用,比如对请求进行编码、解码等。
本文以一个简单的例子来展示如何编写一个过滤器。代码将通过对请求进行拦截和对响应进行修改来说明过滤器的作用。
首先,我们需要编写一个简单的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!");
}
}
下面,我们将创建一个过滤器来对请求和响应进行拦截和修改。该过滤器将检查请求的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模式和顺序,以便正确地执行过滤器链。