HttpServlet中的request

Asdcer 2012-02-13 05:06:22
继承HttpServlet,请求url后doGet和doPost中的HttpServletRequest和HttpServletResponse请求时不改变,都成了单例的request和response了,请问什么原因?
...全文
278 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzm1991520 2012-02-14
  • 打赏
  • 举报
回复
请用另一台机器测试,就会不同了
陈字文 2012-02-14
  • 打赏
  • 举报
回复
参见 Servlet的生命周期
结贴是美德 2012-02-14
  • 打赏
  • 举报
回复
哇塞 还有这问题 缓存无处不在啊
Asdcer 2012-02-14
  • 打赏
  • 举报
回复
怎么会有这种问题呢?好像也没法配置缓冲池
MiceRice 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 asdcer 的回复:]
写一个最简单的servlet
[/Quote]

看来想当然了,估计Tomcat为了节省资源开销,对RequestFacade用了池化,因为RequestFacade本身并不直接存储request信息,池化可以减少内存开销,为了初步验证想法,我写了个JSP:


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
response.setHeader("Cache-Control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);

System.out.println("=========");
System.out.println(request);
System.out.println(response);
%>

经过疯狂的F5刷新后,发现有以下输出结果:
=========
org.apache.catalina.connector.RequestFacade@1a034d
org.apache.catalina.connector.ResponseFacade@1cee792
=========
org.apache.catalina.connector.RequestFacade@d337d3
org.apache.catalina.connector.ResponseFacade@f63055
=========
org.apache.catalina.connector.RequestFacade@1a034d
org.apache.catalina.connector.ResponseFacade@1cee792
=========
org.apache.catalina.connector.RequestFacade@d337d3
org.apache.catalina.connector.ResponseFacade@f63055
=========
org.apache.catalina.connector.RequestFacade@1a034d
org.apache.catalina.connector.ResponseFacade@1cee792
=========
org.apache.catalina.connector.RequestFacade@d337d3
org.apache.catalina.connector.ResponseFacade@f63055

嗯,两组对象被重复使用,确实应该跟池化有些关系,如果要再具体,就得看看源代码了。
muanping85 2012-02-13
  • 打赏
  • 举报
回复
request表示的是一次会话`` 你要关闭浏览器 或者 tomcat才表示 关闭这次会话


半个鼠标 2012-02-13
  • 打赏
  • 举报
回复
你这里的request是以参数传进去的,不可能是单例的。你试试把url地址换换,或者在后面加个随机数试试,看看request还是不是同一个。
synized 2012-02-13
  • 打赏
  • 举报
回复
表示还是不懂楼主的意思
Asdcer 2012-02-13
  • 打赏
  • 举报
回复
写一个最简单的servlet

public class TestServlet2 extends HttpServlet {
private static final long serialVersionUID = -2530258452755039681L;

public TestServlet2() {
super();
}

public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("-----------------------------");
System.out.println(request);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}

public void init() throws ServletException {
System.out.println("-------------- init ----------------");
}
}

三次url请求打印:
-------------- init ----------------
-----------------------------
org.apache.catalina.connector.RequestFacade@c0fc8e
-----------------------------
org.apache.catalina.connector.RequestFacade@c0fc8e
-----------------------------
org.apache.catalina.connector.RequestFacade@c0fc8e
MiceRice 2012-02-13
  • 打赏
  • 举报
回复
只能是自己代码问题,Tomcat不会有这种问题的。
五哥 2012-02-13
  • 打赏
  • 举报
回复
是不是在一个IE中,多个选项页 ? 打开两个IE试试 ?
Asdcer 2012-02-13
  • 打赏
  • 举报
回复
多次在浏览器敲入url地址,在servlet中打印request和response。
第一次:--1---org.apache.catalina.connector.RequestFacade@104bce3
第二次:--1---org.apache.catalina.connector.RequestFacade@104bce3
第三次:--1---org.apache.catalina.connector.RequestFacade@104bce3
synized 2012-02-13
  • 打赏
  • 举报
回复
request和response都是局部变量 楼主说清楚点
Asdcer 2012-02-13
  • 打赏
  • 举报
回复
人呢?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧