-
Servlet中如何获取response的statusCode30
HttpURLConnection.getResponseCode()可以获取,但需要new一个URL对象并重新发送请求,有性能损失。有没其他的获取statusCode的方法。
我在Oracle官网论坛上看见别人的讨论:可以通过apache的工具类org.apache.catalina.valves.RequestDumperValve来获取,但自己未找到其源码。另外也有人说对Reponse对象封装来跟踪statuCode,说的比较模糊,实现不便。
各位大牛们有什么好的办法?若实在要用HttpURLConnection.getResponseCode()那有没办法避免请求被过滤器拦截(我想是不可能地)。先说声谢谢! 全部分奉上!
问题补充:xiaolongfeixiang 写道
Servlet获取谁传来的reponse的StatusCode ??
情况是这样的,一个Servlet主入口负责处理分发过来的HttpServletRequest请求和HttpServletRsponse响应(在配置文件中定义好的),在HttpServletResponse.setStatusCode()和设置响应报文后,在跳出该方法。我想获取该方法执行完后再来获取Response的statusCode,这是Response只是一个HttpServeltResponse接口。
问题补充:lzj0470 写道你是怎么提交请求的?
用的是JAVA的URL还是其他开源工具访问URL
Java的URL
问题补充:myali88 写道网上搜索的,你试试:
1.先实现一个对Response的包装器: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; } }
2.然后实现一个Filter来替换原始的HttpServletResponse,这样你就可以在Filter里面取到statusCode了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 } }
一语解千愁!2010年5月06日 23:49
5个答案 按时间排序 按投票排序
-
采纳的答案
网上搜索的,你试试:
1.先实现一个对Response的包装器: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; } }
2.然后实现一个Filter来替换原始的HttpServletResponse,这样你就可以在Filter里面取到statusCode了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 } }
2010年5月07日 15:21
-
StatusCode 似乎 Servelt API中,无论是 Filter Wrapper Reponse,都没有提供 get的方法。
2010年5月07日 10:22
-
两个专门的设置方法:
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。2010年5月07日 09:11
相关推荐
jsp本质上是servlet,但是为了更加符合mvc的框架,将页面显示和逻辑控制分离,jsp页面只负责页面,也就是mvc中的V(view),而servlet负责mvc中的C(control)。
本资源通过几个Servlet实例,实现在Servlet中获取Servlet自身信息、服务器端信息和客户端信息
通过地址解析一张图说明浏览器和Tomcat服务器之间的通信关系。相关技术点有servlet、request、response、(XML小配置)等等。
doFilter(ServletRequest, ServletResponse, FilterChain) - Method in interface javax.servlet.Filter The doFilter method of the Filter is called by the container each time a request/response pair is ...
http详解及Servlet中的request、response
建立一个html网页让用户输入姓名、爱好等信息,然后传给servlet,最终展示出来。
servlet获取json的小例子
Servlet + Tomcat 中文乱码的解决方法,浏览器把Unicode字符转换为GBK字符,这样页面的内容和浏览器的显示模式都设成了GBK,就不会乱码了
在servlet filter 中获取response的信息,实现统一处理servlet响应信息
Servlet中对获取网页表单数据自动给JavaBean赋值的BeanUtil工具类 Servlet中对获取网页表单数据自动给JavaBean赋值的BeanUtil工具类
包含了servlet获取url的各种参数,可以得到url里面任何信息
前端核心利器,欢迎下载,servlet一通百通,基础中的基础,什么时候看都不晚
servlet中如何对数据库中数据进行md5 加密
java后台根据随机数生成验证码,js调用,点击可以换验证码。测试效果:完全正常使用,Servlet能获取生成的验证码和用户输入的验证码。
本工程旨在演示如何将Extjs 中TextArea与KindEditor绑定并且如何使用Servlet获取到该文本编辑域的值。 本工程编码方式:UTF-8; 说明:本工程中的KindEditor是“轻量级”的——去掉了上传图片的功能。
Servlet中文API文档 Servlet中文API文档Servlet中文API文档
介绍了在Servlet直接获取Spring框架中的Bean.docx
servlet中文帮助文档 servlet中文帮助文档 servlet中文帮助文档
关于java中使用servlet中解决乱码!
Servlet中如何捕获Session事件