2014-10-20 166 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添加前綴之前查看它是完全合格的),以補償您的根環境中的實現在命名上下文中的行爲不同的事實。最終,最簡單的事情就是編寫自己的標籤來處理所有這些(即包裝其他標籤)。

相關問題