1. 程式人生 > 其它 >SpringMVC中獲取HttpServletRequest

SpringMVC中獲取HttpServletRequest

方式一
使用@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);
  }
  .....
}