在SpringMVC中混合使用REST和JSP,找不到JSP

在SpringMVC中混合使用REST和JSP,找不到JSP,rest,spring-mvc,mapping,Rest,Spring Mvc,Mapping,我确信这是一个无趣的问题,我花了大半个小时的时间来寻找答案,但似乎没有人知道我的情况,所以我们开始吧 我有一个使用SpringMVC的新webapp。大多数应用程序(99%)都是纯REST,因此它没有“视图”,而是简单地将JSON发送回网络,或者发送错误的备用HTTP状态等 例外是登录页面,它需要是一个实际的JSP,但不知何故,我用来映射REST控制器的配置使我处于正常JSP映射失败的状态 以下是我得到的: 在my dispatcher servlet配置中,相关部分包括: <bean c

我确信这是一个无趣的问题,我花了大半个小时的时间来寻找答案,但似乎没有人知道我的情况,所以我们开始吧

我有一个使用SpringMVC的新webapp。大多数应用程序(99%)都是纯REST,因此它没有“视图”,而是简单地将JSON发送回网络,或者发送错误的备用HTTP状态等

例外是登录页面,它需要是一个实际的JSP,但不知何故,我用来映射REST控制器的配置使我处于正常JSP映射失败的状态

以下是我得到的:

在my dispatcher servlet配置中,相关部分包括:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>
我的“家庭控制器”,看起来就像这样:

@Controller
@RequestMapping(value = "/api/user")
public class BlahBlahController {...
@Controller
@RequestMapping(value = "/")
public class HomeController extends AbstractController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
        return new ModelAndView("login");
    }
}
当我点击“/”url时触发,但我在日志中得到此错误:

WARNING: No mapping found for HTTP request with URI [/WEB-INF/pages/login.jsp] in DispatcherServlet with name 'spring-dispatcher'
现在我明白了它的意思,它不知道如何解析
/WEB-INF/pages/login.jsp
(顺便说一句,这个页面确实存在),但我被困在如何修改东西才能让它工作

我对它应该如何工作有点困惑。有人找到线索了吗


谢谢。

将RequestMapping放在方法级别,我尝试了我的代码,它成功了。如果您使用@Controller并具有适当的“上下文:组件扫描”,则不需要定义HomeController bean

如果您只想重定向所有“/”访问的登录视图,也可以使用下面的代码



从github签出项目以获取有用的参考资料。

确定。。我找到了答案,这是dispatcher配置中的url模式

而不是:

<servlet-mapping>
    <servlet-name>spring-dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

春季调度员
/*
应该是

<servlet-mapping>
    <servlet-name>spring-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

春季调度员
/
实际上,我在别处找到了这个答案,并尝试了一下,但“认为”它不起作用,然后意识到我认为这与根本原因无关的原因


不知道为什么这会起作用而另一个不会。。但是一次解决一个问题…

我不确定这是否重要,但是为什么定义了两次视图解析器?另外,您的
家庭控制器
是用
@组件
而不是
@Controller
注释的。。英雄联盟是的,复制品是个错误。。不应该像你说的那样重要。@Component/@Controller的区别很明显,我将更改,然后再试一次。(后期编辑以在问题仍然存在时删除这些错误)因此。。如果没有,我将得到以下错误:在中找不到URI为[/]的HTTP请求的映射。。。通过映射,我得到了与以前相同的错误:没有找到URI为[/WEB-INF/pages/login.jsp]的HTTP请求的映射。。。我讨厌有那个xml配置。。我希望一切都是注释驱动的,但不管它对我还是不起作用。如果您已经为另一个控制器设置了注释,那么您也应该能够为HomeController设置注释。控制器是否在同一个包中?必须设置对正确包的扫描吗?控制器启动,这不是问题。问题是找不到它转发到的JSP。正如我在前面的评论中提到的,问题不在于找不到控制器,而是它启动了。问题是找不到它转发到的JSP。在DispatcherServletWell中找不到URI为[/WEB-INF/pages/login.jsp]的HTTP请求的映射。您已经正确地修改了我错过的url模式。您可能会欣赏spring的易用性,只需添加您不需要编写任何控制器的提示。邮局的管理员只是一个例子。这里有更多的代码,但我认为显示问题发生的精确条件可能很重要。我确实在其他地方使用了视图控制器元素,我同意它确实非常有用。
@Override
@RequestMapping(value = "/") 
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
    return new ModelAndView("login");
}
<mvc:view-controller path="/" view-name="login"/>
<servlet-mapping>
    <servlet-name>spring-dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>spring-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>