2014-03-18 40 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下。