职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 540|回复: 4

Struts2中的路径问题总结

[复制链接]
只学java 发表于 2011-8-23 09:58 | 显示全部楼层 |阅读模式
Struts2中路径......
引用 这个意思是指这......
我觉得最关键的就是这......
绝对路径就是王道......
看了只能让人更不能理......


      Struts2 中路径问题是一个棘手的问题,初学时经常被路径问题搞得很烦,通过网上查找资料和自己实战中遇到的问题今天来对 Struts2 中的路径问题来一个总结,当然可能不会很完整,不过后续会进行补充:
1.   Struts2 一个要匹配路径的地方就是在处理完请求之后对页面进行分发的时候,也就是 result 元素里面的内容。
假设项目名为 Struts2
在地址栏中访问 action 时 URL 基本是以 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的访问地址,是以这个地址为标准的。这里强调一下
Html代码  
<base href=”<%=basePath%>”/>   

<base href=”<%=basePath%>”/>  这个意思是指这个jsp页面里所有的<a href=“”/>连接都会在前面加上basePath,不仅仅是这对于<head></head>中的:
Html代码  
<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>  

<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>
也是起作用的。

    我在网上看到有个使用这样解决的,这里也记录一下:
Java代码  
结构:   
    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 也一样  

结构:
        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 也一样  

木已 发表于 2011-8-23 09:58 | 显示全部楼层
引用
这个意思是指这个jsp页面里所有的<a href=“”/>连接都会在前面加上basePath,不仅仅是这对于<head></head>中的:



那我要是这个链接是其他webapp下的呢?

有烟没火 发表于 2011-8-23 09:58 | 显示全部楼层
我觉得最关键的就是这一句String contextPath=request.getContextPath();
搞明白了什么叫做contextPath就什么都明白了。我对这个的解释叫做上下文路径,容器路径,web标准里面取到后台的URL是容器路径之后的部分。

broken 发表于 2011-8-23 09:58 | 显示全部楼层
绝对路径就是王道

叫我小乖 发表于 2011-8-23 09:59 | 显示全部楼层
看了只能让人更不能理解
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-9 15:19 , Processed in 0.112621 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表