Struts2中的路径问题总结

     Struts2 中路径问题是一个棘手的问题,初学时经常被路径问题搞得很烦,通过网上查找资料和自己实战中遇到的问题今天来对 Struts2 中的路径问题来一个总结,当然可能不会很完整,不过后续会进行补充:

1.   Struts2 一个要匹配路径的地方就是在处理完请求之后对页面进行分发的时候,也就是 result 元素里面的内容。

假设项目名为 Struts2

在地址栏中访问 actionURL 基本是以 http://localhost:8080/Struts 开头

比如 <action name="home" class="test.HomeAction" namespace="/">

        <result name="success"> 要访问的 jsp 页面 /result>

</action>

这里有两种方式来写要访问的 jsp 页面,一种加“ / ”,另一种是不加“ / ”。

1) jsp 页面写成 /Pages/path.jsp, 那么就会从项目的根路径中开始找也就是,也就是 Struts 所在的根目录,在一层一层的下去找。

2) jsp 页面写成 Pages/path.jsp, 那么就会从当前路径开始找 ( 注意当前路径是指当前访问者请求的目录 ) ,在这个例子中的我们是通过请求 action ,进而间接访问到 jsp 文件的,所以当前路径应该就是 action 所在的路径,在本例中也就是 http://localhost:8080/Struts ,从这里可以看到当前路径就是根路径,所以两种方式都可以访问到 jsp 页面,如果当前路径不是根路径那么情况就不同了。

 

总结:为了不出错,建议加上“ / ”。

 

 

2. 在页面中涉及到匹配路径的问题,在这里我们要弄清楚一个小知识点:在 jsp 页面中“ / ”指的是整个站点根路径也就是这里的“ http://localhost:8080/, 而不是 webapps 所在的根路径。

在页面中涉及到的路径问题,看似很复杂,但是解决起来很简单。就是统一用绝对路径,

jsp 文件中可以这样写来统一路径:

<%

String contextPath=request.getContextPath();

String basePath=requset.getScheme()+"://"+requset.getServerName()+":"+

request.getServerPort()+path+"/";

%>

 

<head></head> 中写成这样

<base herf="<%=basePath>">

这说明在该页面中的所有路径都是于项目的 WebRoot 为相对路径,如项目的 WebRoot 下的 Images/xxx.jpg , 在页面中就直接这样访问。

在页面中的路径问题看似很复杂,但是解决起来相当的简单。

注意:路径最后有“ / ”。

比如

在地址栏中输入 http://localhost:8080/Struts2/path/path.action 访问到了 my.jsp

my.jsp 的页面中有这样的一个链接: < a href="index.jsp"> 并且两者在同一个目录下,按道理说直接点就可以访问的,但是事实上访问不到,地址栏中变成

http://localhost:8080/Struts2/path/index.jsp ,为什么为变成这样呢?因为:在 my.jsp 页面里它不会去看 jsp 的真正路径在哪里,它只会去看这个 jsp 映射到我们的服务器的 URL 地址。

所以访问就不成功。

 

   总之,用了struts2来实现跳转的话想对的就是地址栏中action的访问地址,是以这个地址为标准的。这里强调一下

<base href=”<%=basePath%>”/> 

 这个意思是指这个jsp页面里所有的<a href=“”/>连接都会在前面加上basePath,不仅仅是这对于<head></head>中的:

<link rel="stylesheet" href="style/css/index.css" type="text/css"
			media="screen" charset="utf-8" />
<script src="style/js/jquery.js" type="text/javascript"></script>

 也是起作用的。

 

    我在网上看到有个使用这样解决的,这里也记录一下:

结构:
	WebRoot
	|
	 common
	 |
	  css
	  |
           common.css
         |js
           |common.js


	<link rel="stylesheet" type="text/css"
			href="<c:url value='/common/css/common.css' />" />

		<script language="javascript" type="text/javascript"
			src="<c:url value='/common/js/common.js'/>"></script>

然后在jsp 页面中用<c:url>的方式导入css 就永远没有存在跳转后css 无效了,同理js 也一样
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值