【问题标题】:Setting up Tomcat to process JSP's in DocumentRoot设置 Tomcat 以处理 DocumentRoot 中的 JSP
【发布时间】:2014-03-15 17:30:44
【问题描述】:

我在我的服务器上运行了 Apache,并通过它为我自己设置了一些 VHost;但是,apache documentRoot 和任何 VHost 的 documentRoot 似乎都在调用 tomcat 来处理任何 JSP 文件 - 为了运行 JSP,我需要将其作为战争存档上传,并通过 domain:8080 访问它。

谁能指出我设置tomcat的正确方向,以便它可以正常处理JSP文件?

【问题讨论】:

  • 你问的是如何安装tomcat?顺便问一下,你的环境是什么?
  • Tomcat 已安装,并可通过 :8080 端口访问 - 任何上传到此处的 .war 文件都可以正常运行。根本不处理 documentRoot 下的独立 JSP。在 CentOS6.4 x64 上运行
  • 请重新格式化您的问题,使其与您自己的答案相符。

标签: apache jsp tomcat document-root


【解决方案1】:

如果我理解正确,您希望将 JSP 部署在 war/webapps 之外。不幸的是,Tomcat 不是这样工作的。您必须将 JSP 部署为 WAR/folder-in-webapps。与 PHP 或某些此类语言插件不同,Tomcat 托管 Java 应用程序。它不处理 JSP 文件。

要通过,您是否尝试过 mod_jk 或现在已知的连接器? http://tomcat.apache.org/connectors-doc/miscellaneous/faq.html

【讨论】:

  • 请检查我的以下答案;我发现使用 mod jk_serv 可以做到这一点,并适当地设置工作人员。
  • mod_jk 仅用于在 WAR 之外提供非 java 文件,不适用于 JSP。 mod_jk 允许您有一些由 apache httpd 管理的页面,以及一些来自 Tomcat 的页面,但不会修改 Tomcat 的配置或行为。 mod_jk 对于来自 apache httpd 的服务器图像、js 文件等非常有用,因此不需要 Tomcat 来为它们提供服务。
【解决方案2】:

回答我自己的问题,因为这两种解决方案都没有提供我正在寻找的东西。

首先,我下载并编译了apache mod jk_serv;在此之后,我在workers.properties 下配置了一个worker;

workers.tomcat_home=/opt/apache-tomcat-7.0.50

workers.java_home=/opt/jdk1.7.0_51/

ps=/

worker.list=ajp13_worker
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.ajp13_worker.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13_worker

接下来,在apache的conf.d下,我设置了一个worker config要被apache加载,如下;

LoadModule jk_module modules/mod_jk.so

JkWorkersFile /etc/httpd/conf/workers.properties
JkLogFile     /var/log/httpd/mod_jk_log
JkShmFile     /var/log/httpd/jk-runtime-status
JkWatchdogInterval 60
JkLogLevel    info

JkMountCopy   All

# all the contexts:
JkMount        / worker1
JkMount        /*.jsp worker1

最后,我设置了一个脚本来更新 tomcat 的 server.xml,以添加任何已添加到 httpd.conf 的相关 vHost。

有了这个,jsp 文件现在可以即时处理;无需上传单独的 WAR。

【讨论】:

  • 您没有将 Tomcat 设置为通过 localhost:8080 访问它,但您正在设置 Apache 以连接到端口 80。此外,我认为上述配置不会在 localhost 下部署您的战争,而是在localhost/warFileName,所以根本解决不了问题。
  • 注意:即使你确实使用WAR文件部署,你也可以在子文件夹中修改或替换/添加JSP,它们将直接生效(但站点内容仍然不会导入WAR文件不再)。
【解决方案3】:

您只需将 WAR 文件复制到 $TOMCAT/webapps/ 文件夹并在 server.xml(或 context.xml)中为其定义上下文,使其指向根目录。在server.xml 中,上下文是在<Host> 中定义的。

我还建议您删除 $TOMCAT/webapps/ 下的 ROOT 文件夹(如果已创建)。

以下是上下文定义的示例:

<Host name="192.168.0.251"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<Alias>myhost.mydomain.com</Alias>
<Context docBase="myWarFileName" path="" reloadable="true" source="myWarFileName">

... Add any resource, etc.. for this context here, if any ...

</Context>
</Host>

注意空的path 值,然后指向根目录。在某些情况下,我不得不使用“/”而不是空字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2019-12-21
    • 2014-08-14
    • 1970-01-01
    • 2012-08-31
    相关资源
    最近更新 更多