make .html默认查看spring mvc

时间:2012-11-29 00:23:21

标签: spring-mvc

拥有示例应用并创建了

view/HelloWorld.html

页。从我的控制器,我返回以下

public String home(Locale locale, Model model) {
    return "HelloWorld";
}

在调试模式下,我收到此警告/错误:

WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/HelloWorld/WEB-INF/views/HelloWorld.html] in DispatcherServlet with name 'appServlet'

我的src / main / webapp / WEB-INF / spring / appServlet / servlet-context.xml的内容

<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".html" />
</beans:bean>

如果我将.html重命名为.jsp并将上面的内容更改为.jsp,那么事情就可以了。

2 个答案:

答案 0 :(得分:11)

servlet容器为此请求完成的流程如下:

  1. 首先,Servlet容器调用DispatcherServlet。
  2. DispatcherServlet找到映射到Controller的home方法的映射,home方法返回一个视图名称&#34; HelloWorld&#34;
  3. 现在,DispatcherServlet使用View Resolver(您的InternalResourceViewResolver)查找View以呈现模型,因为名称是&#34; HelloWorld&#34;,这映射到/WEB-INF/view/HelloWorld.html视图。
  4. 现在基本上打电话给RequestDispatcher.forward("/WEB-INF/views/HelloWorld.html",....
  5. 此时Servlet容器尝试查找可以处理/WEB-INF/views/HellowWorld.html uri的servlet - 如果它是.jsp,则注册JSPServlet可以处理呈现jsp,但是对于*.html,没有注册servlet,因此调用以"default servlet"结束,/注册了/WEB-INF/views/HelloWorld.html的servlet-mapping,可能是你的DispatcherServlet。
  6. 现在,Dispatcher servlet找不到一个控制器来处理*.html的请求,因此找到了你正在看到的消息
  7. 如果你希望这种扩展由servlet容器处理,比如tomcat,你可以注册forward:/resources/HelloWorld.html扩展来由JSPServlet处理,然后它应该干净地工作。或者返回resources,它将被视为相对于{{1}}文件夹的静态文件。

答案 1 :(得分:0)

html和jsp之间有很多区别。 Java服务器页面被编译为Java“servlet”。它可以调用bean和企业bean(例如Java Bean组件和Enterprise Java Bean组件)来执行服务器上的处理。因此,拥有这样的JSP技术可能是基于Web的应用程序的高级架构中的关键组件。