我有一个servlet来处理某些HTTP请求和响应.我想在发送回客户端之前记录响应正文.有没有什么办法可以在HttpServletResponse从servlet 作为对象发送之前捕获响应主体?
我是servlet的新手,并阅读有关过滤器和包装器的一些文本.我可以理解过滤器,但对包装器感到困惑.在书中,作者给出了一个例子:
如果没有包装:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
String name = request.getParameter("name").trim();
try {
chain.doFilter(request, response);
PrintWriter out = response.getWriter();
if (name.length() == 0) {
out.println("Some message");
out.println("</body>");
out.println("</html>");
out.close();
}
} catch (Throwable t) {
}
}
Run Code Online (Sandbox Code Playgroud)
如果是包装:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
String name = request.getParameter("name").trim();
HttpServletResponse httpRes = (HttpServletResponse) response;
HttpServletResponseWrapper resWrapper = new HttpServletResponseWrapper(httpRes);
try {
chain.doFilter(request, response);
PrintWriter out = resWrapper.getWriter(); // …Run Code Online (Sandbox Code Playgroud) 我知道v3.0有方法getHeader()但2.3怎么样?也许有可能从蒸汽中获得?
更新:
实际上,我需要HTTP响应头RESTful应用程序.出于某种原因,我已决定在servlet过滤器中执行此操作...但没有成功...解决方案@javax.ws.rs.core.Context HttpHeaders requestHeaders.
例如,
@javax.ws.rs.GET
public String invoceRestMethod(@Context HttpHeaders requestHeaders){
MultivaluedMap<String, String> map = headers.getRequestHeaders();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
// processing header....
}
}
Run Code Online (Sandbox Code Playgroud)
也许会帮助某人.但无论如何,对于Servlet问题仍然是开放的