我无法找到无法解析名称为'DispatcherServlet'的servlet中名为'index'的视图的答案

时间:2014-04-14 04:35:08

标签: java spring tomcat spring-mvc servlets

我开始研究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 /

我要做什么配置?

3 个答案:

答案 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>