Struts2 学习笔记四--路径问题

struts2中路径的设置

在struts2中最好使用绝对路径。

MyEclipse中常用的设置路径的方法:
Java代码    
1. <%  
2.   String path = request.getContextPath();  
3.     //则path的值是:应用的路径即http://localhost:9000/Struts2_0400_Path/  
4.   String basePath = request.getScheme()+"://"+request  
5.      .getServerName   ()+":"+request.getServerPort()+path+"/";  
6. %>  
7.  
8. request.getScheme()值是:http  
9.  
10. request.getServerName()的值是:localhost  
11.  
12. request.getServerPort()的值是:9000 
13.  
14. path的值是: struts2_0400_Path 

在使用的时候,只需在path后面加上namespace/*.action
例如:
引用
<a href="<%=path%>/index.jsp">index.jsp</a>


另外一种方式:
  在html的head中加入如下代码
 
Java代码    
1. <base href=”<%=basePath%>”/> 

  这里的意思就是说这个jsp页面里所有的<a href/>连接都会在前面加上basePath,如  <a href=”test.jsp”>,则实际的是<a href=” http://localhost:9000/struts2_0400_Path/test.jsp”/>;

但是如果说是
引用
<a href=”/index.jsp”>index.jsp</a>

  这样访问的话,那么访问的将是tomcat的根目录,而不是应用项目的根目录)
  即http://localhost:9000/index.jsp

  因为在jsp中,"/"代表的是站点的跟路劲,而不是应用的根路径。

Struts2_0400_Path2:

<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
    <%@taglib uri="/struts-tags" prefix="s" %>
    <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="<%=basePath%>" />
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>Insert title here</title>
</head>
<body>
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。<br />
<a href="index.jsp">index.jsp</a>
<br />
虽然可以用redirect方式解决,但redirect方式并非必要。
<br />
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
<br />
或者使用myeclipse经常用的,指定basePath
</body>
</html>

你可能感兴趣的:(struts2)