为什么request域对象请求转发时,打印的地址值request不相同,response地址值相同???
请求转发时,tomcat会将request和response进行封装;封装后不是应该要么地址值都不相同,要么地址值都相同吗?
tomcat底层单独对request单独进行了强制转换,为什么要这样做呢?
@WebServlet("/receptionServlet")
public class ReceptionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取数据
System.out.println("接收到客户请求,客户要吃鸡肉卷");
System.out.println("单子转发给厨师");
request.setAttribute("require", "多放肉");
//链式编程
request.getRequestDispatcher("kitchenServlet").forward(request, response);
System.out.println("ONErequest = " + request);
System.out.println("ONEresponse = " + response);
}
@WebServlet("/kitchenServlet")
public class KitchenServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("厨师拿到单子,开始做鸡肉卷");
//获取数据
String require = (String) request.getAttribute("require");
System.out.println("读取备注 : " + require);
response.setContentType("text/html;charset=utf-8"); //解码中文乱码
response.getWriter().print("鸡肉卷好了,请享用...");
System.out.println("TWOrequest = " + request);
System.out.println("TWOresponse = " + response);
}
打印结果
TWOrequest = org.apache.catalina.core.ApplicationHttpRequest@689d6aa4
TWOresponse = org.apache.catalina.connector.ResponseFacade@57d53d6a
ONErequest = org.apache.catalina.connector.RequestFacade@cc1097d
ONEresponse = org.apache.catalina.connector.ResponseFacade@57d53d6a
每次转发,都会构造一个新的 request 对象,所以不同。相同说明 response 是同一个对象