博客背景:
在SSH项目开发的过程中,肯定会涉及css和js文件的引用,那么就涉及到了在Struts中的绝对路径和相对路径的问题了。像我一早上就吃了这个亏。现在把经验整理出来让大家看看。
一、相对路径
例如:
<`link` rel="stylesheet" type="text/css" href="ynjsp/img/image/hospital.jpg" />
相对路径是基于当前文件位置,通过ynjsp/img/image/hospital.jpg去寻找相应文件,注意这个路径前面是没有 / 的,但是在struts中被解释为相对于根目录的webapps下的路径,被服务器解释的地址为:
http://localhost:8080/YNGZJB/ynjsp/img/image/hospital.jpg
其中YNGZJB是项目名称。
二、绝对路径
绝对路径的引用格式:
/ynjsp/img/image/hospital.jpg
前面有 /
这个地址别服务器解释为:
http://localhost:8080/ynjsp/img/image/hospital.jpg
在struts中直接被解释为顶级目录,从而会导致404错误。
在项目中一个文件夹下的页面也许没事,相同的路径,所有的css/js文件都能显示出来,但是当一个jsp文件文件结构发生变化,比如将为与Ajsp中的index.jsp移到webapps目录下面,这时,在Ajsp下面的其它jsp页面,即使代码和其他文件结构都没有动,但是现在所有的原本在Ajsp中的所有页面都出现了css/js/image文件丢失的问题,这个也是困扰了我好久的原因,现在还没解决,有小伙伴能帮我吗?求大神解释!!!
在困扰了许久,我只有换了一种更为稳妥的方法,就是将所有的css/js/image文件目录都换成绝对路径,这样就不会有上述的烦恼了。
- 方法介绍:
我们可以在webapps下面定义一个名为inc的文件夹,在文件夹中定义一个constants.inc文件,在文件中通过struts标签将文件的目录进行定义,将他定义为常量,然后再jsp中就可以通过${}这样的形式将js和css以绝对路径的方式引入进jsp页面,这样就避免了上述的问题。
<s:set name="SERVELET_PATH" value="#request.get('javax.servlet.forward.context_path')"/>
<s:set name="URL_PATH" value="#request.get('javax.servlet.forward.context_path')"/>
<s:set name="JS_PATH" value="#URL_PATH+'/ynjsp/js/'"/>
<s:set name="IMAGE_PATH" value="#URL_PATH+'/ynjsp/img/'"/>
<s:set name="CSS_PATH" value="#URL_PATH+'/ynjsp/css/'"/>
在文件中使用struts标签别忘了引入struts标签哦。
<%@ taglib prefix="s" uri="/struts-tags" %>