当前位置 : 主页 > 网络推广 > seo >

检索包含文件jsp中文件的相对url路径

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有一个名为Main.jsp的文件,位于绝对url路径 “http://Mywebpage.com/Open/This/Folder/Main.jsp”. 在Main.jsp里面,有一个jsp包含: %@ include file="../../Top.jsp" % 现在,在Top.jsp页面中,我有其他jsp和javascrip
我有一个名为Main.jsp的文件,位于绝对url路径
“http://Mywebpage.com/Open/This/Folder/Main.jsp”.

在Main.jsp里面,有一个jsp包含:

<%@ 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()在BOTH 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.

顺便说一句,谢谢你的帮助和知识.它是相同的,即使不鼓励小脚本也是好的.使用getcontextPath(),我期望/ Open / This / Folder /用于Main.jsp和/ Open /用于Top.jsp但它返回/ Open /用于两个文件,这很奇怪.我会继续调查,希望能够解决问题,再次感谢你.

< script src>是相对于当前请求URL(如浏览器地址栏中所示),而不是JSP文件的服务器端位置.这就是需要加载脚本的webbrowser,而不是webserver.

因此,如果当前请求URL是

07000

并且JS文件实际上位于

07001

然后你需要引用它

<script type="text/javascript" src="/HL.js"></script>

前导斜杠将使其相对于域根.

但是,如果您的webapp本身未部署在域根目录上,而是在上下文路径上,例如/(在简化的)示例中打开,并且您的JS文件实际位于

07002

那么你需要在HttpServletRequest#getContextPath()前面添加URL.

<script type="text/javascript" src="${pageContext.request.contextPath}/HL.js"></script>

这将最终为(在浏览器中右键单击页面,查看源代码以查看它)

<script type="text/javascript" src="/Open/HL.js"></script>

也可以看看:

> How to use relative paths without including the context root name?
> Browser can’t access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP

更新:根据您的更新,请注意,这不适用于TLD文件,因为它们已在服务器端解析.通常,您应该将TLD文件放在/ WEB-INF文件夹中并通过uri =“/ WEB-INF / filename.tld”引用它.

网友评论