当前位置: 首页 > 知识库问答 >
问题:

在名为“DispatcherServlet”的servlet中,我找不到无法解析名为“index”的视图的答案

林修真
2023-03-14

我刚开始学习Spring MVC和tomcat。

我想通过Spring和ThymeLeaf VewTemplate引擎显示html页面。

但它不起作用。

下面是我的配置文件和控制器。

网状物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-无法在名为“DispatcherServlet”的servlet中解析名为“index”的视图

类型异常报告

消息无法在名为“DispatcherServlet”的servlet中解析名为“index”的视图

描述服务器遇到内部错误,无法满足此请求。

例外

ervlet.serviceServletException:无法解析名称为DispatcherServlet的servlet中的名称为index的视图ervlet.java:621DispatcherSorg.springframework.web.servlet.(DispatcherServlet.service)ervlet.java:829DispatcherSjavax.servlet.http.DispatchResult(DispatcherServlet.service)ervlet.java:728DispatcherSorg.apache.tomcat.websocket.server.Dispat(DispatcherSilter.do)ilter.java:52DispatcherSorg.springframework.web.filter.Service(DispatcherSilter.do)org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)javax.servlet.http.HttpSjavax.servlet.(HttpSorg.springframework.web.servlet.)ervlet.renderFrameworkServlet.java:1190(FrameworkSorg.springframework.web.servlet.)ervlet.processHttpServlet.java:992(HttpSorg.springframework.web.servlet.)ervlet.doWsFervlet.java:939Filter(WsForg.springframework.web.servlet.)ervlet.do特征编码Fervlet.java:856FilterInterIncerEncodingFilter. java: 88)org. springframe. web. filter. OncePerRequest estFilter. doFilter(OncePerRequest estFilter. java: 107)注意Apache Tomcat/7.0.50日志中提供了根原因的完整堆栈跟踪。

index.html位于 /webapp/WEB-INF/view/

我还需要配置什么?

共有2个答案

慕光霁
2023-03-14

用这段代码单独替换thymeleaf解析器中的最后一个bean,它可以正常工作

<beans:bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
    <beans:property name="templateEngine" ref="templateEngine" />

</beans:bean>
怀洛华
2023-03-14

请看一下MyryleAFViewResolver的javadoc#setViewNames(字符串[])。它指出

指定一组名称模式,用于确定控制器返回的视图名称是否将由此解析器解析。

您的@Controller处理程序方法返回的视图名称是

return "index";

该视图名称显然与模式不匹配

*.html

你必须使用

return "index.html";

让Spring使用您的ThymeleafViewResolver,尽管在后面的步骤中会失败,因为不存在这样的已解析JSP。

相反,只需去掉viewNames

 类似资料: