request.getContextPath獲取絕對路徑

項目需求:全部jsp頁必須經過Action轉發,不能直接在地址欄連接jsp或<a href="aaa.jsp"></a>html

 

個人應用以下:java

1.LoginFilterweb

Java代碼   收藏代碼
  1. public class LoginFilter implements Filter {  
  2.   
  3.     public void doFilter(ServletRequest request, ServletResponse response,  
  4.             FilterChain chain) throws IOException, ServletException {  
  5.           
  6.         HttpServletRequest hRequest = (HttpServletRequest)request;  
  7.         HttpServletResponse hResponse = (HttpServletResponse)response;  
  8.           
  9.         String uri = hRequest.getRequestURI();  
  10.         System.out.println("uri======"+uri);  
  11.           
  12.         TBussinessInfo info =  (TBussinessInfo) hRequest.getSession().getAttribute("user");  
  13.           
  14.         if( "/b2cPlatform/jsp/phone/login/login.jsp".equals(uri) || "/b2cPlatform/".equals(uri)   
  15.                 || "/b2cPlatform/jsp/phone/login/trunToLogin.jsp".equals(uri) )  
  16.         {  
  17.             chain.doFilter(request, response);  
  18.         }  
  19.         else  
  20.         {  
  21.             hResponse.sendRedirect(hRequest.getContextPath());//不容許直接訪問jsp頁,除非login.jsp等頁  
  22.         }  
  23.     }  
  24.       
  25.     public void destroy() {}  
  26.   
  27.     public void init(FilterConfig arg0) throws ServletException {}  
  28. }  

 2.web.xml瀏覽器

Xml代碼   收藏代碼
  1. <!-- 登陸Filter -->  
  2. <filter>  
  3.     <filter-name>LoginFilter</filter-name>  
  4.     <filter-class>com.hanpeng.b2c.phone.priv.LoginFilter</filter-class>  
  5. </filter>  
  6. <filter-mapping>  
  7.     <filter-name>LoginFilter</filter-name>  
  8.     <url-pattern>*.jsp</url-pattern>  
  9. </filter-mapping>  

 

2、網上其餘資料服務器

 

<%=request.getContextPath()%>是解決相對路徑的問題,可返回站點的根路徑。

<a href="<%=request.getContextPath()%>/XXX.jsp"> //這樣得到的是絕對路徑app

<a href="XXX.jsp"> //這樣得到的是相對路徑jsp

<a href="<%=request.getContextPath()%>/XXXX.jsp"> 可以更有效的防治鏈接的失效。url

request.getContextPath()獲得的是項目的名字,若是項目爲根目錄,則獲得一個"",即空的字條串,
若是項目爲dzjc, <%=request.getContextPath()% >/ 將獲得dzjc/,服務器端的路徑則會自動加上,
<a href="XXX.jsp"> 應該就是指當前路徑下的這個xxx.jsp頁面,有時候也能夠在head裏設置html:base
來解決路徑的問題,不過用的最多的仍是request.getContextPath。spa

用EL來表示相同功能的EL爲:${pageContext.request.getContextPath()}orm

request.getScheme();
返回的協議名稱,默認是http

request.getServerName()
返回的是你瀏覽器中顯示的主機名

getServerPort()
獲取服務器端口號

若是想獲得工程文件的實際物理路徑,可經過:<%=request.getRealPath("/")%>,這樣頁面就會輸出:d:/web

 

如今request.getRealPath("") 這個方法已經不推薦使用了
可使用
ServletContext.getRealPath(java.lang.String) instead. request.getSession().getServletContext().getRealPath() 獲得工程文件的實際物理路徑,也就是絕對地址

 

簡便用法:

String path=request.getContextPath();//path = /oa

request.setAttribute("path", path);

在頁面中應用(EL) ${path}/images/xx.jpg(絕對定位:oa/images/xx.jpg)

能夠解決複雜的相對路徑定位失敗的問題。

相關文章
相關標籤/搜索