【问题标题】:Why HttpServletRequest is used to send a response to the browser?为什么使用 HttpServletRequest 向浏览器发送响应?
【发布时间】:2013-09-18 11:37:31
【问题描述】:

我正在使用 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文件中的属性“状态”并将其反映在浏览器中。

现在我想知道为什么我们使用 HttpServletRequest 而不是 HttpServletResponse,因为据我了解,我们是从浏览器发送请求的响应。我们不应该使用 HttpServletResponse 吗?我知道答案是否定的,因为 HttpServletResponse 中没有“setAttribute”方法。

如果使用 HttpServletRequest 为浏览器请求发送响应是正确的,那么 HttpServletResponse 的重要性是什么?

【问题讨论】:

    标签: spring jsp servlets httprequest httpresponse


    【解决方案1】:

    让我们看看事情是如何运作的......

    客户端向网络服务器发送请求(HttpServletRequest)。此请求可能会从多个层传递(取决于您的应用程序),直到不再需要(HttpServletResponse 从服务器发送回客户端)。

    在这些层中,您可以修改此 HttpServletRequest 对象并向其添加信息(属性)。然后,当您基于 HttpServletRequest 生成 HttpServletResponse 时,您可以利用从先前层传播的额外信息(这通常在视图层中完成)。

    现在,关于HttpServlets 工作原理的更一般性的内容可能会回答您的最后一个问题。当在 web 容器(servlet 运行)上发出 http put/get/post/.. 请求时,该请求被包装在 HttpServletRequest 类型的对象中(这就是 specification 的样子)并包含信息来自您的客户。创建响应时,它被包装在一个 HttpServletResponse 对象中,该对象包含 Web 容器的响应数据(同样基于 specification)。

    【讨论】:

    • 当你说:“那么当你基于 HttpServletRequest 生成 HttpServletResponse”时。这就是我的观点,我通过在 HttpServeltResquet 对象中添加属性来生成对 Web 浏览器的响应。而且,它有效!根据您的逻辑(以及我的逻辑),我应该使用 HttpServletResponse,对吗?
    • 您正在使用来自 HttpServeltResquet 的属性和参数来生成 HttpServletResponse
    • 但是 HttpServletResponse 何时生成?我没有在上面设置任何属性或参数
    • 是的,在 jsp 中有诸如 <%@page contentType="text/html" pageEncoding="UTF-8"%> 之类的行或您输出到 jsp 的任何内容,正在被框架转换为 HttpServletResponse
    • @MaVRoSCy - 这是关于该主题的唯一问题。您介意通过一些详细步骤来改进您的答案吗?这真的很有帮助。
    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多