【发布时间】:2011-09-09 13:36:28
【问题描述】:
我有一个名为 Main.jsp 的文件,位于 “http://Mywebpage.com/Open/This/Folder/Main.jsp”。
在Main.jsp里面,有一个jsp include:
<%@ include file="../../Top.jsp" %>
现在,在 Top.jsp 页面中,我还有其他引用文件的 jsp 和 javascript 语句:
<%@ taglib uri="emonogram.tld" prefix="em" %>
...
<script type="text/javascript" src="HL.js"></script>
emonogram.tld 和 HL.js 与 Top.jsp 存储在同一目录下,即“http://Mywebpage.com/Open/”。
我需要 Top.jsp 足够灵活,这样任何文件都可以引用它,无论它在目录树中的什么位置。这里的问题是我收到错误,因为无法找到 Top.jsp 中引用的文件。为什么? jsp 包含路径将是 Main.jsp 的相对路径。所以,Top.jsp 会失败,因为当我调用 emonogram.tld 时,我想要“http://Mywebpage.com/Open/emonogram.tld”,但它实际上是“http://Mywebpage.com/Open /This/Folder/emonogram.tld"。
我尝试查看一些 jsp 选项,例如 getRequestURL、getServletPath、getRealPath 和 getContextPath,但这些方法似乎没有返回我想要的。
我当前的逻辑是检索 Top.jsp 的相对路径,并将其分别添加到 emonogram.tld 和 HL.js。但我不知道该怎么做;我正在努力解决这个问题。
更新: 根据 BalusC 的回答,我安装了标签和 Tomcat 5.5。我按照链接和 web.xml 包含适当的信息。我什至更新到 JSP 1.2,什么也没有。如果${} 相当于在<% %> 标记内执行它,那么这不是成败的情况,在我得到原始问题后我可以担心它。不过谢谢。
我关注this link 并尝试了所有以“get...”开头的方法,但似乎都没有成功。
getContextPath() 在 Top.jsp 和 Main.jsp 中都给了我/Open,即使 Main.jsp 在 /Open/This/Folder/ 中。这个问题正在影响加载"emonogram.tld",这是一个标签库,而不仅仅是javascript文件,不幸的是。
再次感谢您。
Update2:抱歉,严重的拼写错误;我的意思是 JSTL 1.2,而不是 JSP 1.2。我在 Tomcat 5.5.28、JSP 2.0 和 JSTL 1.2。
顺便说一句,感谢您的帮助和知识。这是一样的,这很好,即使不鼓励使用 scriptlet。使用getcontextPath(),我期待Main.jsp 为/Open/This/Folder/,Top.jsp 为/Open/,但它为这两个文件返回/Open/,这很奇怪。我会继续调查,希望能找到一个解决方案,再次感谢你。
【问题讨论】:
标签: jsp url path include relative-path