2011-05-25 42 views
1

我有一个Tomcat部署,其中包含一个生活在web/WEB-INF内的webapp。下面是我实例化Spring容器的方式:Spring无法解析JSP视图

<servlet> 
    <servlet-name>report</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/report-servlet.xml 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>report</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

report-servlet.xml文件中找到,加载并正确解析。

但是,我的JSP视图无法解析。这里是我的解析:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/views/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

我有根URL映射到/欢迎:

<!-- Forwards requests to the "/" resource to the "welcome" view --> 
<mvc:view-controller path="/" view-name="welcome"/> 

这种观点是发现和委托时,我要求http://localhost/InternalResourceViewResolver,但这个.jsp不发现:

[org.springframework.web.servlet.view.InternalResourceView] (http-11080-1) Rendering view with name 'welcome' with model null and static attributes {} 
[org.springframework.web.servlet.view.InternalResourceView] (http-11080-1) Forwarding to resource [/WEB-INF/views/welcome.jsp] in InternalResourceView 'welcome' 
[org.springframework.web.servlet.DispatcherServlet] (http-11080-1) Bound request context to thread: [email protected] 
[org.springframework.web.servlet.DispatcherServlet] (http-11080-1) DispatcherServlet with name 'report' processing GET request for [//WEB-INF/views/welcome.jsp] 
[org.springframework.web.servlet.DispatcherServlet] (http-11080-1) Testing handler map [org.springframe[email protected]4ab83be0] in DispatcherServlet with name 'report' 
[org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] (http-11080-1) No handler mapping found for [/WEB-INF/views/welcome.jsp] 
[org.springframework.web.servlet.DispatcherServlet] (http-11080-1) Testing handler map [[email protected]2c1533c8] in DispatcherServlet with name 'report' 
[org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] (http-11080-1) No handler mapping found for [/WEB-INF/views/welcome.jsp] 
[org.springframework.web.servlet.DispatcherServlet] (http-11080-1) Testing handler map [[email protected]4268cc6] in DispatcherServlet with name 'report' 
[org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] (http-11080-1) No handler mapping found for [/WEB-INF/views/welcome.jsp] 

和WEB-INF的内容/观点:

# ls -l WEB-INF/views/welcome.jsp 
-rw-r--r-- 1 user group 1.2K 2011-05-24 15:43 WEB-INF/views/welcome.jsp 

为什么容器没有问题找到包含我的bean的Spring xml文件,但无法解析包含我的JSP的目录?

+0

你使用的是什么网址? http:// localhost:8080/welcome?我认为你需要让你成为url-pattern/*,而不是/。 – Kevin 2011-05-25 00:39:51

+0

@Kevin:我更新了我的帖子以包含更多信息。找到根URL并将其映射到解析器,但解析器不加载我的JSP。 – purecharger 2011-05-25 00:47:28

回答

3

以下URL映射会将所有请求重定向到report servlet。但是,您不得在调度程序servlet配置中为JSP文件设置处理程序。

<servlet-mapping> 
    <servlet-name>report</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

达到你想要什么,你必须指定要重定向到report servlet的URL模式。这必须排除JSp文件。

我会建议你在URL中指定一些类似前缀的内容。只有这些URL将由Spring Dispatcher Servlet处理。如下面的例子所示。

<servlet-mapping> 
    <servlet-name>report</servlet-name> 
    <url-pattern>/report/*</url-pattern> 
</servlet-mapping> 

现在,所有带有/report/<something>的URL将由Spring webmvc处理。这个servlet(report)将被应用于以* .jsp结尾的URL。

0

我决定回答我的问题,而不是编辑OP或作为对无关答案的评论。

结果Tomcat配置不正确。我没有配置JSP servlet(或者是那个DefaultServlet),所以JSP视图没有被渲染。