问题:使用struts2,如何处理action的路径?还有,在action转到的jsp中,如何写js,css,图

片的路径?(例如访问 http://localhost/project/listUser.action后转到http://localhost/project/user /listUser.jsp,这时候浏览器还是停留在http://localhost/project/addUser.action。这时候jsp原来的图片定位可能就都出错了)

答:action的话,就不需要关心路径问题。我们不使用action的命名空间。因为使用了这样的匹配:
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
无论前边是什么路径,struts2只看后边的匹配。

而解决jsp的路径问题,我觉得以下方式就基本完美了(有问题,请各位前辈指出):
第一步:在jsp的head中添加base标签和一段java
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<base href="<%=basePath%>">

第二步:所有的路径使用“半绝对路径”。所谓半绝对路径,是我乱说的。例如:<link rel="stylesheet" type="text/css" href="style/table.css" />
这种本来是相对路径,就是当前jsp目录下的style目录的table.css。
在我们struts2和配置了base的前提下,这里就会被浏览器解释为http://localhost/project/style/table.css。
也就是说,需要写从项目根目录算起的绝对路径,但去掉开头的"/"

第三步:所有action跳转,form提交写的action路径,都不要带目录位置。只写action名,例如addUser.action。

这样,浏览器就一直停留在http://localhost/project/XXXXX.action  这一层。

另外,我发现另外一个更自然的办法,可以使得原来用相对路径定位的jsp继续可用,不必逐个修改链接:

第一步:在jsp的head中同样添加base,但把getContextPath改为getRequestURI
d
<%
    String path = request.getRequestURI();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path;
%>
<base href="<%=basePath%>">
注意是request.getRequestURI,这样获取出来的正好就是jsp的绝对路径。
例如浏览器地址栏是:http://localhost:8084/project/listUser.action
base是<base href="http://localhost:8084/project/admin/listUser.jsp">

第二步:jsp页面内,全部使用相对路径访问。

第三步,就不必管action的路径如何了。

这个方法,可以兼容使用action和不使用action两种情况

另外,在struts.xml中配置jsp路径的时候使用项目的绝对路径。例如listUser.jsp在根目录下的admin目录下,就写

<result>/admin/listUser.jsp</result>

在使用action跳转后的页面路径如果是相对路径的话会出现css、js以及图片等无法加载问题。解决办法用绝对路径固然是一个解决办法,但是如果文件很多,路径也很多,全部都改成绝对路径不仅麻烦,而且难看。 
在网上淘了n久以后终于找到一个比较好的方法,就是action跳转时采用redirect来跳转,就可以不修改jsp页面的相对路径。 
例如: 
<action name="admin" class="action.UserLoginAction"> 
<result name="success" type="redirect">/a.jsp</result> 
<result name="error" type="redirect">/b.jsp</result> 
</action>

struts/Servlet,action转到jsp后,路径问题(struts2,jsp路径,action路径,action跳转,相对路径,绝对路径)的更多相关文章

  1. Struts/Servlet,action转到jsp后,CSS失效,路径问题(struts2,jsp路径,action路径,action跳转,相对路径,绝对路径)

    问题:使用struts2,如何处理action的路径?还有,在action转到的jsp中,如何写js,css,图 片的路径?(例如访问http://localhost/project/listUser ...

  2. 使用内部Servlet转发JSP后页面的JS,CSS等资源引入问题的解决

    转载自:https://blog.csdn.net/weixin_44353336/article/details/90677792 问题原因 我们在进行web项目开发过程中,经常会在web页面引入一 ...

  3. Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】

    前言 上篇Struts博文已经讲解了Struts的开发步骤以及执行流程了-..对Struts的配置文件有了了解-..本博文继续讲解Struts在配置的时候一些值得要学习的细节- Action开发的三种 ...

  4. Servlet路径跳转1---使用相对路径和绝对路径,在页面上调用servlet的路径写法(超链接的方式和表单的方式)

    课程1-13   http://www.imooc.com/video/5554 Servlet路径跳转: 绝对路径:放在任何地方都对的路径 相对路径:相对于当前资源的路径 index文件 加上/,表 ...

  5. jsp中的绝对路径、相对路径和访问jsp的方式

    1.jsp的绝对路径 绝对路径在复制jsp时不用修改路径都会正常显示,但是绝对路径${pageContext.request.contextPath}只有jsp可以识别 例如:相对路径:image/l ...

  6. struts2 jsp表单提交后保留表单中输入框中的值 下拉框select与input

    原文地址:struts2 jsp表单提交后保留表单中输入框中的值 下拉框select与input jsp页面 1     function dosearch() {2         if ($(&q ...

  7. java -- SSM配置完成后,能访问jsp文件不能访问html文件,报错解析

    SSM配置完成后,能访问jsp文件不能访问html文件,报错解析 在确保路径没有任何问题的,情况下,相同的页面,jsp能够正常访问,html却不能正常访问(404). 解决方法: 在web.xml中添 ...

  8. jsp页面,使用Struts2标签,传递和获取Action类里的参数,注意事项。<s:a action><s:iterator><s:param>ognl表达式

    在编写SSH2项目的时候,除了使用<s:form>表单标签向Action类跳转并传递参数之外,很更多时候还需要用到<s:a action="XXX.action" ...

  9. Struts+Servlet+JDBC网上手机销售系统

    项目描述 Hi,大家好,今天给大家分享一个<网上手机销售系统>.本系统一共分为前台和后台两大模块,两个模块之间虽然在表面上是相互独立的,但是在对数据库的访问上是紧密相连的,各个模块访问的是 ...

随机推荐

  1. [USACO2005][POJ2454]Jersey Politics(随机化)

    题目:http://poj.org/problem?id=2454 题意:给你3*k(k<=60)个数,你要将它们分成3个长度为k的序列,使得其中至少有两个序列的和大于k*500 分析:以为有高 ...

  2. 编写高质量代码改善C#程序的157个建议[协变和逆变]

    前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议42.使用泛型参数兼容泛型接口的不可变性 建议43.让接口 ...

  3. java.lang.NoClassDefFoundError: com/sun/mail/util/BEncoderStream

    :java.lang.NoClassDefFoundError: com/sun/mail/util/BEncoderStream 这个问题是Mail.jar包没有引入到java路径中,或者是版本的问 ...

  4. Java 线程并发策略

    1 什么是并发问题. 多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题. 2 java中synchronized的用法 用法1 public class Test{ public ...

  5. 【bzoj2819】 Nim

    www.lydsy.com/JudgeOnline/problem.php?id=2819 (题目链接) 题意 动态树上路径异或和. Solution Nim取石子游戏的sg值就是每堆石子的异或和,所 ...

  6. POJ1065 Area

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18499   Accepted: 5094 Description You ...

  7. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程

    相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868.shtml http://www.gxu.edu.cn/college ...

  8. event driven的一些概念

    1. event :Something that happens during your application that requires a response. 2.event object:Th ...

  9. a[1000][1000]程序崩溃

    1000 * 1000是大于65536的.如果不是需求需要,没必要开辟如此之多的空间.因为这些空间实在栈上申请的(如果是局部变量),栈的空间是有限的并且是宝贵的,所以呢,开辟太多的空间而不适用很可能会 ...

  10. Integer.valueOf(String) 方法之惑

    本文由 ImportNew - 靳禹 翻译自 stackoverflow.欢迎加入翻译小组.转载请见文末要求. 有个仁兄在 StackOverflow 上发起了一个问题,是这么问的: “ 我被下面的代 ...