關於“javax.servlet.include.request_uri”屬性值


在springMVC的DispatcherServlet類的doService方法中有如下代碼:     

if (WebUtils.isIncludeRequest(request)) {
			attributesSnapshot = new HashMap<String, Object>();
			Enumeration<?> attrNames = request.getAttributeNames();
			while (attrNames.hasMoreElements()) {
				String attrName = (String) attrNames.nextElement();
				if (this.cleanupAfterInclude || attrName.startsWith("org.springframework.web.servlet")) {
					attributesSnapshot.put(attrName, request.getAttribute(attrName));
				}
			}
		}

其中WebUtils.isIncludeRequest(request)這段代碼實現如下:

public static boolean isIncludeRequest(ServletRequest request) {
		return (request.getAttribute(INCLUDE_REQUEST_URI_ATTRIBUTE) != null);
	}
INCLUDE_REQUEST_URI_ATTRIBUTE常量值就是標題上的“javax.servlet.include.request_uri” ,isIncludeRequest(request)方法究竟是什么作用呢,要想明白這個問題,我們可以借助一條JSP的指令來理解:<jsp:incluede page="xxx.jsp"/> ,這條指令是指在一個頁面中嵌套了另一個頁面,那么我們知道JSP在運行期間是會被編譯成相應的Servlet類來運行的,所以在Servlet中也會有類似的功能和調用語法,這就是RequestDispatch.include()方法。
那么在一個被別的servlet使用RequestDispatcher的include方法調用過的servlet中,如果它想知道那個調用它的servlet的上下文信息該怎么辦呢,那就可以通過request中的attribute中的如下屬性獲取:
  • javax.servlet.include.request_uri
  • javax.servlet.include.context_path
  • javax.servlet.include.servlet_path
  • javax.servlet.include.path_info
  • javax.servlet.include.query_string
注RequestDispatch是通過ServletRequest.getRequestDispatcher("xxx.do")或ServletContext.getRequestDispatcher("/xxx.do")產生的,其中ServletRequest.getRequestDispatcher產生的是相對於根目錄的,ServletRequest產生的是相對於當前請求路徑的。RequestDispatcher接口的include或forward方法可以被調用。


免責聲明!

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



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