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 也一样
分享到:
相关推荐
在Struts2中,Model通常由业务对象(BO)或数据访问对象(DAO)组成,View负责展示数据,Controller(Action)处理用户请求并调用Model更新数据,再将结果传递给View。 三、配置与拦截器 1. 配置:Struts2的配置...
OGNL是Struts2中用于对象属性访问和表达式语言,它允许在Action、ValueStack和视图层之间传递数据。ValueStack是一个对象栈,它持有ActionContext上下文中的所有对象,包括Action实例、ActionForm、Session、Request...
以上是对Struts2框架基础知识点的总结,实际开发中还需要了解更多的高级特性,如自定义拦截器、动态方法调用、文件上传下载、异常处理策略等。通过这些知识,新手可以快速上手并熟练掌握Struts2框架的使用。
5. **命名空间(Namespace)**:命名空间是Struts2中组织Action的重要机制,它决定了Action的访问URL。默认为空字符串,可自定义如`/`、`/module1`等,帮助划分不同功能模块的Action。 6. **Action**:Struts2的一...
本文将深入剖析Struts2的源码,揭示其工作原理,并汇总常见问题,帮助开发者更好地理解和使用这个框架。 一、Struts2框架基础 1. 框架结构:Struts2的核心组件包括Action、Result、Interceptor(拦截器)等。...
在Struts2中,所有的Action调用都是通过`ActionProxy`来完成的。 通过以上内容,我们可以看到Struts2是一个功能强大且易于使用的Java Web开发框架,它简化了Web应用程序的开发过程,使开发者能够更专注于业务逻辑的...
总结来说,Struts2中实现文件下载的关键在于正确配置`struts.xml`,使用`stream`类型的结果,并处理好`Content-Disposition`中的文件名编码。对于中文文件名,需要在Action中提供编码转换的方法,并在配置文件中引用...
在Struts2中,`struts.xml`文件是核心配置文件,它定义了动作、结果、拦截器等关键组件。在默认情况下,`struts.xml`通常位于`src/main/resources`或在Web应用中是`WEB-INF/classes`目录下。 在描述的问题中,...
总结来说,为了成功地在Struts2中进行web开发,你需要从struts-2.2.11-all.zip中选取特定的jar包导入,并且不要忘记从示例应用程序中提取`javassist-3.7.ga.jar`。完成这些步骤后,你应该能避免因类库缺失或不完整而...
在Struts 2中,OGNL作为默认的数据绑定和表达式语言,用于在Action、值栈和视图之间传递数据。 4. **freemarker.jar**:FreeMarker是一个模板引擎,用于生成动态HTML、XML或其他文本格式的输出。Struts 2支持多种...
总结起来,Struts2在设计和功能上都比Struts1有所改进,提供了更好的灵活性、可扩展性和易用性。然而,这并不意味着Struts1没有它的价值,对于一些简单项目或已有大量Struts1代码的项目,继续使用Struts1可能是更...
本文将重点讨论Struts2中的相对路径问题,并通过具体的例子来解析不同情况下路径的配置方法。 #### 二、Struts2框架中的路径配置方式 在Struts2框架中,路径配置主要涉及以下几种方式: 1. **HTML `<a>` 标签与 `...
本文总结了Struts2的常用方法和经验,涵盖了配置问题、EL表达式、Struts2的架构和Namespace等方面的知识点。 一、配置问题 Struts2的最新版本为GA 2.2.1,需要以下几个类库: 1.commons-fileupload-1.2.1.jar 2....
标题中的“K8_Struts2_EXP S2-045 & 任意文件上传 20170310”指的是一个与Struts2框架相关的安全漏洞,具体为S2-045漏洞,该漏洞允许攻击者进行任意文件上传。20170310可能是漏洞被发现或公开的日期,也可能是指该...
这篇博客文章《Struts2中使用displaytag标签总结》很可能是讨论如何在Struts2框架下集成并利用DisplayTag库来高效地处理表格显示。 DisplayTag标签库包括一系列自定义JSP标签,这些标签能够帮助开发者快速创建美观...
3. **路径问题**:在 Struts2 中,路径是根据 Action 的路径而非 JSP 的路径来确定的,因此建议使用绝对路径。 - 使用内置标签或脚本语言来获取绝对路径:`(); String basePath = request.getScheme() %>` 以上是...
本知识点将详细介绍Struts2中的注解开发及其核心组件。 标题提到的"Struts2注解开发jar"主要指的是`struts2-convention-plugin`,这是一个Struts2的插件,它的主要作用是支持基于约定优于配置(Convention over ...