spring - 为什么使用 HttpServletRequest 向浏览器发送响应?

标签 spring jsp servlets httprequest httpresponse

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

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

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

最佳答案

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

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

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

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

关于spring - 为什么使用 HttpServletRequest 向浏览器发送响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18871204/

相关文章:

java - 如何从spring Controller 接收json响应到jsp页面

java - jqGrid 未填充来自 Java Servlet 的 JSON 数据

java - 如何使用 webflux 处理 Spring Boot 2 中的 HTTP OPTIONS 请求?

string - 如何在 JSTL/EL 中连接和清理字符串?

java - FlatFileParseException 解析错误 - Spring Batch

javascript - 有没有办法确定用户在网页中查看了哪些 div,并在他们重新提交页面后返回到同一个 div?

javascript - 无法检索在 servlet 中设置的值

java - 项目中的第二个 servlet 不工作

java.lang.NoSuchMethodException : com. sun.proxy .....关于struts2 Action

java - Docker Compose + Spring Boot + Postgres 连接,导致报错