Servlet中如何获取response的statusCode

HttpURLConnection.getResponseCode()可以获取,但需要new一个URL对象并重新发送请求,有性能损失。有没其他的获取statusCode的方法。
我在Oracle官网论坛上看见别人的讨论:可以通过apache的工具类org.apache.catalina.valves.RequestDumperValve来获取,但自己未找到其源码。另外也有人说对Reponse对象封装来跟踪statuCode,说的比较模糊,实现不便。
各位大牛们有什么好的办法?若实在要用HttpURLConnection.getResponseCode()那有没办法避免请求被过滤器拦截(我想是不可能地)。先说声谢谢! :cry: 全部分奉上!

网上搜索的,你试试:
1.先实现一个对Response的包装器:
[code="java"]
public class StatusExposingServletResponse extends HttpServletResponseWrapper {

private int httpStatus;

public StatusExposingServletResponse(HttpServletResponse response) {
    super(response);
}

@Override
public void sendError(int sc) throws IOException {
    httpStatus = sc;
    super.sendError(sc);
}

@Override
public void sendError(int sc, String msg) throws IOException {
    httpStatus = sc;
    super.sendError(sc, msg);
}


@Override
public void setStatus(int sc) {
    httpStatus = sc;
    super.setStatus(sc);
}

public int getStatus() {
    return httpStatus;
}

}
[/code]
2.然后实现一个Filter来替换原始的HttpServletResponse,这样你就可以在Filter里面取到statusCode了
[code="java"]
public class StatusReportingFilter implements Filter {

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    StatusExposingServletResponse response = new StatusExposingServletResponse((HttpServletResponse)res);
    chain.doFilter(req, response);
    int status = response.getStatus();
    // report
}

public void init(FilterConfig config) throws ServletException {
    //empty
}

public void destroy() {
    // empty
}

}
[/code]

你是怎么提交请求的?
用的是JAVA的URL还是其他开源工具访问URL

Servlet获取谁传来的reponse的StatusCode ??

两个专门的设置方法:
1,public void sendError(int code, String message)
sendError方法发送一个状态代码(通常是404)沿一个短消息自动内部的格式化HTML文档,发送到客户端。
2,public void sendRedirect(String url)
sendRedirect方法生成一个302响应沿一个Location头给予了新的文档的URL。

因为状态行中的http servion由server指定,而message直接与status code相关,所以要做的事情就是指定status code。通过HttpServletResponse.setStatus设定status code。如果server还返回了documents,一定要先设置status code,再call PrintWriter来返回doc。
理论上来说,应该按照status codes,http headers,docs的顺序call相关的方法产生相应的东东。但是buffer的概念所以,产生的顺序可以变化。因为,servlet可buffer http headers(用setHeader),所以http headers可以在任何顺序产生,servlet buffer它,然后一次性send,其他则不行。
Servlet2.1里PrintWriter不能buffer,所以当开始使用PrintWriter来output时,就不能再设置header了。Servlet2.2中PrintWriter的输出允许buffer。

StatusCode 似乎 Servelt API中,无论是 Filter Wrapper Reponse,都没有提供 get的方法。