今天突然遇到一个比较低级的错误,虽然不是大问题,但好记性不如烂笔头,(更何况我还没那么好的记性)以此来记录一下自己所踏过的坑,免得第二次遇到
项目中,在能正常启动的情况下,(不能启动的项目,肯定也遇不到这个问题了。)
因为jsp放到WEB-INF 下是为了防止别人不经过后台直接访问页面,但js ,css 和 image 是静态资源所以一般不用放在web-inf下。这个时候在jsp中引入js 一个不小心就出现问题了,下面是我在网上找的 和自己总结的一些引入js 的方法:
1.相对路径引入js文件:(以上图文件位置为例)
一般相对路径引入js,是在js 和jsp 都在webroot 下的时候。当jsp跨越web-inf去引入web-inf外 ,webroot下的js时,会出现一定的问题。(假如在上图中webroot下model中有model.jsp,那么引入js时可以使用相对路径)访问路径为:localhost:8080/bc/model/model.jsp ,引入代码如下:
<script src="../js/jquery-1.11.0.min.js"></script>
2.绝对路径引入js
当访问action,通过后台返回到jsp时,这个时候就需要绝对路径了
<script src="<%=basePath%>js/jquery-1.11.0.min.js"></script>
或
<script src="${pageContext.request.contextPath }/js/jquery-1.11.0.min.js"></script>
这个路径看了又看还是没有发现哪里有了问题,后来通过页面查看路径直接访问js。这个时候是无法访问的报路径出错,在网上又看到了别人说可能是被拦截了,(恍然大悟,我在web.xml中写的是 / )url-pattern 填写的规则:
1: *.do *.action 拦截以.do结尾的请求 (不拦截 jsp png jpg .js .css)
2: / 拦截所有请求(不拦截.jsp) 建议使用此种 方式 (拦截 .js.css .png) (放行静态资源)
3: /* 拦截所有请求(包括.jsp) 此种方式 不建议使用
我的web.xml文件:
<servlet>
<servlet-name>bc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 此处不配置 默认找 /WEB-INF/[servlet-name]-servlet.xml -->
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>bc</servlet-name>
<url-pattern> / </url-pattern>
</servlet-mapping>
我的web.xml 中使用的就是 / ,所以能访问到jsp,但css js 都被拦截了,无法访问,
把 / 改为*.action 即可
问题解决!!