我开始研究Spring MVC和tomcat。
我想通过Spring和ThymeLeaf VewTemplate Engine显示html页面。
但它没有用。
在我的配置文件和控制器下面。
web.xml文件
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/webapp/WEB-INF/DispatcherServlet-serlvet.xml
<context:component-scan base-package="com.everblog.controller" />
<!-- ViewResolver be configured by thymeleaf -->
<bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML5" />
<property name="characterEncoding" value="UTF-8" />
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean>
<bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
<property name="order" value="1" />
<property name="viewNames" value="*.html" />
</bean>
和控制器
@Controller
public class PostItemController {
@RequestMapping(value="/hello", method = RequestMethod.GET)
public String helloWorld() {
System.out.println("IS IN");
return "index";
}
}
我在浏览器上键入localhost:9000 / hello,然后浏览器显示此错误消息。 HTTP状态500 - 无法解析名称为&#39; index&#39;的视图在名为&#39; DispatcherServlet&#39;
的servlet中输入例外报告
消息无法解析名称为&#39; index&#39;的视图在servlet中的名字 &#39; DispatcherServlet的&#39;
说明服务器遇到内部错误,导致无法完成此请求。
例外
javax.servlet.ServletException:无法解析名称视图 &#39;指数&#39;在名为&#39; DispatcherServlet&#39;的servlet中 org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1190) org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) note注意Apache中提供了根本原因的完整堆栈跟踪 Tomcat / 7。0。50日志。
index.html位于/ webapp / WEB-INF / view /
我要做什么配置?
答案 0 :(得分:10)
看一下ThymeleafViewResolver#setViewNames(String[])
的javadoc。它声明
指定一组名称模式,用于确定是否 控制器返回的视图名称将由此解析程序解析 或不。
您的@Controller
处理程序方法返回的视图名称是
return "index";
该视图名称肯定与模式
不匹配*.html
你必须使用
return "index.html";
让Spring使用你的ThymeleafViewResolver
,但由于没有这样解析的JSP存在,因此会在以后的步骤中失败。
相反,只需摆脱viewNames
<property>
或相应地修复它和@Controller
方法。
答案 1 :(得分:0)
使用此代码替换百万美元解析器中的最后一个bean,它将正常工作
<beans:bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
<beans:property name="templateEngine" ref="templateEngine" />
</beans:bean>
答案 2 :(得分:-3)
您在调度程序servlet中提供的ant模式可能不允许您的视图解析程序解析视图...在您的调度程序servlet中将URL模式更改为/
而不是/*
。 / p>