Spring MVC中静态资源访问不了
2018-03-26 15:10
218 查看
问题描述:在SpringMVC工程中需要使用到一些静态资源,比如css,js等访问不了,在浏览器中访问会出现404错误错误原因:路径问题,或者由于配置了 <servlet>
<description>分发器</description>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<description>Spring MVC 配置文件</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping><url-pattern>/</url-pattern>会拦截所有URL,包括静态资源,导致静态资源访问不了修正方式:参见www.baidu.com(这里不重复讲述,百度出来的三种方法还是有效的)注意: 下面讲述我的工程出现这个问题的真正原因
错误原因:路径问题。
在程序中的jsp页面中,使用的路径形如/static/pages/css/xxx.css时,这个路径相对的是http://localhost:8080。也就是说xxx.css的路径是http://localhost:8080/static/pages/css/xxx.css,这就导致了xxx.css文件访问不了(因为路径中缺少了工程名) 而使用static/pages/css/xxx.css(前面没有/)时,每次请求都是相对于上次的请求的(是吧?)比如在控制器中有一个形如
@Controller
@RequestMapping("/mainFrame")
public class IndexController {
private static String indexPage = "pages/index";
@RequestMapping(value = "/index")
public String index(HttpServletRequest request, Model model) {
return indexPage;
}
}时,要访问index.jsp的话,里面的static/pages/css/xxx.css的路径就变成了 http://localhost:8080/ProjectName/mainFrame/index/static/pages/css/xxx.css(感觉,不知道是哪里设置的不对) 出现这个问题的原因是在JSP页面中缺少了<base href="<%=basePath%>">
修正方式:在所有的(使用了形如static/pages/css/xxx.css路径的)JSP页面中添加<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>以及<base href="<%=basePath%>">之后该JSP页面中的路径将相对于basePath(应该是http://127.0.0.1:8080/ProjectName/吧?)
备注:该文是我在学习JavaEE时遇到问题的备忘录,只针对我创建的工程遇到的问题!!!
<description>分发器</description>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<description>Spring MVC 配置文件</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping><url-pattern>/</url-pattern>会拦截所有URL,包括静态资源,导致静态资源访问不了修正方式:参见www.baidu.com(这里不重复讲述,百度出来的三种方法还是有效的)注意: 下面讲述我的工程出现这个问题的真正原因
错误原因:路径问题。
在程序中的jsp页面中,使用的路径形如/static/pages/css/xxx.css时,这个路径相对的是http://localhost:8080。也就是说xxx.css的路径是http://localhost:8080/static/pages/css/xxx.css,这就导致了xxx.css文件访问不了(因为路径中缺少了工程名) 而使用static/pages/css/xxx.css(前面没有/)时,每次请求都是相对于上次的请求的(是吧?)比如在控制器中有一个形如
@Controller
@RequestMapping("/mainFrame")
public class IndexController {
private static String indexPage = "pages/index";
@RequestMapping(value = "/index")
public String index(HttpServletRequest request, Model model) {
return indexPage;
}
}时,要访问index.jsp的话,里面的static/pages/css/xxx.css的路径就变成了 http://localhost:8080/ProjectName/mainFrame/index/static/pages/css/xxx.css(感觉,不知道是哪里设置的不对) 出现这个问题的原因是在JSP页面中缺少了<base href="<%=basePath%>">
修正方式:在所有的(使用了形如static/pages/css/xxx.css路径的)JSP页面中添加<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>以及<base href="<%=basePath%>">之后该JSP页面中的路径将相对于basePath(应该是http://127.0.0.1:8080/ProjectName/吧?)
备注:该文是我在学习JavaEE时遇到问题的备忘录,只针对我创建的工程遇到的问题!!!
相关文章推荐
- Spring MVC 访问静态资源
- spring mvc 配置对静态资源的访问
- SSM框架 Spring MVC对静态资源的访问 图片等
- Spring4 Spring MVC实战(三)——Spring MVC不通过xml配置访问HMTL和其他静态资源
- Spring MVC 静态资源访问 mvc:resources 标签
- Spring4 Spring MVC实战(三)——Spring MVC不通过xml配置访问HMTL和其他静态资源
- 【转】Spring Mvc Web 配置拦截规则与访问静态资源
- 解决Spring MVC整合Shiro出现无法访问静态资源文件的问题
- Spring MVC 静态资源访问
- spring mvc 访问静态资源的方式
- spring mvc静态资源访问的配置
- Spring MVC访问静态资源的方法
- Spring MVC访问不到静态资源
- Spring MVC配置静态资源的正常访问
- Spring Mvc Web 配置拦截规则与访问静态资源 (三)
- spring mvc访问静态资源的三种方式
- spring MVC静态资源映射访问不到
- Spring MVC的配置访问静态资源的三种方案
- 解决spring mvc静态资源无法访问的问题
- Spring MVC访问静态资源