Spring MVC静态资源拦截(No mapping found for HTTP request with URI in DispatcherServlet with name ' ')问题

本文探讨了在使用SpringMVC框架时遇到的静态资源加载问题,详细解析了DispatcherServlet配置不当导致的问题及三种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序加载或用浏览器访问静态资源时出现以下的警告:

No mapping found for HTTP request with URI [/] in DispatcherServlet with name ”

问题原因:默认的访问的URL都会被DispatcherServlet所拦截,从web.xml下对spring mvc的DispatcherServlet请求url映射的配置可以看出,具体配置如下:

<servlet>
        <servlet-name>hello-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/application.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
<url-pattern>/</url-pattern>

url-pattern使用的是/,而不是/,如果使用/,那么请求时可以通过DispatcherServlet转发到相应的Action或者Controller中的,但是返回的内容,如返回的jsp还会再次被拦截,这样导致404错误,即访问不到jsp。所以如果以后发现总是有404错误的时候,别忘了check一下 url-pattern的配置是否是/*.

那么如何访问自己需要的静态资源文件呢?
解决方案一(告诉spring 静态资源的处理方式):

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

解决方案二:

<servlet>
        <servlet-name>hello-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/application.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello-dispatcher</servlet-name>
        <url-pattern>/.jsp</url-pattern>
    </servlet-mapping>

告诉spring mvc只拦截对于某一类文件的请求,比如上面配置的只拦截对于后缀为jsp文件的访问。
解决方案三:

    <servlet>
        <servlet-name>hello-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/application.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>

告诉spring mvc 对于后缀为js的文件是可以访问的。依次类推,需要访问其他资源文件时可以通过servlet-mapping追加。

作者:jiankunking 出处:http://blog.youkuaiyun.com/jiankunking

### Spring MVC 使用指南及常见问题解决 #### 1. Spring MVC 基本概念 Spring MVCSpring 框架中的一个重要模块,专门用于开发 Web 应用程序。其核心设计理念基于 MVC(Model-View-Controller)架构模式,通过将应用逻辑划分为模型(Model)、视图(View)和控制器(Controller),从而实现代码的高可读性和易维护性[^2]。 #### 2. Spring MVC 环境搭建 要成功运行一个 Spring MVC 项目,通常需要完成以下几个方面的配置: - **引入依赖** 需要在项目的 `pom.xml` 文件中添加必要的 Maven 依赖项,例如 Spring Web 和 Servlet API。 ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.9</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> ``` - **配置 DispatcherServlet** 在 `web.xml` 中定义前端控制器 `DispatcherServlet` 并指定初始化参数。 ```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>/</url-pattern> </servlet-mapping> ``` - **编写 Controller 类** 创建一个带有 `@Controller` 注解的类,并使用 `@RequestMapping` 映射 URL 请求到具体方法。 ```java @Controller public class HelloController { @RequestMapping("/hello") public String hello(Model model){ model.addAttribute("message", "Welcome to Spring MVC!"); return "hello"; } } ``` - **配置视图解析器** 在 `dispatcher-servlet.xml` 或其他 Spring 配置文件中声明视图解析器。 ```xml <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` #### 3. 常见问题及其解决方案 ##### (1) 页面无法找到对应的 Handler 方法 当控制台报错显示 `No mapping found for HTTP request with URI [...]` 时,通常是由于未正确映射请求路径或缺少静态资源处理器引起的[^3]。可以通过以下方式解决问题: - 确认 `@RequestMapping` 路径与实际访问地址一致。 - 如果启用了全局拦截 `/` 的功能,则需在 XML 配置中加入 `<mvc:default-servlet-handler/>` 来支持静态资源加载。 ##### (2) JSP 页面找不到 如果浏览器返回 404 错误,可能是因为 JSP 文件被放置到了错误的位置。按照惯例,JSP 文件应存放在 `WEB-INF/views/` 下面,并由视图解析器负责渲染[^3]。 ##### (3) 数据传递失败 数据未能正常传入页面可能是 Model 属性绑定不成功的缘故。建议检查是否调用了 `model.addAttribute()` 方法并验证属性名称拼写无误。 --- ### 示例代码片段 以下是完整的 Spring MVC 控制器示例: ```java @Controller public class UserController { @RequestMapping(value = "/user/{id}", method = RequestMethod.GET) public String getUserById(@PathVariable Long id, Model model) { User user = new UserService().findUserById(id); model.addAttribute("user", user); // 将对象放入 Model return "showUser"; // 返回视图名 } } ``` ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值