【问题标题】:Java EE application in tomcatTomcat 中的 Java EE 应用程序
【发布时间】:2010-01-11 09:18:56
【问题描述】:

我开发了一个 Java EE 应用程序。

现在说 sample.war 是文件。当我们将它移植到 Tomcat webapps 时,它会爆炸到示例文件夹。但是如果我们想为两个人运行这个应用程序,我们该怎么做呢?像 http://address.com/user1/http://address.com/user2/ 这样的东西,我们有不同的 CSS(只是外观不同)

或者我们可以取两个子域,并以不同的样式链接到同一个应用程序?

【问题讨论】:

    标签: java jsp tomcat servlets jakarta-ee


    【解决方案1】:

    您可以使用<Context path="/"> 将您的webapp 放在上下文根目录中,然后根据登录用户或<link href="${user.name}.css"> 之类的路径信息选择样式。

    【讨论】:

      【解决方案2】:

      可能的解决方案:

      1. 在部署描述符(web.xml)中可以设置部署目标名称(默认为.war名称)。

      2. 重命名 .war (user1.war user2.war) 并部署两次。

      注意应用程序使用的连接(数据库/文件...)。

      【讨论】:

      • 所以你告诉我包括两个客户端的两个部署行并相应地重命名war文件。所以当应用程序出现时,两个客户端都可以访问它,对吗?如果还可以,这些网址或子域可以。什么是最好的选择?!!
      • 有很多不同的解决方案!您可以使用 URL 重写来处理子域。部署后,两个客户端都可以使用该应用程序。他们是否使用相同的数据库连接?你部署什么样的应用程序,处理什么样的数据?也许您必须做更多工作才能提供多客户端功能。您可以更轻松地处理 URL(请参阅 JEE 标准。)
      【解决方案3】:

      由于上下文只是 webapps 文件夹下的路径,因此您可以展开您的战争,然后为您要创建的每个实例构建符号链接,并根据需要替换不同的 css 文件。两个副本也可以,但您需要修改不同的实例,如果您有很多实例要编辑,这可能会很困难。

      【讨论】:

      • 符号链接是否正常工作取决于平台和应用服务器实现
      • 我已经通过一些配置测试了它可以在 centos5 / tomcat 上工作。
      【解决方案4】:

      这不能很好地扩展到 100 和 1000 名用户。

      总体思路是您的网页具有一定程度的动态功能。阅读 JSP 作为一种可能的方法。 HTML 的一些部分是在运行时生成的,其中一个可能是基于用户的 id 或从数据库中检索的首选项选择特定样式表。

      【讨论】:

        【解决方案5】:

        如果样式是您对每个用户的唯一更改,我建议您查看 Spring 在其 Web MVC 层中处理皮肤的方式。要么使用 Spring,要么设计类似的东西来实现这一点。您可以使用过滤器或控制器将用户重新路由到使用不同 CSS 文件的 URL。

        【讨论】:

          【解决方案6】:

          如果您真的想在两个“上下文路径”上部署相同的应用程序两次(不确定两个人是什么意思,但这就是您在示例 URL 中显示的内容)但使用不同的 L&F,只需打包并部署两个使用他们自己的 CSS 集进行战争,即 sample1.war 和 sample2.war。我可以想出完全正当的理由来决定这样做(单独的资源管理,如数据库池、QoS 等)。

          如果您使用 Apache HTTPD 作为前端,您还可以创建两个虚拟主机(例如子域 user1.example.com 和 user2.example.com),转发动态请求(JSP 和 servlet)到 Apache Tomcat 并将静态文件(包括 CSS)放在虚拟主机级别。是否将虚拟主机映射到一个或两个 Web 应用程序实际上取决于您的需求。正如我上面所说,有两次部署战争的有效用例。

          另一种选择是使用 mod_rewrite 来处理 URL,然后让您的 web 应用程序动态选择所需的 CSS。

          就我个人而言,我倾向于使用 Web 服务器作为前端来提供静态文件,因为 Web 服务器比 servlet 容器更适合这项工作(尽管 servlet 容器在这方面有所改进)。但这显然使架构和部署过程更加复杂。

          【讨论】:

            【解决方案7】:
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多