Web内置对象主要有request、response、session、servletContext,而实际上session、servletContext都可以通过request对象来进行获取。
@RestController
@RequestMapping("/innerObject")
public class InnerObjectAction {
@RequestMapping("/get")
public Map<String, Object> getObjects(HttpServletRequest request,
HttpServletResponse response, HttpSession session) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("【request】 contextPath", request.getContextPath());
map.put("【response】 encoding", response.getCharacterEncoding());
map.put("【session】 sessionId", session.getId());
map.put("【servletContext】 servletName", request.getServletContext().getVirtualServerName());
map.put("【servletContext】 initParam", request.getServletContext().getInitParameter("message"));
return map;
}
}
在application.yml文件中设置servlet初始化参数:
server:
port: 8080
servlet:
context-parameters:
-message: hello SpringBoot !!!
启动项目,访问:http://localhost:8080/innerObject/get
发现可以正常取得所有的内置对象:
@RequestMapping("/get")
public Map<String, Object> getObjects() {
// 取得属性信息
ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
HttpServletResponse response = attributes.getResponse();
Map<String, Object> map = new LinkedHashMap<>();
map.put("【request】 contextPath", request.getContextPath());
map.put("【response】 encoding", response.getCharacterEncoding());
map.put("【session】 sessionId", request.getSession().getId());
map.put("【servletContext】 servletName", request.getServletContext().getVirtualServerName());
map.put("【servletContext】 initParam", request.getServletContext().getInitParameter("message"));
return map;
}
实际上在每次请求时都会将请求的request对象封装为RequestAttributes
保存在ThreadLocal
中,而通过RequestContextHolder
类可以取得RequestAttributes
,而RequestAttributes
是一个接口,要将其转换为ServletRequestAttributes
才可以取出request
对象。response对象同理。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/Nicholas_GUB/article/details/121061004
内容来源于网络,如有侵权,请联系作者删除!