教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

JAVA培訓之URL重寫

更新時間:2016年08月26日13時54分 來源:傳智播客JAVA培訓學院 瀏覽次數(shù):

URL重寫

1.什么是URL重寫

session是依賴于cookie或URL重寫的,當瀏覽器端沒有禁用Cookie,那么session就依賴cookie,即服務器會將session的id值存放在一個名為JSESSIONID的cookie中,瀏覽器再次訪問服務器時,會將這個cookie帶給服務器,這樣在服務器端就可以根據(jù)獲得session的id值找到對應的session,進而從session中獲取數(shù)據(jù)。但是如果瀏覽器端禁用了cookie,就會出現(xiàn)如圖1-1所示的情況:

圖1-1 瀏覽器禁用cookie
由圖1-1可知,如果瀏覽器端禁用了cookie,那么瀏覽器每次訪問服務器時,服務器端只要調用了request.getSession()方法,服務器就會創(chuàng)建一個新的session對象。那么我們就不能再將數(shù)據(jù)保存在session中,因為新的session創(chuàng)建后,之前的session就無法獲取了。
為了解決瀏覽器禁用cookie后所帶來的問題,我們采用URL重寫。所謂的URL重寫就是將應用中的所有超鏈接、表單提交路徑后面都添加一個特殊的請求參數(shù),參數(shù)名為jsessionid,參數(shù)值為session的id值。當瀏覽器訪問服務器時,在服務器端調用了request.getSession()方法,這個方法會在沒有找到名為JSESSIONID的cookie的情況下,去請求參數(shù)中查找名為jsessionid的參數(shù),并獲取該參數(shù)的值,進而找到對應的session。
另外,需要注意的是,如果使用URL重寫,那么應用中的所有超鏈接和表單提交路徑都要進行URL重寫,如果有一個超鏈接或表單路徑?jīng)]有進行URL重寫,那么服務器就會認為沒有為當前會話創(chuàng)建session,從而又為當前會話創(chuàng)建一個新的session,那么之前的session就無法獲取了。

2.實現(xiàn)URL重寫

通過對URL重寫的了解,下面我們通過一個案例來了解如何實現(xiàn)URL重寫,具體如下:
(1)創(chuàng)建一個web應用,名稱為Example25,對該應用下的index.jsp文件進行編輯,如例1-1所示:
例1-1 index.jsp
  <body>
  <h1>index.jsp頁面</h1>
    <a href="/Example25/url/one.jsp;jsessionid=<%=session.getId()%>">點擊這里</a>
    <%=session.getId() %>
  </body>
例1-1中,在超鏈接中使用了URL重寫,注意這里,如果URL后面跟的參數(shù)是jsessionid那么連接符就不再使用“?”而是使用“;”連接。
(2)在該應用下的WebRoot目錄下新建一個目錄url,并在該目錄下新建一個jsp文件,one.jsp,主要代碼如例1-2所示:
例1-2 one.jsp
<body>
<h1>one.jsp頁面</h1>
   <a href="/Example25/url/two.jsp;jsessionid=<%=session.getId()%>">點擊這里
   </a>
   <%=session.getId() %>
</body>
在one.jsp中有一個超鏈接,該超鏈接也使用了URL重寫。
(3)在url目錄下新建一個jsp文件,two.jsp,主要代碼如例1-3所示:
例1-3 two.jsp
<body>
<h1>two.jsp頁面</h1>
    <%=session.getId() %>
</body>
(4)將Example25發(fā)布到Tomcat服務器中,然后啟動服務器,在瀏覽器端訪問:http://localhost:8080/Example25/index.jsp,瀏覽器顯示結果如圖1-2所示:

圖1-2 瀏覽器顯示結果
(5)點擊圖1-2中的超鏈接“點擊這里”,進入如圖1-3所示界面:

圖1-3 瀏覽器顯示結果
(6)點擊圖1-3中的超鏈接“點擊這里”,進入圖1-4所示界面:

圖1-4 瀏覽器顯示結果
由圖1-4、圖1-3、圖1-2可知,index.jsp、one.jsp以及two.jsp,這三個頁面中的session是同一個session,也就是說使用URL重寫與瀏覽器沒有禁用cookie有一樣的效果。
以上是我們手動在URL后面添加jsessionid,如果瀏覽器沒有禁用cookie,那么在URL后面添加jsessionid參數(shù)就顯得多余了?,F(xiàn)在我們使用比較智能的URL重寫:如果瀏覽器沒有禁用cookie,那么就不進行URL重寫,如果瀏覽器禁用了cookie就進行URL重寫。
response.encodeURL(String url)方法可以實現(xiàn)智能的URL重寫,該方法的參數(shù)是要進行URL重寫的路徑。例如,將index.jsp頁面中的手動URL重寫換成智能的URL重寫:
<body>
  <h1>index.jsp頁面</h1>
  <%String url=response.encodeURL("/Example25/url/one.jsp"); %>
    <a href="<%=url%>">點擊這里</a>
    <%=session.getId() %>
  </body>
將瀏覽器設置為接受cookie,然后在瀏覽器端訪問index.jsp頁面,瀏覽器顯示結果如圖1-5所示:

圖1-5 瀏覽器顯示結果
設置瀏覽器禁用cookie,再次訪問index.jsp頁面,瀏覽器顯示結果如圖1-6所示:

圖1-6 瀏覽器顯示結果
由圖1-5和圖1-6可知,使用response.encodeURL(String url)方法可以實現(xiàn)智能的URL重寫。
 
本文版權歸傳智播客Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://www.xamj520.com/javaee
0 分享到:
和我們在線交談!