Struts2 路径问题

1.新建项目testAction

2.引入Struts2的包

3.编写 配置文件 struts.xml 如下

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

<package name="path" extends="struts-default" namespace="/path">
	<action name="path">
		<result name="success">/path.jsp</result>
	</action>
</package>
</struts>    

4.编写 path.jsp,index.jsp 页面,存放位置当前项目根目录下。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
  Struts2 中路径问题是根据 action 路径而不是 jsp 路径来确定的,所以尽量不要使用相对路径。<br>
  <a href="index.jsp">index.jsp</a><br>
  虽然可以使用 redirect 方式解决,但是 redirect 并非必要<br>
  解决办法很简单,统一使用<base>标签。
  
  
  </body>
</html>

4.运行项目访问地址:http://localhost:8080/testAction/path/path.action

查看链接 index.jsp 链接内容如下:
http://localhost:8080/testAction/path/index.jsp

结果相当于我们访问【action时的路径】 + index.jsp:这个地址下我们肯定访问不到 index.jsp 页面

但是我们知道,我们要访问的 jsp 的路径,跟 Action 路径没有什么关系,然而【默认情况下,我们 Struts2 框架下的 jsp 路径就是 Action 的路径】,因此为了解决这个问题,我们就需要把这个默认路径给修改掉。

5.解决办法:使用 myEclipse 提供的 <base href="<%=basePath%>">  标签。

其中basePath 来源如下:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
//request.getContextPath();// 获取的是应用的根目录,比如本应用在 tomcat 中的根目录为 /testAction
//request.getScheme():获取协议名称 http
// request.getServerName():获取服务器名称就是 ip 地址 localhost
// request.getServerPort:获取端口名称 8080
// 综合起来就是:"http" + "://" + "localhost" + "8080" + "/testAction" + "/"
// 结果就是 http://localhost:8080/testAction/
// 也就是说 bashPath = http://localhost:8080/testAction/
 %>



由上面分析可以知道 bashPath = http://localhost:8080/testAction/,当我们把它赋值给 html 页面的<base> 标签的时候,就代表了要用<base> 标签为页面上的所有链接规定默认地址或默认目标,意思就是为没有指定地址的链接默认添加上 base 标签的地址,对于<a href="index.jsp">index.jsp<a> 来说,在浏览器为我们执行了默认的填充之后我们所能够看到的链接的 url 地址是:http://localhost:8080/testAction/index.jsp ,这才是我们要的路径,jsp 修改后如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     <base href="<%=basePath%>">
 </head>
  
  <body>
  Struts2 中路径问题是根据 action 路径而不是 jsp 路径来确定的,所以尽量不要使用相对路径。<br>
  <a href="index.jsp">index.jsp</a><br>
  虽然可以使用 redirect 方式解决,但是 redirect 并非必要<br>
  解决办法很简单,统一使用<base>标签。
  
  
  </body>
</html>

6.因此在 jsp 页面中,我们最好使用这种方式,这样如果我们要访问 Action,我们只需要把 Action 的 namespace + "/" + action 名称既可以,如果我们要访问 jsp 那么只需要把 jsp 相对于根目录的路径加入进来就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值