拥有示例应用并创建了
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,那么事情就可以了。
答案 0 :(得分:11)
servlet容器为此请求完成的流程如下:
InternalResourceViewResolver
)查找View以呈现模型,因为名称是&#34; HelloWorld&#34;,这映射到/WEB-INF/view/HelloWorld.html
视图。 RequestDispatcher.forward("/WEB-INF/views/HelloWorld.html",....
/WEB-INF/views/HellowWorld.html
uri的servlet - 如果它是.jsp
,则注册JSPServlet
可以处理呈现jsp,但是对于*.html
,没有注册servlet,因此调用以"default servlet"
结束,/
注册了/WEB-INF/views/HelloWorld.html
的servlet-mapping,可能是你的DispatcherServlet。 *.html
的请求,因此找到了你正在看到的消息如果你希望这种扩展由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的应用程序的高级架构中的关键组件。