Struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径),或者使用myeclipse经常用的,指定basePath。如下:
当request访问Action之后,进入了path.jsp。在这个jsp中,有如下链接:
<a href="index.jsp">index.jsp</a>
此时,index.jsp存在于根目录下,但是通过页面点击,则进入/path/path/index.jsp
所以在JSP中加入如下语句:
之后,使用<a href="<%=basePath%>index.jsp">index.jsp</a>
或者在head中加入:<base href="<%=basePath%>" />,然后再使用<a href="index.jsp">链接。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径),或者使用myeclipse经常用的,指定basePath。如下:
<struts>
<constant name="struts.devMode" value="true" />
<package name="path" extends="struts-default" namespace="/path">
<action name="path" class="com.bjsxt.struts2.path.action.PathAction">
<result name="path">/path.jsp</result>
</action>
</package>
</struts>
当request访问Action之后,进入了path.jsp。在这个jsp中,有如下链接:
<a href="index.jsp">index.jsp</a>
此时,index.jsp存在于根目录下,但是通过页面点击,则进入/path/path/index.jsp
所以在JSP中加入如下语句:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()
+":"+request.getServerPort()+path+"/";
%>
之后,使用<a href="<%=basePath%>index.jsp">index.jsp</a>
或者在head中加入:<base href="<%=basePath%>" />,然后再使用<a href="index.jsp">链接。