SpringMVC中獲取HttpServletRequest
阿新 • • 發佈:2022-03-18
方式一
使用@Autowired或者寫在Controller的處理方法中,Spring容器會幫忙注入
@Controller public class HelloController { @Autowired private HttpServletRequest request; //$Proxy36@5861 @GetMapping("index") public String index(HttpServletRequest request1) { // RequestFacade@5861 Map<String, String[]> parameterMap = request.getParameterMap(); return "index"; } }
方式二
HttpServletRequest request2 =
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); // RequestFacade@5861
方式三
1、使用ThreadLocal來存放當前執行緒的HttpServletRequest
public class UserContext { /** * Servlet容器為每個Http請求分配一個工作執行緒,把每個使用者的請求儲存到自己的執行緒中 */ private static ThreadLocal<HttpServletRequest> tl = new ThreadLocal<>(); public static void set(HttpServletRequest request) { tl.set(request); } public static HttpServletRequest get() { return tl.get(); } }
2、配置攔截器,將使用者的請求儲存到ThreadLocal中
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 請求儲存請求到當前執行緒中
UserContext.set(request);
}
.....
}