如何将应用程序部署到Intellij中的tomcat作为ROOT.war?
我已经部署了2个应用程序,这些应用程序的页面都包含以下代码:
<c:url value="/someLink"/>
在上下文路径/
上部署的应用程序提供了以下结果:
/someLink
虽然在上下文路径/something
上部署的其他应用程序提供了以下结果:
http://localhost:8080/something/someLink
如何确保在上下文路径/
上部署的应用程序也能完成此操作?
所以最终结果看起来像这样
http://localhost:8080/someLink
答案 0 :(得分:1)
我找到了解决这个问题的方法。
问题是Intellij在上下文/
下部署了应用程序。
使用<c:url>
- 标记时,使用以下值<c:url value="/someLink"/>
<c:url>
- 标记会将链接更改为//someLink
。
当URL被放在响应上时,它不会在主机名前加上它。
我解决它的方法是在war的META-INF目录中添加一个context.xml文件,其中包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="" />
这会导致Intellij在上下文""
而不是"/"
下部署应用程序。
<c:url>
代码将链接转换为/someLink
,并将响应包含在主机名中。
您还必须确保从Intellij部署的战争名为ROOT.war以使其正常工作。
答案 1 :(得分:0)
我不确定为什么在根上下文中获得的结果与在命名上下文中获得的结果不同。对我来说,JSTL <c:url>
总是给出一个相对路径,无论它是根上下文还是命名上下文。我刚刚在Tomcat 7中测试过。显然,您使用的JSTL实现中存在一些不同的结果,导致结果不一致。
JSTL 1.2 Specification对<c:url>
实现应该做什么不明确。从第7.5节开始:
网址必须是以方案开头的绝对网址(例如“http:// server / context / page.jsp“)或JSP.2.2.1中JSP 1.2定义的相对URL “相对URL规范”
我建议您查看Accessing the full url, including hostname with jstl的答案。这可以告诉您如何获取完全限定的网址。您可能需要进行调整(即,在为服务器URL添加前缀之前查看它是完全限定的),以补偿您的<c:url>
实现在根上下文中的行为与命名上下文不同的事实。最终,最简单的方法是编写自己的标记来处理所有这些(即包装其他标记)。