1. 程式人生 > >JSP存放在 WEB-INF 跟webroot的區別

JSP存放在 WEB-INF 跟webroot的區別

    放在webroot下面:優點,程式結構清晰,便於編碼和維護;缺點,要加過濾器。 
放在web-inf下面:優點,不用過濾器;缺點,打亂了程式結構,編碼和維護麻煩點。

    webroot其實是一個名字而已,在部署後是看不到的,訪問的時候在url裡肯定也是沒有的,當然webroot也可以換成別webcontent等都可以。
    如果把這些JSP頁面檔案移到WEB-INF 目錄下,在呼叫頁面的時候就必須把"WEB-INF"新增到URL中。

    我們知道,實現頁面的跳轉有兩種方式,一種是通過redirect的方式,一種是通過forward的方式。redirect方式的跳轉,系統會在一個新的頁面開啟要跳轉的網頁;而forward方式跳轉,系統會在原來的頁面上開啟一個要跳轉的網頁。所以放到WEB-INF目錄下的檔案是不允許採用redirect方式的跳轉來訪問的,如下

例1:/test/test1.jsp檔案

<html>

  <body>

    <form name="testform" action="/WEB-INF/jsp/test/test.jsp">

      <input type = "submit" value="test">

    </form>

  </body>

</html>

    上面這段語句只有一個名為test的按鈕,如果單擊這個按鈕是,系統就會跳轉到/WEB-INF/jsp/test/test.jsp,它的程式碼如下:

例2:/WEB-INF/jsp/test/test.jsp檔案

<html>

<body>

跳轉成功!

</body>

</html>

事實上,這個跳轉是無法成功的,點選按鈕後,IE會報“403 Forbidden”的錯誤。


而forward方式的跳轉則可以成功,如下程式碼:

例3:/test/test2.jsp檔案

<html>

<body>

<form name="testform">

<jsp:forward page = "/WEB-INF/jsp/test/test.jsp" />

</form>

</body>

</html>

    請注意上面紅色的語句,這段就是通過forward的形式來訪問/WEB-INF/jsp/test/test.jsp檔案,在IE輸入地址http://localhost/test1/test2.jsp,網頁上就顯示“跳轉成功!”的資訊了,這表示放到了WEB-INF可以通過forward的方式來訪問。


    個人認為,像這種方式的可能不大時候採用一般jsp進行程式設計的系統,因為很多頁面上都有采用submit這樣的方式來進行跳轉,但這種方式卻非常適合採用struts結構的系統。因為採用這個結果大多是先跳轉到一個Action類,然後在Action類進行相關處理後(比如說獲取相關的資訊儲存到session中,進行有效性的判斷),然後再forward到另外一個頁面,這樣放到WEB-INF中的jsp程式碼可以被正常訪問,也防止了對這些頁面的直接訪問,下面我來舉例說明。

    下面我們先對配置檔案struts.xml進行配置,如下:

例4:

<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="sns" extends="struts-default">
<action name="forw" class="com.company.action.Login" method="login">
<result name="c">/WEB-INF/index.jsp</result>

</action>
</package>
</struts>

    上面這個配置非常簡單,請看紅色部分,這裡定義了一個action類,它的路徑為/WEB-INF/index.jsp,所對應的類為com.company.action.Login,它都一個跳轉頁面,別名為c,對應的頁面為/WEB-INF/index.jsp

    下面我們對例1的內容進行修改,使其跳轉到/test去。

例5:修改後的/test/test1.jsp檔案

<html>

  <body>

    <form type="post" action="forw.action">
<input type="submit" value="ok">
    </form>

  </body>

</html>

    這樣我們在IE中訪問http://localhost/test/test1.jsp,然後點選test按鈕,頁面就會跳轉到com.company.action.Login這個類來,下面是這個類的內容。

package com.company.action;


import com.opensymphony.xwork2.ActionSupport;


public class Login extends ActionSupport {

public String login(){
System.out.println("進入方法了");
return "c";
}
}

  使用struts2