java filter是否可以获得响应状态码

发布于 2021-11-18 02:04:24 字数 143 浏览 892 评论 10

请教各位:请问在Filter里是否可以得到响应信息的状态码呢?例如200,404之类的。谢谢大家!

             

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

带上头具痛哭 2021-11-18 11:28:09

引用来自#9楼“frankiegao123”的帖子

Servlet 3.0 之前是做不到的,呵呵

复古式 2021-11-18 11:28:09

引用来自#8楼“frankiegao123”的帖子

HttpServletResponse#getStatus() 方法是 Servlet 3.0 新增加的,需要在支持 Servlet 3.0 的容器中运行,比如 Tomcat 7。

HttpStatusFilter 示例如下:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;

@WebFilter("/*")
public class HttpStatusFilter implements Filter {

    public HttpStatusFilter() {
    }

    public void init(FilterConfig filterConfig) throws ServletException {
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        HttpServletResponse resp = (HttpServletResponse) response;

        System.out.println("start: " + resp.getStatus());  // 过滤之前状态均为 200
        chain.doFilter(request, response);
        System.out.println("after: " + resp.getStatus());  // 实际响应 HTTP 状态
    }

    public void destroy() {
    }
}
回眸一笑 2021-11-18 11:28:06

HttpServletResponse#getStatus() 方法是 Servlet 3.0 新增加的,需要在支持 Servlet 3.0 的容器中运行,比如 Tomcat 7。

HttpStatusFilter 示例如下:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;

@WebFilter("/*")
public class HttpStatusFilter implements Filter {

    public HttpStatusFilter() {
    }

    public void init(FilterConfig filterConfig) throws ServletException {
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        HttpServletResponse resp = (HttpServletResponse) response;

        System.out.println("start: " + resp.getStatus());  // 过滤之前状态均为 200
        chain.doFilter(request, response);
        System.out.println("after: " + resp.getStatus());  // 实际响应 HTTP 状态
    }

    public void destroy() {
    }
}
千笙结 2021-11-18 11:28:06

Servlet 3.0 之前是做不到的,呵呵

想挽留 2021-11-18 11:27:42

引用来自#5楼“鉴客”的帖子

引用来自#4楼“yzjiang”的帖子

为什么不用request.setAttribute

勿忘初心 2021-11-18 11:23:28

引用来自#4楼“yzjiang”的帖子

为什么不用request.setAttribute

如日中天 2021-11-18 10:04:52

引用来自#4楼“yzjiang”的帖子

为什么不用request.setAttribute

累赘 2021-11-18 09:15:46

为什么不用request.setAttribute

情场扛把子 2021-11-18 08:53:34

引用来自#2楼“华宰”的帖子

获取不到哦,因为 response 本身没这样的方法。

空城仅有旧梦在 2021-11-18 08:06:21

获取不到哦,因为 response 本身没这样的方法。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文