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代码

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

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

Html代码

  1. <link rel="stylesheet" href="style/css/index.css" type="text/css"
  2. media="screen" charset="utf-8" />
  3. <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代码

  1. 结构:
  2. WebRoot
  3. |
  4. common
  5. |
  6. css
  7. |
  8. common.css
  9. |js
  10. |common.js
  11. <link rel="stylesheet" type="text/css"
  12. href="<c:url value=‘/common/css/common.css‘ />" />
  13. <script language="javascript" type="text/javascript"
  14. src="<c:url value=‘/common/js/common.js‘/>"></script>
  15. 然后在jsp 页面中用<c:url>的方式导入css 就永远没有存在跳转后css 无效了,同理js 也一样
时间: 2024-10-10 14:39:19

Struts2中的路径问题总结的相关文章

Struts2中 Path (getContextPath与basePath)

struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径. 虽然可以用redirect方式解决,但redirect方式并非必要.解决办法非常简单,统一使用绝对路径.(在jsp中用request.getContextpath方式来拿到webapp的路径)或者使用myeclipse经常用的,指定basePath 例子: <?xml version="1.0" encoding="GB18030" ?> <%@

Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中

struts2的关于method="{1}"意思详解 <action   name= "Login_* "   method= "{1} "   class= "mailreader2.Login ">中Login_*带*是什么意思?method= "{1} "带{}这个是什么意思?====================================================name=

struts2中如何根据请求路径定位到详细的访问action

在struts2中在访问一个菜单链接时,我们只需要将相应的package 命名空间和 action的name进行组合,并加上相应的后缀,就可以直接访问到相应的Action了,那么这个过程是如何进行的,多个相同命名空间的 package是如何满足互不冲突的呢,这就需要详细了解struts2中是如何解析路径信息,并根据访问路径寻找相应的action配置了. 整个过程我们可以分成以下几个步骤进行处理 解析xml,将所有可以访问到的路径信息进行保存 根据访问请求信息,取其中可用的路径 根据路径进行查找,

Struts2中使用Velocity模板时模板资源路径配置问题

在Struts2中使用Velocity模板时,如何以相对与Web工程的路径来配置模板资源文件路径这个问题网上千篇一律的来自Velocity官方文档.官方文档中指出如果是Web工程的话,模板的相对路径是工程根路径,今天在使用的时候有如下配置: Velocity.properties(默认在WEB-INF下): resource.loader =file, classclass.resource.loader.description = Velocity Classpath Resource Loa

struts2中struts.xml配置文件详解

struts.xml的常用配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts

struts2中的文件上传和下载

天下大事,必做于细.天下难事,必作于易. 曾经见过某些人,基础的知识还不扎实就去学习更难的事,这样必然在学习新的知识会很迷惑结果 再回来重新学习一下没有搞懂的知识,这必然会导致学习效率的下降!我写的这篇上传和下载都很基础. 十分适合初学者! jsp:页面 <!--在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时二进制文件可能会很大,还有就是enctype属性,这个属性一定要写成multipart/form-data, 不然就会以二进制文本上传到服务器端--> <for

struts2中的拦截器

一  AOP思想: 面向切面编程的思想 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. AOP 是一个概念,一个规范,本身并没有设定具体语言的实现,这实际

Struts2中UI标签之表单标签介绍

1.在Struts2中UI标签的表单标签分为两种:form标签本身和单个表单标签. 2.Struts2表单标签包括:form.textfield.password.radio.checkbox.checkboxlist.select.doubleselect.combobox.optiontransferselect.optgroup.updownselect.textarea.hidden.file.label.submit.token.head.datepicker.reset.richte

文件上传插件Uploadify在Struts2中的应用,完整详细实例

->最近由于项目需要使用到一个上传插件,在网上发现uploadify挺不错,所以决定使用它,但是官网文档和例子是php的,而项目是SSI框架的,所以自己对uploadify在struts2中的使用进行了一番研究,最终实现了.发现网上关于这方面的资料很少,而且有的一两篇例子还不大全,网友提问质疑很多,所以,下面我特将我的代码公布: --------------------------------------------------------------------- 步骤一: 到官网上下载upl