【问题标题】:Virtual hosts on TomcatTomcat 上的虚拟主机
【发布时间】:2020-01-23 10:06:38
【问题描述】:

我有一个域test.mydomain.com。我把它放到浏览器地址栏,然后我进入Tomcat控制面板。

应用程序部署在 tomcat 上,并在地址 localhost/test/ 处启动。应用部署在本地文件夹webapps/test

现在我希望在访问主机时,test.mydomain.com 被重定向到我的应用程序。我在<Engine> 部分中添加了server.xml

<Host name="test.mydomain.com"  appBase="webapps/test"
        unpackWARs="true" autoDeploy="true">
    <Alias>www.test.mydomain.com</Alias>
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="test_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    <Context path="" docBase="${catalina.base}/webapps/test"
   debug="0" reloadable="true"/>
</Host>

我可以访问我的应用程序,但两个 servlet 除外

@WebServlet(name = "Options", urlPatterns = "/js/options.js")
public class Options extends HttpServlet {

@WebServlet(name = "AggregateIconController", urlPatterns = "/images/points/agg.svg")
public class AggregateIconController extends HttpServlet {

web.xml文件中,我已经定义了这样的规则

<web-app version="3.1"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         metadata-complete="false">
  <display-name>Test Web Application</display-name>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/images/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/css/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/js/*</url-pattern>
  </servlet-mapping>
</web-app>

这些连接点是 web.xml 中定义的掩码的子集。

访问地址test.mydomain.com/js/options.js 时出现错误404。但访问localhost/test/js/options.js 时页面返回。

web.xml添加规则时

<servlet-mapping>
  <servlet-name>Options</servlet-name>
  <url-pattern>/js/options.js</url-pattern>
</servlet-mapping>

没有任何变化

【问题讨论】:

    标签: java tomcat servlets virtualhost


    【解决方案1】:

    一切都对我有用。你做了什么

    1. 将此主机的应用程序放在一个单独的文件夹中,该文件夹位于 ${catalina.base}/webapps 之外,这在 Tomcat 的 documentation 中有说明

      要创建虚拟主机,请执行以下操作:

      1. 为每个主机创建一个单独的目录$CATALINA_HOME/webapps 之外
      2. 在每个目录下,创建一个 webapps 目录。
    2. server.xml 中只剩下几行

      <Host name="test.mydomain.com"  appBase="test/webapps"
              unpackWARs="true" autoDeploy="true">
        <Alias>www.test.mydomain.com</Alias>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="test_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
      
    3. 将原来的war重命名为ROOT.war,放到test/webapps文件夹下。 Tomcat自己部署在test/webapps/ROOT

    4. 我不了解 servlet。对于

      @WebServlet(name = "Options", urlPatterns = "/js/options.js")
      public class Options extends HttpServlet {
      

      明确写在web.xml

      <servlet-mapping>
        <servlet-name>Options</servlet-name>
        <url-pattern>/js/options.js</url-pattern>
      </servlet-mapping>
      

      (在此之前,这种方法仍然行不通)。

      对于

      @WebServlet(name = "AggregateIconController", urlPatterns = "/images/points/agg.svg")
      public class AggregateIconController extends HttpServlet {
      

      一切都独立运作

    【讨论】:

      猜你喜欢
      • 2014-09-08
      • 1970-01-01
      • 2012-06-21
      • 2023-03-04
      • 2012-08-13
      • 1970-01-01
      • 2013-01-30
      • 2011-06-11
      • 2014-05-28
      相关资源
      最近更新 更多