tomcat一个工作目录,通过不同的端口访问不同的文件夹里的页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat一个工作目录,通过不同的端口访问不同的文件夹里的页面相关的知识,希望对你有一定的参考价值。

请问这个详细的配置是怎么样的,我的目录结果如下:
E:\workspace\ShelvesServer\images
E:\workspace\ShelvesServer\css
E:\workspace\ShelvesServer\js
E:\workspace\ShelvesServer\WebRoot\CECMobile
E:\workspace\ShelvesServer\WebRoot\CECMobile\MyApp.html
E:\workspace\ShelvesServer\WebRoot
E:\workspace\ShelvesServer\WebRoot\index.jsp

希望一个端口访问MyApp.html,一个端口访问index.jsp
参照您之前文档的配置(http://zhidao.baidu.com/question/69549723.html)我这里始终实现不了,求助,求助!

参考技术A 主入口使用index.jsp,判断端口,直接返回不同的页面

在两个不同的端口上运行 Tomcat 服务器

【中文标题】在两个不同的端口上运行 Tomcat 服务器【英文标题】:Running Tomcat server on two different ports 【发布时间】:2013-02-20 06:46:13 【问题描述】:

我想部署一个 tomcat 服务器,使其同时侦听两个端口(均用于 http 协议)。

只是为了确保您正确理解此要求,我们只有一个服务器实例,但想在两个端口上侦听 HTTP 协议。例如,任何人都可以使用端口号 7080 和 8080 访问部署在我服务器中的应用程序

有可能做到吗?如果可能的话,我们怎样才能做到这一点?

【问题讨论】:

奇怪的是,如果我使用端口 8080,7080 进行测试,它可以正常工作。如果我用 80 和 8080 测试它,它就会失败。想知道为什么? 80 端口已经被别的东西使用了,比如 Apache Web Servier。 是的,你是对的。出于某种奇怪的原因,我的 Skype 使用此端口 80。一旦我终止了我的 Skype 进程,服务器运行正常。感谢您的回答。 【参考方案1】:

这很简单。您只需要查看conf/server.xml 配置文件即可为您想要的端口添加新的连接器。例如,如果您有这样的连接器:

<Connector port="8080" 
           protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" 
           URIEncoding="UTF-8" />

只需在配置文件中添加与上述相同的新连接器,但更改端口参数。就这样。重启就完成了。

【讨论】:

java.lang.Exception: 套接字绑定失败:[730048] 每个套接字地址(协议/网络地址/端口)通常只允许使用一次。 @Narendra:您是否同时更改了参数“port”和“redirectPort”?你用的是哪个tomcat版本? 我发现我不必更改redirectPort 参数,只要我使用不同的port 值。【参考方案2】:

是的,这是可能的。只需像这样编辑 server.xml(位于名为 conf 的文件夹中):

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8444" />

这将设置 Tomcat 监听 80808081 两个端口。

documenation 声明:

端口:此连接器将在其上创建服务器套接字并等待传入​​连接的 TCP 端口号。您的操作系统将只允许一个服务器应用程序侦听特定 IP 地址上的特定端口号。如果使用特殊值 0(零),则 Tomcat 将随机选择一个空闲端口用于此连接器。这通常只在嵌入式和测试应用程序中有用。

redirectPort: 如果此连接器支持非 SSL 请求,并且接收到匹配的 &lt;security-constraint&gt; 需要 SSL 传输的请求,Catalina 将自动将请求重定向到端口此处指定的编号。

因此,更改redirectPort 是可选的,具体取决于您希望这样的重定向如何工作。

【讨论】:

【参考方案3】:

在不同的端口运行 tomcat。我们必须更改 server.xml 文件的服务标签内的四件事

    我们必须更改端口号。比如8080到80 我们必须将redirectPort no like 8443 更改为8444 我们必须将引擎名称(例如 Catalina)更改为 Catalina_2 我们必须将 appBase 名称(如 webapps)更改为 webapps_1

【讨论】:

【参考方案4】:

您可以在 /conf/server.xml 中定义 2 个不同的服务。

示例如下,

<Service name="Catalina_2">
    <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
    <Engine name="Catalina_2" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="webapps_2" 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>


  <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="webapps" 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>

注意:您可能需要增加 tomcat 堆大小。

【讨论】:

我喜欢这个答案如何隔离每个端口的日志文件等。当出现一些错误时,这将在故障排除中大有裨益。【参考方案5】:

请确定您在哪个用户上运行 Tomcat,因为如果您想在任何特权端口上使用它,您必须在 root 用户下使用它。

您可以做的另一件事是使用 iptables 将端口 80 重定向到 8080。 像这样的:

iptables -t nat -A PREROUTING -d 192.168.10.16 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

希望对你有帮助

【讨论】:

我不明白为什么不这样做。也许他需要使用另一个低于 1024 的端口,只是以端口 7080 为例。其他答案也有效,这是另一种方法。 我喜欢这个答案,因为它还谈到了潜在的解决方案,其中 iptables 是一种有效的方法,而编辑预配置的服务器不是(我有一个不正确的 Dockerized 应用程序有一个问题可以简洁地解决) 【参考方案6】:

您可以在 server.xml 中指定以下代码

<Service name="sample">

    <Connector port="81" protocol="HTTP/1.1" maxThreads="100" connectionTimeout="2000"/>

    <Engine name="sample" defaultHost="sample">
         <Host name="myhostname" appBase="webapp2">
             <Context docBase="C:\websites\sample\" />
         </Host>
     </Engine>

</Service>

【讨论】:

我收到以下错误:java.lang.Exception:套接字绑定失败:[730048] 每个套接字地址(协议/网络地址/端口)通常只允许使用一次。 您是否将端口从 81 更改为您的要求。 这不起作用我的控制台中出现许多异常说 java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 无法初始化组件 [StandardEngine[sample].StandardHost[m yhostname].StandardContext[null]] .................. 原因:org.apache.catalina.LifecycleException: A child container failed during start 在这种情况下,您可以删除上下文标签再次运行,这将正常运行。

以上是关于tomcat一个工作目录,通过不同的端口访问不同的文件夹里的页面的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat 7通过设置不同的端口部署两个项目(实际项目)

tomcat 不同域名 不同端口访问项目

tomcat部署多war包

tomcat8.5一个端口运行多个项目

Nginx配置二级目录/路径 映射不同的反向代理和规避IP+端口访问

怎样设置多个tomcat使用同一个端口