HTML的相關路徑與絕對路徑的問題---通過網絡搜索整理


問題描述:
    在webroot中有個index.jsp 在index.jsp中寫個表單。
  現在在webroot中有個sub文件夾,sub文件夾中有個submit.jsp想得到index.jsp表單的數據

  index.jsp
  < form action="????這邊要怎么寫才才能指向submit.jsp" method="post">

    數據

  < /form>

 

問題解決:

HTML的相關路徑與絕對路徑的問題。
先看一下下面的URL:
http://192.168.1.1:8080/hello/index.html
一個URL由
服務器地址: http://192.168.1.1:8080
WEB應用上下文:  /hello
網頁或請求:  /index.html
三個部分組成。
WEB應用發布時,WEB應用上下文可以自行指定,如放在ROOT/下的話,WEB應用上下文就是空,如:
http://192.168.1.1:8080/index.html
它的WEB應用上下文就是空。

HTML協議中要求,form的action屬性,以“/”開頭是絕對路徑,不以“/”開頭的是相對路徑。
絕對路徑是相對於服務器地址而言的,相對路徑是相對於當前網頁或請求而言的。
舉一個例子,你的當前網頁位置是:
http://192.168.1.1:8080/hello/page/index.html
其中/hello是WEB應用上下文;/page/index.html是網頁。
在這個網頁上有一個請求需要指向
http://192.168.1.1:8080/hello/servlet/checkUser.cgi
index.html中的form應該怎么寫呢?
可以寫成絕對路徑(相對於http:/192.168.1.1:8080)
< form action="/hello/servlet/checkUser.cgi" >
...
< /form>
也可以寫成相對路徑(相對於http://192.168.1.1:8080/hello/page)
< form action="../servlet/checkUser.cgi" >
...
< /form>

當前如果你的WEB應用是基於JSP的話,有許多第三方的標簽庫如JSTL或基於Struts的標簽庫都可以在form中自動為你加上WEB應用上下文,如二樓東走西顧的例子。
如果你准備在JSP使用基本語句生成網頁的話,六樓honglei915提供了一個很好的例子,只不過“/”更規范一些,如:
< %!String basePath=request.getContextPath();%> 
< form action="<%=basePath%>/sub/submit.jsp" method="post"> 
< /form> 

 

在JSP中,腳本化語言如“<%=contextPath%>”可以從page,request,session及application中取值。
下面的代碼可以看到結果是因為contextPath被保存在page中:
< % String contextPath = request.getContextPath(); %>
< form action="<%=contextPath%>/sub/submit.jsp" method="post"> 
< /form> 

EL表達式如“${contextPath}”只能從request,session及application中取值。
上述代碼修改一下就可以支持EL表達式:
< % 
  String contextPath = request.getContextPath(); 
  // 將contextPath保存到request中
  request.setAttribute("contextPath", contextPath);
%>
< form action="${contextPath}/sub/submit.jsp" method="post"> 
< /form> 

 

 

另外還有兩個方法:

方法一:
< %!String basePath=request.getContextPath();%>
< form action="<%=basePath%>\sub\submit.jsp" method="post"> 
< /form>

basePath 是你項目的根路徑,推薦這樣做,不管以后你的sub 文件夾怎么移動,都是可以成功提交的。

使用這個方法需要理解"<%=basePath%>是什么

關於"<%=basePath%>的理解請參考:http://www.cnblogs.com/fifiyong/p/JSP.html

方法二:

<form action="${pageContext.request.contextPath}/sub/submit.jsp" method="post"> 
< /form> 

${pageContext.request.contextPath}等價於<%=request.getContextPath()%> 或者可以說是<%=request.getContextPath()%>的EL版 意思就是取出部署的應用程序名或者是當前的項目名稱

比如項目名稱是ajax01 在瀏覽器中輸入為http://localhost:8080/ajax01/login.jsp ${pageContext.request.contextPath}或<%=request.getContextPath()%>取出來的就是/ajax01,而"/"代表的含義就是http://localhost:8080

所以我們項目中應該這樣寫${pageContext.request.contextPath}/login.jsp

 


免責聲明!

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



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