今天学习下路径问题,Struts2 里路径根据action路径,而不是jsp路径,所以我们不要使用相对路径,简单做个试验说明一下。
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>
<!-- Add packages here -->
<constant name="struts.devMode" value="true" />
<package name="front" namespace="/path" extends="struts-default">
<action name="hell" class="com.tfj.strut2.Path">
<result name="success">
/JSP/path.jsp
</result>
</action>
</package>
</struts>
我把两个jsp文件放在Jsp文件夹里。
先访问http://localhost:8080/Struts2_0400_Path/path/hell。
path.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
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%>">
<title>My JSP 'path.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
Struts2 里路径根据action路径,而不是jsp路径,所以我们不要使用相对路径.<a href="index.jsp">index</a> <br>
</body>
</html>
在path里用的“index”是相对路径。虽然path.jsp和index.jsp在同一文件夹下但是却无法访问成功。
为了避免这种情况,我们不使用相对路径,myeclipse会帮我们生成两个有关路径的变量在jsp文件里。
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
那么我们有两种方法,来进行路径命名。
1.把<a href="index.jsp">index</a>改为<a href="<%=basePath%>JSP/index.jsp">index</a>;
2.在<head></head>里加个<base>标签 <base href="JSP/<%=basePath%>"/>然后所有的连接都会添加这个路径。只要用<a href="index.jsp">index</a>即可。
Tips: <welcome-file-list>
<welcome-file>path.jsp</welcome-file>
</welcome-file-list>
表示访问http://localhost:8080/Struts2_0400_Path/打开path.jsp,当然前提是path.jsp在根目录。