如何理解request作用域

  1. request
    request是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。

上边这段文字是从百度下取下来的对request作用域解释;
我对这个理解是,数据封装到request后,前端拿到对应的数据后,这个request作用域中的数据就会失效;

存入request域中:

@Controller
@RequestMapping("/add")
public String add(ModelMap modelMap){
    modelMap.put("key","你好");
    return "add";
}

前端拿到数据:

<div>
    <input th:text="${key}">thymeleaf拿到数据</input>
</div>

request作用域的范围就结束了;

还是这个前端做请求,那么应该不会把之前的request域中的数据带给后台,但是后台收到了????

阅读 3.5k
2 个回答

要了解这个问题的本质,我想我们应该需要了解Java web的体系。

在Java web中有两个角色:一个是Servlet(一种规范、接口),另一个则是Servlet容器(比如tomcat)。

先说Servlet,在java web实际上对应HttpServlet(Servlet的子类)。里面有以下几种方法:

  • doGet(HttpServletRequest,HttpServletResponse)
  • doPost(HttpServletRequest,HttpServletResponse)
  • ...

你题目中提到的request就是HttpServletRequest,他是由Servlet容器创建并传递到Servlet中的。而HttpServletResponse才是返回给浏览器的数据,可以是HTML格式,也可以是JSON格式。

一个Servlet拦截特定的url(http请求路径), 然后再根据你请求方法(GET 或 POST)调用doGetdoPost方法。

再来看你所用的Spring MVC框架,它就是建立在Servlet上的,它的一个组件DispatcherServlet(HttpServlet子类)拦截了你项目的所有请求,然后交由Spring MVC的Controller处理。

了解了Servlet,我们再看请求HttpServletRequest是怎样创建的。

Servlet是由Servlet容器加载并创建的.

在你启动Spring MVC项目后,DispatcherServlet也被加载到Servlet容器中。

当浏览器发送一个HTTP请求,类似以下的数据。

GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

Servlet容器收到请求,首先会把以上HTTP文本信息解析并生成HttpServletReuest对象,同时构建HttpServletResponse对象供Servlet设置响应信息。然后交于URL匹配的Servlet执行业务逻辑。

当浏览器收到响应后,也就意味着请求结束,HttpServletReuestHttpServletResponse对象同步被销毁。

以上,希望可以帮助到你。

request是请求,不是响应。正确的说法是“数据封装到response后”
http是无状态的,所以每次请求request都是不一样的。当前只在当前请求中有效啊。
而session本质上是文件存储,所以是有状态的。只要第二次请求带上sessionId,都算一次会话。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题