gpt4 book ai didi

java - URL 中的复制服务器名称

转载 作者:行者123 更新时间:2023-11-28 22:10:31 25 4
gpt4 key购买 nike

我在配置 Apache 和 Tomcat 时遇到了问题。我的目的是能够访问 tui.org/servlet,当 tui.org 是我在本地机器上配置的虚拟主机和 /servlet/ 是在 web.xml 中定义的 url-pattern。但是我得到 404 Not Found by Tomcat 的 servelet 但我可以通过 tui.org/tui.org/servlet 访问我的服务器 - 它有效。我服务器上的文件结构如下:

Root: /var/www/tui.org
-------->/WEB-INF/classes/a
-------->/WEB-INF/classes/a/MainServlet.class
-------->/WEB-INF/web.xml
-------->/index.html

我怎样才能实现这种行为?

web.xml:

<servlet-mapping>
<servlet-name>mainServlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>

我的服务器.xml:

<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>

<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>

<Host name="localhost" appBase="/var/www/"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
</Engine>
</Service>
</Server>

tui.org 的配置(tui.org.conf 位于/etc/apache2/sites-available:

<VirtualHost *:80>
ServerName tui.org
DocumentRoot /var/www/tui.org

<Directory /var/www/tui.org>
AllowOverride All
Require all granted
</Directory>

JkMount /servlet* ajp13_worker
</VirtualHost>

我使用 Apache2、tomcat9 和 Ubuntu 18.04。

提前致谢!

附言对不起我的英语。

最佳答案

这里有几个问题:

  • 不得使用 Apache 提供网络应用程序目录 - 例如你在声明 DocumentRoot /var/www/tui.org适用于 Apache 和 <Host appBase="/var/www/">对于汤姆猫。
    • 例如但不限于:servlet 规范明确禁止将目录 WEB-INF 提供给客户端,而您明确绕过了此限制。
  • 部署在 Host 中的应用程序的 appBase始终以该名称部署(除非在 context.xml 文件中以不同方式指定)。该规则的唯一异常(exception)是目录名为 ROOT。 - 在这种情况下,它的部署没有名称,因此省略了服务器名称后面的 tui.org。
    • 但这对于通过 Apache httpd 为整个 webapp 提供服务的问题来说是次要的。先修复那个

解决最大问题的一种方法是省略 DocumentRoot Apache 中的指令,而是服务于 Tomcat 中的所有内容:JkMount * ajp13_worker .

关于java - URL 中的复制服务器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51678410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com