Spring MVC 无法正确配置 Dispatcher Servlet

Posted

技术标签:

【中文标题】Spring MVC 无法正确配置 Dispatcher Servlet【英文标题】:Spring MVC Can't configure Dispatcher Servlet right 【发布时间】:2015-07-06 16:19:18 【问题描述】:

我在为 Spring 配置 Dispatcher 时遇到问题。我想要实现的是:

构建 REST WebService 以接收请求 让 html + Ajax 页面消耗数据(因此,我的 Spring 项目中没有视图)

到目前为止,我只有 2 个 HTML 页面:登录(使用 j_security_check)和主页。两者都非常简单。我也有一个简单的控制器:

MainController.java

@RestController //Or @Controller and @ResponseBody, no difference, right?
public class MainController 

    @RequestMapping("rest/main/data")
    public String getData () 
        return "data: \"DATA HUEHUE\""; // Yes, I'm brazilian
    


我已经为 web.xml 和 dispatcher-servlet.xml 尝试了以下配置:

web.xml:

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

调度程序-servlet.xml

<context:component-scan base-package="com.example.controller"/>

这不起作用。我收到消息INFO: Mapped URL path [/rest/main/data] onto handler 'mainController',但是当我尝试访问时,我收到No mapping found for HTTP request with URI [/myapp/rest/main/data] in DispatcherServlet with name 'dispatcher'

我也试过了:

在 web.xml 上:&lt;url-pattern&gt;/&lt;/url-pattern&gt; 在 dispatcher-servlet 上:相同 发生了什么:控制器 DID 工作,但应用程序也尝试映射我的 login.html 并且找不到匹配项,所以我得到 404 ;-;

我知道使用前缀和后缀的“标准”配置,但由于我在这里没有意见,我认为这不是正确的方法。 我是 Spring 的新手(您可能已经注意到了),所以请对答案保持温和。

有什么想法吗?

提前致谢:)

我的项目树:

-project
--src
---main
----webapp
-----WEB-INF
------web.xml
------weblogic.xml
------dispatcher-servlet.xml
-----www
------main.html
-----login.html

(登录在www之外)

【问题讨论】:

dispatcher-servlet.xml 中的 handlerMapping 在哪里。所以请在问题中提供完整的dispatcher-servlet.xml 【参考方案1】:

如果您将控制器代码修改为具有/rest/main/data,则第一种方法将起作用。

@RestController //Or @Controller and @ResponseBody, no difference, right?
public class MainController 

    @RequestMapping("/rest/main/data")
    public String getData () 
        return "data: \"DATA HUEHUE\""; // Yes, I'm brazilian
    


在第二种方法中发生的情况是,由于您配置了 Spring Security,因此您需要先进行身份验证,但为此它会找到 Login.html 并且找不到它。这可能是因为配置不正确。

【讨论】:

嗨,Shazin,谢谢。我试过你说的,在rest之前放一个/,但还是不行。我收到了同样的信息。 URL 路径已映射,但是当我尝试访问它时说没有找到该 URL 的映射。 :/我什至清理了项目。关于第二种方法,我不认为是你所说的情况。实际上我重新检查了,我可以访问我的 login.html 页面。当我尝试访问我的主页时,我得到了No mapping found for HTTP request with URI [/trackmydata/www/main.html] in DispatcherServlet with name 'dispatcher'我用我的项目树更新了上面的帖子

以上是关于Spring MVC 无法正确配置 Dispatcher Servlet的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc配置文件不能识别是啥原因?

Spring MVC:无法渲染视图 - $ 正在视图中渲染

在使用带有JSP页面的Spring MVC时获得错误500

对于没有 XML 的 Spring MVC 中的双调度程序配置,URL 映射无法按预期工作

Swagger Gradle 插件在构建期间没有为 spring mvc 正确生成 openapi.json 文件

Spring配置文件无法解析正确的文件