2014-03-18 49 views
0

在Spring-MVC Web App中,我有一個類似於屏幕的結構。裏面webapp/WEB-INF是文件夾jsp。某些jsp文件包含在每個站點中,這些jsp位於子文件夾parts中,當我運行應用程序時,站點上可以看到head,footer and header將jsp包含在另一個jsp(片段)中時顯示錯誤

enter image description here

但是Eclipse顯示在JSP編輯器中的錯誤:Fragment "/parts/footer" was not found at expected path /blog/src/main/webapp/parts/footer。在web.xml中是:

<servlet-mapping> 
    <servlet-name>jsp</servlet-name> 
    <url-pattern>/WEB-INF/jsp/*</url-pattern> 
</servlet-mapping> 

如何配置Eclipse來解決這個惱人的錯誤?

編輯---------- --------- 2014年4月9日

我發現了什麼是一個問題。問題是Maven依賴。這Maven的依賴性:

<dependency> 
    <groupId>org.apache.commons</groupId> 
    <artifactId>commons-lang3</artifactId> 
    <version>3.3.1</version> 
</dependency> 

當我把它添加到pom.xml然後蝕像上面顯示的錯誤。當我評論它時,清理生成的文件(.project, .classpath, target, .settings),並再次導入日食,看起來不錯。任何想法什麼是錯誤的Maven依賴? Here是該項目的源代碼。

+0

嗯,你爲什麼會映射下的所有'/ WEB-INF/JSP/*'這樣的JSP的?它違背了把它們放在/ WEB-INF /下的全部目的。 – developerwjk

回答

0

我認爲你的include指令是錯誤的。 JSP編譯器正在尋找這些孩子相對於你的上下文的根源,並且你把他們埋在WEB-INF下面(正如@developerwjk所說的那樣,它最好是非傳統的)。如果你製作包括親戚,紅色會消失嗎?

<jsp:include page="parts/footer.jsp"/> 

我們的春MVC項目結構類似於

bobk-mbp:hubimport bobk$ tree 
. 
├── WebContent 
│   ├── META-INF 
│   │   └── MANIFEST.MF 
│   ├── WEB-INF 
│   │   ├── c.tld 
│   │   ├── classes 
... 
│   │   ├── lib 
... 
│   │   └── web.xml 
│   ├── jsp 
│   │   ├── about.jsp 
│   │   ├── assetError.jsp 
│   │   ├── assetList.jsp 
│   │   ├── assetUpload.jsp 
│   │   ├── common.js 
│   │   ├── contentUploading.jsp 
│   │   ├── favicon.ico 
│   │   ├── logo.gif 
│   │   ├── hubimporter.css 
│   │   ├── index.jsp 
│   │   ├── menu.jsp 
│   │   └── wait_gif.gif 
│   └── scripts 
│    ├── imgpreview.min.0.22.jquery.js 
│    └── jquery-1.7.min.js 
├── src 
│   ├── c.tld 
│   ├── com 
... 

而且每個JSP包括像

<jsp:include page="menu.jsp" /> 
0

您試圖映射的JSP中引入了menu.jsp在web.xml中實際上是錯誤。您不會在url-pattern中參考/ WEB-INF /,而是在jsp-file標記中參考。/WEB-INF /不能用作url模式,因爲根據定義,Tomcat在WEB-INF下不會提供任何東西,除非它映射到不同的url模式。 WEB-INF就是隱藏事物。

下面只對應一個JSP,但它給出了基本思路。

<servlet> 
    <servlet-name>jspinwebinftest</servlet-name> 
    <jsp-file>/WEB-INF/jsptest.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>jspinwebinftest</servlet-name> 
    <url-pattern>/jspinwebinftest/*</url-pattern> 
</servlet-mapping> 

然後,您將通過url模式包含文件。

在WEB-INF下隱藏JSP的一點是,如果你不想讓它們通過它們的文件名(whatever.jsp)訪問,因爲它不可能讓用戶訪問/WEB-INF/whatever.jsp,因爲沒有任何東西除非映射到另一個url,否則將在/ WEB-INF /下執行。因此,如果您希望它像servlet一樣映射(或者像沒有擴展名的路徑或不同於.jsp的擴展名),您可以將您的jsp放在WEB-INF下。如果您希望它們可以通過常規文件名訪問,請不要將它們放在WEB-INF下。