Spring MVC中静态资源访问不了

8 篇文章 0 订阅

问题描述:在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时遇到问题的备忘录,只针对我创建的工程遇到的问题!!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值