的Spring MVC异常无法解析名为where use';重定向:“;内部控制器

的Spring MVC异常无法解析名为where use';重定向:“;内部控制器,spring,spring-mvc,url-redirection,Spring,Spring Mvc,Url Redirection,我发现SpringViewResolver有一些有趣的问题 我已经建立了一个简单的SpringMVC应用程序 spring-servlet.xml如下所示: <mvc:resources location="/images/" mapping="/images/**" /> <mvc:resources location="/css/" mapping="/css/**" /> <mvc:annotation-driven /> <con

我发现SpringViewResolver有一些有趣的问题

我已经建立了一个简单的SpringMVC应用程序

spring-servlet.xml如下所示:

<mvc:resources location="/images/" mapping="/images/**" />
  <mvc:resources location="/css/" mapping="/css/**" />


  <mvc:annotation-driven />
  <context:component-scan base-package="thymeleafexamples.thvsjsp" />
  <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="Messages" />
  </bean>


  <bean id="templateResolver"
        class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    <property name="prefix" value="/WEB-INF/templates/" />
    <property name="suffix" value=".html" />
    <property name="templateMode" value="HTML5" />
  </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="viewNames" value="index,*th" />
    <property name="order" value="1" />
  </bean>    

  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/templates/" />
    <property name="suffix" value=".jsp" />
    <property name="viewNames" value="*jsp" />
    <property name="order" value="2" />
  </bean>

  <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="Messages" />
  </bean>

  <bean id="templateResolver"
        class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    <property name="prefix" value="/WEB-INF/templates/" />
    <property name="suffix" value=".html" />
    <property name="templateMode" value="HTML5" />
  </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="viewNames" value="index,*th" />
    <property name="order" value="1" />
  </bean>    

  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/templates/" />
    <property name="suffix" value=".jsp" />
    <property name="viewNames" value="*jsp" />
    <property name="order" value="2" />
  </bean>

and web.xml as 

 <servlet>
      <servlet-name>spring</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
    </servlet>


    <servlet-mapping>
      <servlet-name>spring</servlet-name>
      <url-pattern>/</url-pattern>
    </servlet-mapping>
我的控制器如下所示:

@Controller
public class SubscribeJsp {

    private static final Logger log = Logger.getLogger(SubscribeJsp.class);


    public SubscribeJsp() {
        super();
    }




    @ModelAttribute("allTypes")
    public SubscriptionType[] populateTypes() {
        return new SubscriptionType[] { SubscriptionType.ALL_EMAILS, SubscriptionType.DAILY_DIGEST };
    }


    @RequestMapping(value="/subscribe",method=RequestMethod.GET)
    public String showSubscription(final Subscription subscription) {
        return "subscribejsp";
    }



    @RequestMapping(value="/subscribesave", params={"save"})
    public String subscribe(final Subscription subscription, final BindingResult bindingResult, final ModelMap model) {
        if (bindingResult.hasErrors()) {
            return "subscribejsp";
        }
        log.info("JUST ADDED SUBSCRIPTION: " + subscription);
        model.clear();
        return "redirect:subscribe";
    }


}

您应该使用绝对路径进行重定向,除非您确实希望查找相对于当前路径的url。因此,您只需这样编写重定向:

return "redirect:/subscribe";
你应该把线移走

<property name="viewNames" value="*jsp" />


springservlet.xm
文件中的
InternalResourceViewResolver
。它会阻止它正确查找不以jsp结尾的视图(包括重定向…),并且对任何事情都没有帮助。

谢谢Serge Ballesta,解决方案通过删除 但我使用了两种不同的视图解析器,一种用于jsp,另一种用于thymeleaf。 我想要他们两个相应的作品。实际上我不想保留jsp页面和 在两个不同的文件夹中启用了thymeleaf的html页面,我不能返回两个 从我的控制器以jsp/mypage.jsp或thymelef/th.html的形式查看名称。有什么建议吗 解决这个问题。 在这种情况下,这会有所帮助,但对于这个问题,我必须对jsp和控制器映射名称使用相同的名称

保持:

<property name="viewNames" value="index,*th" />

删除:

<property name="viewNames" value="*jsp" />


您应该更正
return“redirect:subscribe”中的return语句
返回“重定向:/subscribe”

我使用了spring webmvc dependency 3.2.3和thymeleaft 2.13,请确保将控制器类路径添加到spring-servlet.xml文件中的组件扫描中。我使用了该解决方案,但在这种情况下,我得到了相同的错误。只有当我将requestmapping从subscribe更改为subscribejsp并更改重定向:/subscribejsp@kamlesh另一个原因是
-post-edited
<property name="viewNames" value="*jsp" />