在springmvc中使用requestContextListener獲取全部的request對象


RequestContextListener實現了 ServletRequestListener ,在其覆蓋的requestInitialized(ServletRequestEvent requestEvent)方法中,將request最終設置到了RequestContextHolder中.

public class RequestContextListener implements ServletRequestListener {

    private static final String REQUEST_ATTRIBUTES_ATTRIBUTE =
            RequestContextListener.class.getName() + ".REQUEST_ATTRIBUTES";


    @Override
    public void requestInitialized(ServletRequestEvent requestEvent) {
        if (!(requestEvent.getServletRequest() instanceof HttpServletRequest)) {
            throw new IllegalArgumentException(
                    "Request is not an HttpServletRequest: " + requestEvent.getServletRequest());
        }
        HttpServletRequest request = (HttpServletRequest) requestEvent.getServletRequest();//從事件對象中獲取request對象
        ServletRequestAttributes attributes = new ServletRequestAttributes(request);//將request設置到servletRequestAttributes中
        request.setAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE, attributes);//反過來將servletRequestAttributes設置到request中
        LocaleContextHolder.setLocale(request.getLocale());
        RequestContextHolder.setRequestAttributes(attributes);//再將servletRequestAttributes設置到requestContextHolder中
    }

代碼中獲取該request的步驟:

HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.getRequestAttributes()))
                .getRequest();// 返回了RequestAttributes接口,將其強轉為ServletRequestAttributes實現類

使用上述方法前,需要先配置RequestContextListener監聽器:

<listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM