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
?
轉載于:https://www.cnblogs.com/fifiyong/p/HTML.html
總結
以上是生活随笔為你收集整理的HTML的相关路径与绝对路径的问题---通过网络搜索整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于如何将sublime的主题应用到we
- 下一篇: 2017年html5行业报告,云适配发布