`
wangjie2013
  • 浏览: 174150 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

springMVC 请求404错误或静态资源无法访问

阅读更多

问题:springMVC 请求404错误或静态资源无法访问。

在web.xml中我们一般这样配置:

 

<!-- 默认所对应的配置文件是WEB-INF下的{servlet-name}-servlet.xml,这里便是:spring3-servlet.xml -->
	<servlet>
		<servlet-name>spring3</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring3</servlet-name>
		<!-- 这里可以用 / 但不能用 /*, "/"拦截了所有请求会导致静态资源无法访问,所以要在spring3-servlet.xml中配置mvc:resources -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>

    使用<url-pattern>/</url-pattern>可以实现rest风格,但是会拦截了所有的请求导致静态资源无法访问(解决方法后面说),<url-pattern>/</url-pattern>使用的是/,而不是/*,如果使用/*,那么请求时可以通过DispatcherServlet转发到相应的Action或者Controller中的,但是返回的内容,如返回的jsp还会再次被拦截,这样导致404错误,即访问不到jsp。所以如果以后发现总是有404错误的时候,别忘了check一下<url-pattern>/</url-pattern>的配置是否是/*.

 

    当然,如果你使用*.do、*.xhtml等就不会出现静态资源无法访问问题。

 

静态资源无法访问解决方案:

 

1,在spring3-servlet.xml中添加一下配置:

 

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

    使用<mvc:resources/>元素,把mapping的URI注册到SimpleUrlHandlerMapping的urlMap中,key为mapping的URI pattern值,而value为ResourceHttpRequestHandler,这样就巧妙的把对静态资源的访问由HandlerMapping转到ResourceHttpRequestHandler处理并返回,所以就支持classpath目录,jar包内静态资源的访问.

    另外需要注意的一点是,不要对SimpleUrlHandlerMapping设置defaultHandler.因为对static uri的defaultHandler就是ResourceHttpRequestHandler,
否则无法处理static resources request.

    如果加上以上配置还是不成功,检查一下是不是没有配置:

 

<mvc:annotation-driven/>

 

 

  2,在spring3-servlet.xml中添加一下配置:

 

<mvc:default-servlet-handler/>

 会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回.

 

DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet.

 

    推荐使用 *.do 或 方案2,如果你访问一个网站的默认主页(也就是web.xml中配置的welcome-file)index.jsp,一般我们可以类似这样访问:http://localhost:8080/apprecommend-web/会自动跳转到http://localhost:8080/apprecommend-web/index.jsp,如果使用方案1,就不能这样访问了,因为spring会拦截所有的请求,但是拦截到的/apprecommend-web/没有匹配的处理action,而且就直接返回404,不再处理了,如果使用方案2,还会由DefaultServletHttpRequestHandler去调用Servlet容器自己的默认Servlet进行处理,然后返回。

分享到:
评论

相关推荐

    SSM登录案例之404资源无法访问的解决

    这里我为了熟悉SSM框架,在学习完SpringMVC后开始上手一个比较好练手的login项目,于是随便写了点代码然后运行tomcat后发现了这个资源404错误,我猜测肯定是路径的问题,后来在网上找了很多解决方法,发现都不太适应...

    详解springmvc拦截器拦截静态资源

    然而,如果不正确地配置,拦截器可能会错误地拦截到静态资源,如 CSS、JavaScript 和图片等,导致页面加载缓慢或者功能异常。 静态资源通常是应用程序中不会经过后端处理的文件,它们通常存储在特定的目录下,如 `/...

    SpringMVC访问静态资源的三种方式小结

    在Spring MVC的`DispatcherServlet`拦截所有请求(例如`/`)的情况下,静态资源可能会被拦截导致404错误。为了解决这个问题,可以配置Tomcat或其他应用服务器的默认Servlet来处理特定类型的静态文件,如`.jpg`、`.js...

    SpringBoot静态资源处理共5页.pdf.zip

    在SpringBoot中,静态资源的处理默认由SpringMVC的`ResourceHandlerRegistry`进行。以下是一些关键知识点: 1. **默认配置**:SpringBoot默认将`src/main/resources/static`、`src/main/resources/public`或`src/...

    Spring+SpringMVC用户角色管理系统.zip

    总之,"Spring+SpringMVC用户角色管理系统"是一个涉及用户登录、角色管理和权限控制的Web应用,使用了Spring和SpringMVC框架,结合JSP作为视图层,利用静态资源目录提供前端展示,通过错误页面处理可能出现的问题。

    SpringMVC架构的项目 js,css等静态文件导入有问题的解决方法

    所以,如果你的静态资源如js、css文件放在`WEB-INF/js`或`WEB-INF/css`目录下,浏览器将无法直接访问到它们。 解决这个问题的方法是将静态资源移到不受保护的目录,比如`WebContent`(在一些IDE中可能是`src/main/...

    SpringMVC拦截器例子详解

    - 拦截器不适用于静态资源,因为静态资源通常由Web服务器直接处理,不会经过Spring MVC的控制器。 - 拦截器不能访问Controller方法的返回值,但可以在`postHandle()` 方法中访问`ModelAndView` 对象,从而对视图...

    SpringMVC-02教案1

    为防止这种情况,可以在`springmvc.xml`配置文件中使用`&lt;mvc:resources&gt;`标签,定义哪些路径不需要被拦截,确保静态资源的正常访问。 - **发送和接收JSON数据**:SpringMVC支持通过配置处理器适配器和消息转换器来...

    (springMVC访问js和css)[参考].pdf

    然而,当DispatcherServlet配置为拦截所有请求(如`/`)时,静态资源(如JavaScript文件、CSS样式表以及图片等)也可能被其拦截,导致无法正确访问这些资源,从而引发404错误。 为了解决这个问题,有几种常见的解决...

    maven 多模块 +springMVC+MyBatis简单登陆

    - src/main/webapp:Web应用资源,如静态文件、JSP页面等。 - pom.xml:项目主配置文件,定义模块间的依赖关系。 总结,"maven 多模块 +springMVC+MyBatis简单登陆"项目是一个典型的Java Web应用实例,它展示了...

    springmvc拦截器实现登录验证

    例如,如果你希望所有需要登录的URL都受到拦截,可以配置拦截所有非静态资源的URL。 5. **例外处理**:考虑某些公共路径,如登录、注销等,可能需要对它们豁免拦截。这可以通过在`preHandle()`方法内进行额外的路径...

    springmvc_demo.7z

    13. **静态资源处理**:SpringMVC可以通过配置处理CSS、JavaScript和图片等静态资源的请求。 通过深入研究这些组件和它们之间的交互,你可以了解SpringMVC项目的基本架构和工作流程,这对于理解和构建自己的...

    Springmvc简单的修改删除表格

    1. **项目结构**:在 Spring MVC 项目中,通常包含以下几个核心目录:src/main/java(存放源代码),src/main/resources(存放配置文件),src/main/webapp(存放静态资源和Web应用文件)。 2. **Web.xml 配置**:...

    springmvc登录注册完整实例版

    - 一个标准的Spring MVC项目通常包括以下几个关键部分:`src/main/java`(包含业务逻辑和服务接口)、`src/main/resources`(配置文件和静态资源)、`src/main/webapp/WEB-INF`(web.xml和Spring MVC的配置文件)、...

    详解SpringMVC拦截器(资源和权限管理)

    当我们配置DispatcherServlet拦截所有请求时,静态资源(如JavaScript、CSS、图片等)也会被拦截,导致无法正常访问。为了避免这种情况,我们需要让默认Servlet来处理静态资源。有以下两种方法: - 使用`...

    SpringMvc学习

    为了能直接访问这些静态资源,需要在Spring MVC的配置中特别设置静态资源的处理规则。 七、请求映射到具体的Action方法 Spring MVC通过使用@RequestMapping注解(或者是基于方法的URL映射),可以将客户端的请求...

    登录注册简单模板(SpringMVC)

    - **src/main/webapp**:包含Web相关的资源,如JSP页面、静态资源(CSS、JS)以及WEB-INF目录下的web.xml。 2. **SpringMVC核心组件** - **DispatcherServlet**:前端控制器,负责接收请求,调度并分发到相应的...

    spring + springmvc + mybatis整合

    - `src/main/webapp`:存放Web应用相关的资源,如静态文件、JSP视图、WEB-INF下的web.xml等。 **注意事项**: 1. 配置文件中的namespace和id应保持唯一,以避免冲突。 2. 保证数据库驱动和其他依赖已正确添加至项目...

    springMVC注解开发代码

    在 `main` 下,Java 源代码位于 `java` 目录,资源文件如配置文件、静态资源等位于 `resources` 目录。Spring MVC 的核心配置文件 `dispatcher-servlet.xml`(或者使用 Java 配置类)通常在这里定义,它配置了视图...

Global site tag (gtag.js) - Google Analytics