1. 程式人生 > >Tomcat WEB-INF目錄下的檔案無法直接訪問

Tomcat WEB-INF目錄下的檔案無法直接訪問

    今天在寫一個小專案是遇到一個問題。就是瀏覽器無法直接訪問Tomcat WEB-INF目錄下的檔案。

專案如下:


其中index.jsp程式碼如下:

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

Interface.jsp有一個表單,其action的url原意是想調到Result.jsp。
<body>
  <form action="/MyCalc/WEB-INF/Result.jsp" method="post">
   ...
  </form>
</body>

當瀏覽器訪問Result.jsp時,無法正常顯示,通過了解才得知,原來Tomcat WEB-INF目錄下的檔案,瀏覽器一般無法直接方法,只能通過重定向後才可以訪問,如果需要直接訪問,可以放在和WEB-INF同級目錄下。

下面是網上有關此問題的討論:

CSDN問題:

jsp放在webroot目錄下 這樣就可以讓使用者直接訪問,jsp放在web-inf目錄下就必須要通過請求才能訪問。
因此放在web-inf下jsp頁面顯得要安全。 
既然這樣 ,那是不是隻要是需要通過請求才可以訪問的頁面就一定要放在web-inf目錄下呢
還有放在webroot和放在web-inf目錄下都各有什麼明顯的優缺點 。
望大家討論...


1樓:

通過設定過濾器,放在webroot下面的檔案也可以實現不能直接訪問。所以說放在哪裡就看習慣是什麼樣了。

一般專案都是要求隱藏性的,只讓客戶通過請求訪問而不是直接訪問jsp頁面。若放在webroot下面,肯定要加一個過濾器阻止所有對*.jsp的訪問。只要比較的話:
放在webroot下面:優點,程式結構清晰,便於編碼和維護;缺點,要加過濾器。
放在web-inf下面:優點,不用過濾器;缺點,打亂了程式結構,編碼和維護麻煩點。

其實二者沒啥大區別,個人傾向於放在webroot下面

2樓:

放web-inf幹嘛,web-inf一般都是用來放不允許使用者訪問到的東西吧,JSP本來就是用於訪問的,感覺像是一個private的interface一樣...,又是讓人調又隱藏...
3樓:
問題是jsp裡面內容都是要通過請求才能獲取的  那如果放在webroot下 直接訪問的話 頁面就空空如也了 或者直接報錯


4樓:

一、加個過濾器並不麻煩,而且加上後就可以永遠不用再管了。
二、放在WEB-INF下面,首先從理解上就很彆扭,然後WEB-INF下面通常有很多檔案,開發過程中從裡面尋找一個檔案或資料夾是很不方便的。

為了減少風險,可以把這些頁面檔案移到WEB-INF 目錄下。基於Servlet的宣告,WEB-INF不作為Web應用的公共文件樹的一部分。因此,WEB-INF 目錄下的資源不是為客戶直接服務的。我們仍然可以使用WEB-INF目錄下的JSP頁面來提供檢視給客戶,客戶卻不能直接請求訪問JSPJSP存放在WEB-INF 目錄下更為安全

    如果把這些JSP頁面檔案移到WEB-INF 目錄下,在呼叫頁面的時候就必須把"WEB-INF"新增到URL中。

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