1. 程式人生 > >web-inf下jsp之間的跳轉

web-inf下jsp之間的跳轉

  雖然做了大半年的web開發了,但一直浮於表面,東西會做,但很多原理不通,要想成為技術牛人光會做是遠遠不行的,因為即使會做但不會講且不能舉一反三,哎,想當年高中數學之所以這麼好就是因為高中數學原理我都一清二楚,舉一反三,興手捻來,反而到了現在有點急功近利,急於求成,我這不是倒退了麼?我甘心做一個下平庸的人麼,答案顯然不是,所以從今天起我要做研究生階段所沒有做過的研究,從web開發做起,養成研究的習慣,養成動腦的習慣,崛起吧。。呵呵,遙想了一下當年,哎,往事知多少啊,開始正題啦!

  今天就先寫一個WEB開發的小心得吧。

  在我做的SSH專案,有大量的jsp頁面,在開始做專案的時候,我就只會機械的學別人在struts裡面配頁面之間的跳轉路徑,雖然後來知道了struts的原理,瞭解了跳轉的過程,但是真正自己要用到非struts環境底下的頁面跳轉的時候發現經常跳轉報錯,無論我是用相對路徑還是絕對路徑都報錯,這就搞的我很鬱悶了,這究竟是為什麼呢?

  原來這是JSP的安全性作的鬼。

  在J2EE中其主要安全性就體現在web工作目錄的WEB-INF資料夾下.如果將一個頁面儲存在WEB-INF檔案下 ,那麼該頁面則不能被使用者訪問,就好比小偷都看不見我有什麼,他還能知道要偷什麼嗎.. 因此如果將一個頁面放在WEB-INF資料夾下,那麼該頁面的安全性將得到提高... 但有時候當我們需要訪問該頁面時,卻無法訪問,如何能夠訪問WEB-INF資料夾下的頁面呢?

  struts為此提供了很便捷的跳轉環境。在struts中每一個跳轉都是通過一個action來處理的,action處理完了之後在forward到相對地址就行,這個很簡單。

  但是問題是如果我不通過action來處理跳轉,我想直接從web-inf的a.jsp頁面跳到b.jsp頁面怎麼辦呢?通常這個時候我們會試下相對地址/b.jsp 絕對地址/WEB-INF/b.jsp或者<%=request.getContext()=%>/WEB-INF/b.jsp,但無論怎麼搞都不行,這個時候就比較崩潰。想直接跳轉從安全性的角度來看肯定不行的,因為在WEB-INF底下web容器是不讓你看見他的跳轉路徑的。直接跳轉不行,間接跳轉還是有的,比如struts的action跳轉就是一種間接,為什麼間接就是安全的呢?因為它的跳轉地址是在web.xml裡面配好的,訪問的人是看不見的所以是間接安全的。難道只有struts可以完成間接的任務,顯然不是了。其實想一想struts的action是什麼東西就知道怎麼做了,struts的action說白了還是一個servlet,所以可以通過servlet來完成任務了。

首先在web.xml裡面配置servlet和servlet mapping

<servlet>
   <servlet-name>goto</servlet-name>
   <jsp-file>/WEB-INF/jsp/test.jsp</jsp-file>--要跳轉到的頁面
  </servlet>
  <servlet-mapping>
   <servlet-name>goto</servlet-name>
   <url-pattern>/test</url-pattern>
  </servlet-mapping>

配置好了之後在jsp頁面裡用a就可以跳轉了<a href="/工程名/test">測試頁面跳轉</a>--這裡一定要“/工程名/test”

   通過servlet跳轉還是比較麻煩了,但是這樣能保證JSP頁面的安全性,想兩全其美是比較難的了。

 當然如果安全要求不高,那就可以做成很簡單的了,直接把所有的jsp頁面全部放在webRoot底下,在WebRoot下頁面使用者可以直接輸入地址訪問。