2014-10-20 152 views
2

如何在Intellij中将应用程序部署到Intellij中的ROOT.war?在Intellij的tomcat中将web应用程序部署为ROOT.war应用程序

我有2个应用程序部署都有这样的代码页:

<c:url value="/someLink"/> 

部署上下文路径/上的应用程序提供了以下结果:

/someLink 

而其他应用程序部署上下文路径/something给出以下结果:

http://localhost:8080/something/someLink 

我如何确保对于在上下文路径/上部署的应用程序也可以完成此操作? 所以最终的结果看起来是这样的

http://localhost:8080/someLink 
+0

你的问题不是很清楚。你得到的结果是预期的。对于使用根上下文的第一个结果,您是否期待“http:// localhost:80890/someLink”而不是'/ someLink'的完全限定的URL的“问题”? – Javaru 2014-10-20 14:31:25

+1

Mark的确,我期望它是'http:// localhost:8080/someLink'而不是'/ someLink' – wvp 2014-11-18 12:55:33

回答

1

我找到了解决这个问题的办法。 问题在于Intellij在上下文/下部署了应用程序。

当使用<c:url> -tag用下列值<c:url value="/someLink"/><c:url> -tag改变链接//someLink。 当URL放在响应中时,它不会以主机名作为前缀。

我解决的办法是在战争中使用下列内容的META-INF目录下添加一个context.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="" /> 

这导致的IntelliJ上下文""下部署应用程序,而不是的"/"<c:url>标记将链接转换为/someLink并放入包含主机名的响应中。

您还必须确保您从Intellij部署的战​​争被命名为ROOT.war才能使其工作。

0

我不知道为什么当根环境下,你获得的回报比在一个名为上下文时不同的结果。对我而言,JSTL <c:url>总是给出相对路径,无论它是根环境还是命名环境。我只是在Tomcat 7中测试才能确定。显然,您正在使用的JSTL实现有一些不同,导致了不一致的结果。

JSTL 1.2 Specification对于什么<c:url>实现应该做什么是不明确的。从节7.5:

URL必须是绝对URL与方案开始(例如 “HTTP:// 服务器/上下文/ page.jsp”)或相对URL由JSP 1.2 JSP定义.2.2.1 “相对URL规范”

我建议你看一看答案为Accessing the full url, including hostname with jstl,可以告诉你如何得到完全合格的URL。您可能需要作出调整(即在为服务器URL添加前缀之前查看它是完全合格的),以补偿您的根环境中的实现在命名上下文中的行为不同的事实。最终,最简单的事情就是编写自己的标签来处理所有这些(即包装其他标签)。

相关问题