【问题标题】:How to abstract Tomcat URL's for deployment?如何抽象 Tomcat URL 进行部署?
【发布时间】:2011-10-23 10:23:58
【问题描述】:

我们有一个在本地运行的 web 应用程序,所以在许多 jsp 中,我引用了 http://localhost:8080/MyApp/index.html 之类的东西。我们现在想要创建一个部署,但是通过许多不同语言(html、jsp、xml 等)的文件并手动将 localhost URL 更改为实际部署 URL 似乎很不方便——比如 192.168.0.4:8080/MyApp /index.html.

人们在这里做什么?理想情况下,我希望选择同时使用这两个 URL,以便我可以维护本地版本的 webapp 以在我的机器上运行,并且还可以在我的网络上运行已部署的机器。一个想法是使用 SVN 中的分支/标签作为部署,并仅在该分支中更改 URL。这可能适用于开发 + 部署服务器,但有没有更通用的方法来抽象 web 应用程序中使用的 URL?

任何想法将不胜感激!

【问题讨论】:

    标签: svn url web-applications tomcat deployment


    【解决方案1】:

    不要硬编码域名或上下文路径。

    动态解决它们。此信息可从HttpServletRequest 获得。例如

    String base = request.getRequestURL().toString().replace(request.getRequestURI().substring(1), request.getContextPath());
    // ...
    

    如下使用它

    <a href="${base}/index.html">
    

    或者使用 HTML &lt;base&gt; 标签。有关一些提示,另请参阅 Browser can't access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP。

    【讨论】:

    • 太好了,谢谢。您会建议我在需要相同 URL 的单独服务器应用程序(不是 Tomcat)中的 Java 代码中做什么?环境变量?
    【解决方案2】:

    当您链接到同一个应用程序中的另一个资源时,通常不需要在 Web 应用程序中引用完整的 URL(包括协议、主机、端口,甚至上下文根)。相反,您应该能够使用相对 URL。例如,您应该能够引用“index.html”,而不是引用“http://localhost:8080/MyApp/index.html”。

    【讨论】:

      【解决方案3】:

      我使用了这个解决方案:

      ${pageContext.request.contextPath}/some/path/index.html
      

      BalusC 链接到另一篇建议这一点的帖子,但他的答案中没有,所以我添加了自己的。

      【讨论】:

      • 这不是你在具体问题中要问的。
      • 不是吗?抱歉,我很高兴向您表示感谢(我 +1 了),但我认为这正是我要问的?使用 ${pageContext.request.contextPath} 抽象上下文...
      猜你喜欢
      • 2020-06-03
      • 1970-01-01
      • 2011-03-10
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      相关资源
      最近更新 更多