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 "%r" %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>
没有变化
一切都对我有用。你做了什么
在${catalina.base}/webapps
之外的单独文件夹中取出此主机的应用程序,这在Tomcat
的documentation中有说明]
In order to create virtual hosts, do the following:
- Create a separate directory for each host outside of $CATALINA_HOME/webapps
- Underneath each directory, create a webapps directory.
在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 "%r" %s %b" />
</Host>
将原来的war重命名为ROOT.war
,放在test/webapps
文件夹中。 Tomcat 自己部署在 test/webapps/ROOT
我不了解 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 {
一切独立运作
我有一个域 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 "%r" %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>
没有变化
一切都对我有用。你做了什么
在
的documentation中有说明]${catalina.base}/webapps
之外的单独文件夹中取出此主机的应用程序,这在TomcatIn order to create virtual hosts, do the following:
- Create a separate directory for each host outside of $CATALINA_HOME/webapps
- Underneath each directory, create a webapps directory.
在
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 "%r" %s %b" /> </Host>
将原来的war重命名为
ROOT.war
,放在test/webapps
文件夹中。 Tomcat 自己部署在test/webapps/ROOT
我不了解 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 {
一切独立运作