Tomcat 上的虚拟主机

Virtual hosts on Tomcat

我有一个域 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 页面时 returns.

添加规则到 web.xml

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

没有变化

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

  1. ${catalina.base}/webapps之外的单独文件夹中取出此主机的应用程序,这在Tomcat

    documentation中有说明]

    In order to create virtual hosts, do the following:

    1. Create a separate directory for each host outside of $CATALINA_HOME/webapps
    2. Underneath each directory, create a webapps directory.
  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 {
    

    一切独立运作