`
tianhandigeng
  • 浏览: 374247 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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的访问地址,是以这个地址为标准的。这里强调一下

<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 也一样
 
分享到:
评论
4 楼 09108082 2011-06-02  
绝对路径就是王道
3 楼 lsf_demo 2011-03-10  
路过此地...
2 楼 dwbin 2011-02-17  
我觉得最关键的就是这一句String contextPath=request.getContextPath();
搞明白了什么叫做contextPath就什么都明白了。我对这个的解释叫做上下文路径,容器路径,web标准里面取到后台的URL是容器路径之后的部分。
1 楼 akunamotata 2011-02-17  
引用
这个意思是指这个jsp页面里所有的<a href=“”/>连接都会在前面加上basePath,不仅仅是这对于<head></head>中的:



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

相关推荐

    struts2学习笔记总结

    在Struts2中,Model通常由业务对象(BO)或数据访问对象(DAO)组成,View负责展示数据,Controller(Action)处理用户请求并调用Model更新数据,再将结果传递给View。 三、配置与拦截器 1. 配置:Struts2的配置...

    struts2学习笔记(完美总结)——转自OPEN经验库

    OGNL是Struts2中用于对象属性访问和表达式语言,它允许在Action、ValueStack和视图层之间传递数据。ValueStack是一个对象栈,它持有ActionContext上下文中的所有对象,包括Action实例、ActionForm、Session、Request...

    Struts2知识点总结

    以上是对Struts2框架基础知识点的总结,实际开发中还需要了解更多的高级特性,如自定义拦截器、动态方法调用、文件上传下载、异常处理策略等。通过这些知识,新手可以快速上手并熟练掌握Struts2框架的使用。

    Struts2课堂学习总结

    5. **命名空间(Namespace)**:命名空间是Struts2中组织Action的重要机制,它决定了Action的访问URL。默认为空字符串,可自定义如`/`、`/module1`等,帮助划分不同功能模块的Action。 6. **Action**:Struts2的一...

    struts2框架源码分析及问题汇总

    本文将深入剖析Struts2的源码,揭示其工作原理,并汇总常见问题,帮助开发者更好地理解和使用这个框架。 一、Struts2框架基础 1. 框架结构:Struts2的核心组件包括Action、Result、Interceptor(拦截器)等。...

    Struts2初步使用总结

    在Struts2中,所有的Action调用都是通过`ActionProxy`来完成的。 通过以上内容,我们可以看到Struts2是一个功能强大且易于使用的Java Web开发框架,它简化了Web应用程序的开发过程,使开发者能够更专注于业务逻辑的...

    Struts2中实现文件下载(修正中文问题).pdf

    总结来说,Struts2中实现文件下载的关键在于正确配置`struts.xml`,使用`stream`类型的结果,并处理好`Content-Disposition`中的文件名编码。对于中文文件名,需要在Action中提供编码转换的方法,并在配置文件中引用...

    struts2配置文件改变位置问题

    在Struts2中,`struts.xml`文件是核心配置文件,它定义了动作、结果、拦截器等关键组件。在默认情况下,`struts.xml`通常位于`src/main/resources`或在Web应用中是`WEB-INF/classes`目录下。 在描述的问题中,...

    struts2中导入类库时需要注意的问题

    总结来说,为了成功地在Struts2中进行web开发,你需要从struts-2.2.11-all.zip中选取特定的jar包导入,并且不要忘记从示例应用程序中提取`javassist-3.7.ga.jar`。完成这些步骤后,你应该能避免因类库缺失或不完整而...

    Struts 2常用jar包

    在Struts 2中,OGNL作为默认的数据绑定和表达式语言,用于在Action、值栈和视图之间传递数据。 4. **freemarker.jar**:FreeMarker是一个模板引擎,用于生成动态HTML、XML或其他文本格式的输出。Struts 2支持多种...

    Struts1和Struts2区别

    总结起来,Struts2在设计和功能上都比Struts1有所改进,提供了更好的灵活性、可扩展性和易用性。然而,这并不意味着Struts1没有它的价值,对于一些简单项目或已有大量Struts1代码的项目,继续使用Struts1可能是更...

    Struts2Path

    本文将重点讨论Struts2中的相对路径问题,并通过具体的例子来解析不同情况下路径的配置方法。 #### 二、Struts2框架中的路径配置方式 在Struts2框架中,路径配置主要涉及以下几种方式: 1. **HTML `&lt;a&gt;` 标签与 `...

    struts2学习心得

    本文总结了Struts2的常用方法和经验,涵盖了配置问题、EL表达式、Struts2的架构和Namespace等方面的知识点。 一、配置问题 Struts2的最新版本为GA 2.2.1,需要以下几个类库: 1.commons-fileupload-1.2.1.jar 2....

    K8_Struts2_EXP S2-045 & 任意文件上传 20170310

    标题中的“K8_Struts2_EXP S2-045 & 任意文件上传 20170310”指的是一个与Struts2框架相关的安全漏洞,具体为S2-045漏洞,该漏洞允许攻击者进行任意文件上传。20170310可能是漏洞被发现或公开的日期,也可能是指该...

    Struts2中使用displaytag标签总结

    这篇博客文章《Struts2中使用displaytag标签总结》很可能是讨论如何在Struts2框架下集成并利用DisplayTag库来高效地处理表格显示。 DisplayTag标签库包括一系列自定义JSP标签,这些标签能够帮助开发者快速创建美观...

    Struts2学习小结

    3. **路径问题**:在 Struts2 中,路径是根据 Action 的路径而非 JSP 的路径来确定的,因此建议使用绝对路径。 - 使用内置标签或脚本语言来获取绝对路径:`(); String basePath = request.getScheme() %&gt;` 以上是...

    Struts2注解开发jar

    本知识点将详细介绍Struts2中的注解开发及其核心组件。 标题提到的"Struts2注解开发jar"主要指的是`struts2-convention-plugin`,这是一个Struts2的插件,它的主要作用是支持基于约定优于配置(Convention over ...

Global site tag (gtag.js) - Google Analytics