我正在使用Spring MVC开发一个Web应用程序,我提出了一个问题。 在我的应用程序中,如果我想将属性发送到JSP文件,我会执行以下操作:
@RequestMapping("submitRestrictionPolicy")
public String submitRestrictionPolicy(HttpServletRequest req, HttpServletResponse resp) {
// Get parameters from form submit
String state = req.getParameter("checkBox");
// Set attributes to be sent to .jsp page
req.setAttribute("state", state);
return "restrictionPolicy";
}
这正常工作,我可以在JSP文件中访问属性“state”并将其反映在浏览器中。
现在我想知道为什么我们使用HttpServletRequest而不是HttpServletResponse,因为根据我的理解,我们正在发送来自浏览器的请求的响应。我们不应该使用HttpServletResponse吗?我知道答案是否定的,因为HttpServletResponse中没有“setAttribute”方法。
如果使用HttpServletRequest发送浏览器请求的响应是正确的,那么HttpServletResponse的重要性是什么?
答案 0 :(得分:1)
让我们看看事情是如何运作的......
客户端向Web服务器发送请求(HttpServletRequest)。此请求可能会从多个层(取决于您的应用程序)传递,直到不再需要(HttpServletResponse从服务器发送回客户端)。
在这些图层中,您可以修改此HttpServletRequest对象并向其添加信息(属性)。然后,当您基于HttpServletRequest生成HttpServletResponse时,您可以利用从先前层传播的额外信息(这通常在视图层中完成)。
现在关于HttpServlet
如何运作的更一般的说法可能会回答你的最后一个问题。当在Web容器(servlet运行)上发出http put / get / post / ....请求时,此请求被包装在HttpServletRequest类型的Object中(这是specification的方式)并包含来自客户的信息。创建响应时,它将包装在HttpServletResponse对象中,该对象包含Web容器的响应数据(同样基于specification)。