疑点:使用sendRedirect跳转页面之后,request对象和response对象的hashcode没改变,它们的类也没有重写过hashCode方法,我怀疑是同一对象,但设置的参数取不到,为null,堆栈上发现每次访问request和response对象是new的,明显不是同一对象,但这就不知道为什么hashCode能相等。
测试代码:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setHeader("Cache-Control","no-store,no-cache");
resp.setHeader("Expires","0");
resp.setHeader("Pragma","no-cache");
req.setAttribute("param","test");
resp.sendRedirect("/MyServlet/HTML/Test.jsp");
System.out.println(req.hashCode());
System.out.println(resp.hashCode());
}
jsp:
<%
System.out.println(request.getParameter("param"));
System.out.println(request.hashCode());
System.out.println(response.hashCode());
%>
输出:
堆栈上追踪发现创建request对象和response对象的方法,在AbstractProcessor类里面
public AbstractProcessor(Adapter adapter) {
this(adapter, new Request(), new Response());
}
跪求大佬们给个解释