javaweb學(xué)習(xí)總結(jié)(三)web工程中URL地址的推薦寫法

在javaweb開發(fā)中,經(jīng)常在寫URL的時(shí)候會(huì)弄混或者寫錯(cuò),因此下面就進(jìn)行一個(gè)總結(jié):只要是寫URL地址,那么建議最好以"/"開頭,也就是使用絕對(duì)路徑的方式,那么這個(gè)"/"到底代表什么呢?可以用如下的方式來記憶"/":如果"/"是給服務(wù)器用的,則代表當(dāng)前的web工程,如果"/"是給瀏覽器用的,則代表webapps目錄。

1.1 "/"代表當(dāng)前web工程的常見應(yīng)用場(chǎng)景

  • ServletContext.getRealPath(String path)獲取資源的絕對(duì)路徑
/**
* 1.ServletContext.getRealPath("/download/1.JPG")是用來獲取服務(wù)器上的某個(gè)資源,
* 那么這個(gè)"/"就是給服務(wù)器用的,"/"此時(shí)代表的就是web工程
 * ServletContext.getRealPath("/download/1.JPG")表示的就是讀取web工程下的download文件夾中的1.JPG這個(gè)資源
* 只要明白了"/"代表的具體含義,就可以很快寫出要訪問的web資源的絕對(duì)路徑
*/
this.getServletContext().getRealPath("/download/1.JPG");
  • 在服務(wù)器端forward到其他頁面
 /**
 * 客戶端請(qǐng)求某個(gè)web資源,服務(wù)器跳轉(zhuǎn)到另外一個(gè)web資源,這個(gè)  forward也是給服務(wù)器用的,
 * 那么這個(gè)"/"就是給服務(wù)器用的,所以此時(shí)"/"代表的就是web工程
 */
this.getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);

1.2 "/"代表webapps目錄的常見應(yīng)用場(chǎng)景

  • 使用sendRedirect實(shí)現(xiàn)請(qǐng)求重定向
 response.sendRedirect("/JavaWeb_Response_Study_20180405/index.jsp");

服務(wù)器發(fā)送一個(gè)URL地址給瀏覽器,瀏覽器拿到URL地址之后,再去請(qǐng)求服務(wù)器,所以這個(gè)"/"是給瀏覽器使用的,此時(shí)"/"代表的就是webapps目錄,"/JavaWeb_Response_Study_20180405/index.jsp"這個(gè)地址指的就是"webapps\JavaWeb_Response_Study_20180405\index.jsp"

response.sendRedirect("/項(xiàng)目名稱/文件夾目錄/頁面");這種寫法是將項(xiàng)目名稱寫死在程序中的做法,不靈活,萬一哪天項(xiàng)目名稱變了,此時(shí)就得改程序,所以推薦使用下面的靈活寫法:

response.sendRedirect(request.getContextPath()+"/index.jsp");

request.getContextPath()獲取到的內(nèi)容就是"/JavaWeb_Response_Study_20180405",這樣就比較靈活了,使用request.getContextPath()代替"/項(xiàng)目名稱",推薦使用這種方式,靈活方便!

  • 使用超鏈接跳轉(zhuǎn)

    <a href="/JavaWeb_Response_Study_20180405/index.jsp">跳轉(zhuǎn)到首頁</a>
    

這是客戶端瀏覽器使用的超鏈接跳轉(zhuǎn),這個(gè)"/"是給瀏覽器使用的,此時(shí)"/"代表的就是webapps目錄。

使用超鏈接訪問web資源,絕對(duì)路徑的寫法推薦使用下面的寫法改進(jìn):

 <a href="${pageContext.request.contextPath}/index.jsp">跳轉(zhuǎn)到首頁</a>

這樣就可以避免在路徑中出現(xiàn)項(xiàng)目的名稱,使用 ${pageContext.request.contextPath}取代"/JavaWeb_Response_Study_20180405"

getOutputStream和getWriter方法分別用于得到輸出二進(jìn)制數(shù)據(jù)、輸出文本數(shù)據(jù)的ServletOuputStream、Printwriter對(duì)象。
  getOutputStream和getWriter這兩個(gè)方法互相排斥,調(diào)用了其中的任何一個(gè)方法后,就不能再調(diào)用另一方法。
  Servlet程序向ServletOutputStream或PrintWriter對(duì)象中寫入的數(shù)據(jù)將被Servlet引擎從response里面獲取,Servlet引擎將這些數(shù)據(jù)當(dāng)作響應(yīng)消息的正文,然后再與響應(yīng)狀態(tài)行和各響應(yīng)頭組合后輸出到客戶端。
  Serlvet的service方法結(jié)束后,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對(duì)象是否已經(jīng)調(diào)用過close方法,如果沒有,Servlet引擎將調(diào)用close方法關(guān)閉該輸出流對(duì)象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容