使用内置对象

SpringBoot源码

SpringBoot中控制器的形式和SpringMVC中是一样的,因此在程序中使用JSP的内置对象也可以按照与SpringMVC同样的方式进行。

# 一、方法获取内置对象

@GetMapping("/object")
public Object object(HttpServletRequest request, HttpServletResponse response) {
    Map<String, String> map = new HashMap<>();
    map.put("客户端IP地址", request.getRemoteAddr());
    map.put("客户端响应编码", request.getCharacterEncoding());
    map.put("SessionID", request.getSession().getId());
    map.put("项目真实路径", request.getServletContext().getRealPath("/"));
    return map;
}
1
2
3
4
5
6
7
8
9

此时采用了与SpringMVC同样的方式来获取内置对象,并且将所有的信息保存在Map集合中,最后以Restful形式返回获取的信息(将Map集合自动变为JSON数据)。

访问http://localhost:8080/object,返回如下结果

{
    "客户端IP地址": "127.0.0.1",
    "SessionID": "node01d2647f0gxpak1t9m2tw8bva8p0",
    "项目真实路径": "C:\\Users\\xxl\\AppData\\Local\\Temp\\jetty-docbase.80.13183635351441868963",
    "客户端响应编码": "UTF-8"
}
1
2
3
4
5
6

# 二、ServletRequestAttributes获取内置对象

除了在控制器的方法上使用参数来接收内置对象外,也可以利用ServletRequestAttributes形式来获取内置对象。

@GetMapping("/object2")
public Object object2() {
    // 获取 HttpServletRequest 内置对象
    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    // 获取 HttpServletResponse 内置对象
    HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
    Map<String, String> map = new HashMap<>();
    map.put("客户端IP地址", request.getRemoteAddr());
    map.put("客户端响应编码", request.getCharacterEncoding());
    map.put("SessionID", request.getSession().getId());
    map.put("项目真实路径", request.getServletContext().getRealPath("/"));
    return map;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

本程序实现了与上一程序完全相同的处理效果,唯一的区别是,控制器的方法不再需要明确地接收内置对象的参数。

最近修改于: 2024/12/31 00:27:04
和宇宙温柔的关联
房东的猫