`

Tomcat下为每个Web应用配置不同的访问端口

 
阅读更多
Tomcat下为每个Web应用配置不同的访问端口

要完成这个目录必须对conf/Server.xml文件进行配置

                            设现在我们有两个应用app1和app2,客户端期望的访问方式是:

                            App1         ->      http://localhost:8081/

                            App2         ->      http://localhost:8082/

                            这样省去了在主机名后面添加ContextPath的麻烦,相信客户更愿意这样使用。

                            实现步骤:

1.        找到conf/server.xml中的service配置节,复制这个service元素,紧跟在后面粘贴一次。如下:

<Servicename="Catalina.app1">

    <Connector port="8081"protocol="HTTP/1.1"

              connectionTimeout="20000"

               redirectPort="8443"/>

    <Engine name="Catalina.app1" defaultHost="localhost">

      <RealmclassName="org.apache.catalina.realm.LockOutRealm">      

        <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"

               resourceName="UserDatabase"/>

      </Realm>

      <Host name="localhost"  appBase="webapps"

            unpackWARs="true"autoDeploy="true">     

        <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"

               prefix="localhost_access_log."suffix=".txt"

               pattern="%h %l %u %t&quot;%r&quot; %s %b" />

                   <Context path="/"docBase="app1" />

      </Host>      

    </Engine>

</Service>

说明:红色加粗是特别要注意的部分。

         1.1、<Servicename="Catalina.app1">,这里设置Service的名字为Catalina.app1,是随便取的名字不能和当前这个文件已有的Service元素同名。

         1.2、<Connectorport="8081"…/,这里设置当前服务的Http Connector监听的端口为8081,注意不能和已有的其它Service的Connector的监听端口相同。

         1.3、<Enginename="Catalina.app1"defaultHost="localhost">,这里设置Engine的名字为Catalina.app1也不是必须的,你可以换其它名字,但是还是不要和其它Engine重名就行了。defaultHost这个属性指出当前Engine根据主机头在它的子元素中找不到匹配名称的虚拟主机时所要访问的缺省虚拟主机。我们这儿Engine里面只有一个虚拟主机因此缺省主机也是它。当然defaultHost属性指定的主机名称在它的子元素里面是必须存在的。

         1.4、<Host name="localhost"  appBase="webapps" />,name属性指定虚拟主机的名字,一般是Internet域名,Engine会根据HTTP协议请求里面的主机头Host的值来匹配这里的虚拟主机名,如果匹配就交给该虚拟主机处理。比如,如果你的客户端访问地址是:http://qrkx.uten.cn:8090/index.jsp,那么这里虚拟主机名字就应该为qrkx.uten.cn,当然请求中的端口号是前面连接器最先使用的。appBase属性指出虚拟主机上的Web应用是部署在哪里的。一个虚拟主机上可以同时部署多个Web应用,那么appBase就是指出这些应用的存放位置,这里可以使带盘符的绝对路径,像d:/webapps.也可以是相对路径。这个相对路径的起点就是Tomcat的安装目录。这里appBase属性我们设置为webapps表示当前虚拟主机的Web应用存放目录为tomcat安装目录下的webapps目录里面。

         1.5、<Context path="/"docBase="app1" />,这个是最为关键的部分了。一个虚拟主机里面可以部署多个Web应用,而每个Web应用就是一个Context,因此这里可以配置多个Context元素,每个表示一个Web应用程序上下文。Path属性表示访问这个Web应用的路径,”/”表示这个Context是当前虚拟主机的缺省Web应用程序,也可以为空字符串“”,这样改Context可以用处理所有不匹配任何其它Context的 Context path请求。我们访问的时候就不用输入Web应用的名称了,可以如下访问http://localhost:80801/,如果你像这样配置:<Contextpath="/app1" docBase="app1" />,那么你就要这样访问:http://localhost:80801/app1/。总结一下意思就是在一个虚拟主机下只有一个Web应用是采用根路径的,其它必须要指定特别的访问路径【根路径只有一个】,比如path="/app1"、path="/app2"、path="/app3"等。

         docBase="app1"这个属性指出当前Web应用程序的存放路径,可以是相对路径也可以是绝对路径,绝对路径就是带盘符的路径,比如:d:/app1,相对路径就是以Host元素的appBase属性指定的路径为起点的路径。这里docBase="app1"表示我们的当前Web应用程序是在Tomcat安装目下的webapps目录下的app1目录。

2、重复步骤一再次创建一个Service

<Servicename="Catalina.app2">

    <Connector port="8082"protocol="HTTP/1.1"

              connectionTimeout="20000"

               redirectPort="8443"/>

    <Engine name="Catalina.app2" defaultHost="localhost">

      <RealmclassName="org.apache.catalina.realm.LockOutRealm">      

        <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"

               resourceName="UserDatabase"/>

      </Realm>

      <Host name="localhost"  appBase="webapps"

            unpackWARs="true"autoDeploy="true">     

        <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"

               prefix="localhost_access_log."suffix=".txt"

               pattern="%h %l %u %t&quot;%r&quot; %s %b" />

                   <Context path="/"docBase="app2" />

      </Host>      

    </Engine>

</Service>



3、启动Tomcat,观察日志输出



信息: Deploying webapplication directory E:WorkSpaceJavaWorkspaceTomcat 7.0webappsapp1

2012-6-414:03:36 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info

信息: Parsingconfiguration file [struts-default.xml]

2012-6-414:03:37 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info

信息: Parsingconfiguration file [struts-plugin.xml]

2012-6-414:03:37 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info

信息: Parsingconfiguration file [struts.xml]

2012-6-414:03:38 org.apache.catalina.startup.HostConfig deployDirectory

信息: Deploying webapplication directory E:WorkSpaceJavaWorkspaceTomcat 7.0webappsapp2

2012-6-414:03:39 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info

信息: Parsingconfiguration file [struts-default.xml]

2012-6-414:03:39 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info

信息: Parsingconfiguration file [struts-plugin.xml]

2012-6-414:03:39 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info

信息: Parsingconfiguration file [struts.xml]



4、通过浏览器访问:

         http://localhost:80801/index.jsp

         我们通过观察浏览器发出的请求头如下:

Request URL: http://localhost:8081/index.jsp

Request Method:GET

Status Code:200 OK

Request Headersview source

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3

Accept-Encoding:gzip,deflate,sdch

Accept-Language:zh-CN,zh;q=0.8

Cache-Control:max-age=0

Connection:keep-alive

Cookie:JSESSIONID=CADAAC6E5B9366F4590E50B889BE58BF

Host:localhost:8081

Pragma:no-cache

User-Agent:Mozilla/5.0 (Windows NT 5.1)AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19 QIHU360EE

Response Headersview source

Content-Length:1235

Content-Type:text/html;charset=UTF-8

Date:Mon, 04 Jun 2012 06:24:19 GMT

Server:Apache-Coyote/1.1

Set-Cookie:JSESSIONID=BA86EAD5BBDF7BB51343377C88588AB8;Path=/; HttpOnly



         请注意红色的部分就是主机头,一般是Internet域名。



         http:// localhost:80802/ognl.jsp

         这里和上面做法一样,主机头是:Host:localhost:8082

5、观察Tomcat的conf目录:

       

         你发现了什么?????????????????????????????????????

         Catalina.app1和Catalina.app2是我们分别配置的两个Engine的名字。打开这两个目录,我们发现:

       

         里面都有个localhost,其实这是我们上面配置的虚拟主机名称,如果你配置的虚拟主机名称是qrkx.uten.cn,那么这里目录的名称就是qrkx.uten.cn了。



         注意:如果你的Webapps目录下有ROOT目录请将其更名或删除,否则访问地址:http://localhost:8081和http://localhost:8082是会出问题的。官方文档有这样的说明:If the contextPath is a zero length string, the base name isROOT

使用主机头示范,由于测试环境没有DNS服务器,搭建太麻烦。我们通过修改本机的如下文件模拟实现:

C:WINDOWSsystem32driversetcHOSTS,该文件作用:

host是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析。

我们在文件中添加如下:

127.0.0.1 localhost

127.0.0.1 app1.family.cn

127.0.0.1 app2.family.cn

然后修改server.xml文件中虚拟主机的主机头分别为:

<Servicename="Catalina.app1">

   <Connector port="8081" protocol="HTTP/1.1"

              connectionTimeout="20000"

               redirectPort="8443"/>

   <Engine name="Catalina.app1" defaultHost="app1.family.cn">

      <Realm className="org.apache.catalina.realm.LockOutRealm">      

        <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"

              resourceName="UserDatabase"/>

      </Realm>

      <Host name="app1.family.cn"  appBase="webapps"

            unpackWARs="true" autoDeploy="true">     

        <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"

              prefix="localhost_access_log." suffix=".txt"

               pattern="%h %l %u %t&quot;%r&quot; %s %b" />

                   <Contextpath="" docBase="app1" />

      </Host>      

   </Engine>

</Service>

<Service name="Catalina.app2">

   <Connector port="8082" protocol="HTTP/1.1"

              connectionTimeout="20000"

               redirectPort="8443"/>

   <Engine name="Catalina.app2" defaultHost="app2.family.cn">

      <RealmclassName="org.apache.catalina.realm.LockOutRealm">      

        <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"

              resourceName="UserDatabase"/>

      </Realm>

      <Host name="app2.family.cn"  appBase="webapps"

            unpackWARs="true"autoDeploy="true">     

        <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"

              prefix="localhost_access_log." suffix=".txt"

               pattern="%h %l %u %t&quot;%r&quot; %s %b" />

                   <Contextpath="" docBase="app2" />

      </Host>      

   </Engine>

</Service>
重新启动Tomcat,在浏览器地址栏访问如下地址:

http://app1.family.cn:80801/inde.jsp

http://app1.family.cn:80802/ognl.jsp

成功!!!!!!!!!
观察Tomcat下的conf目录:
不难发现,在两个Engine的名称的目录下各自生成了虚拟主机名称的目录。
分享到:
评论

相关推荐

    一个tomcat配置多个端口运行不同项目

    本教程将深入探讨如何配置Apache Tomcat 8.5.11以支持在一个实例中同时运行多个项目,每个项目绑定到不同的端口,以实现资源的有效利用和管理。 首先,我们需要了解Tomcat的基本结构。在解压的`apache-tomcat-...

    weblogic集成多个Tomcat服务,自动分配tomcat服务,80端口访问

    2. 配置WebLogic的外部服务器:在WebLogic管理控制台中,为每个Tomcat实例创建一个新的“外部服务器”配置,指定Tomcat的地址和端口。 3. 集成Tomcat和WebLogic:使用WebLogic的WLST(WebLogic Scripting Tool)或...

    Tomcat配置Web站点.ppt

    配置Web站点的虚拟目录可以让多个Web应用共享同一个Tomcat实例。在Tomcat中,虚拟目录也称为Context,可以通过修改`conf/server.xml`文件来添加。例如,可以将`/mail/bbs`和`/book`映射到不同的文件系统路径,实现多...

    Tomcat支持不同的域名访问各自不同程序的配置方法

    综上所述,配置Tomcat支持不同域名访问各自独立的应用程序主要涉及`server.xml`的修改,通过`Host`和`Context`元素来定义虚拟主机和Web应用的关系。通过灵活地调整这些配置,可以实现一台服务器上多个独立的Web服务...

    Tomcat与Java.Web开发技术详解(PDF)

    6. **安全性**:在Tomcat中实现Web应用的安全性,可以配置SSL/TLS以提供加密传输,设置角色和权限进行访问控制,使用 valves 进行自定义过滤,以及利用安全管理器强化服务器安全。 7. **JNDI与Context**:Java ...

    Tomcat配置方法 Tomcat配置方法 Tomcat配置方法

    3. **context.xml**:每个Web应用可以有自己特定的上下文配置,但全局的`context.xml`位于`conf`目录下,用于设置默认的上下文参数。 4. **web.xml**:虽然不是Tomcat特有的,但它是部署描述符,定义了应用的默认...

    Tomcat6部署一个web工程 配置SSL双域名双证书

    标题中的“Tomcat6部署一个web工程配置SSL双域名双证书”是指在Apache Tomcat 6版本中,如何为一个Web应用程序配置SSL(Secure Sockets Layer)以支持两个不同的域名并使用各自的数字证书进行安全通信。这个过程对于...

    Tomcat与Java.Web开发技术详解

    在Tomcat中部署Java Web应用通常有两种方式:一是将应用打包为WAR文件放入webapps目录下,Tomcat会自动解压并部署;二是通过管理工具如Manager App进行在线部署。 六、Tomcat的管理和监控 Tomcat提供了一个管理...

    从安装和配置 Apache Tomcat 到部署和运行 Java Web 应用程序详细教学.rar

    - 配置虚拟主机:通过`server.xml`的`Host`元素,可以为Tomcat添加多个虚拟主机,每个主机对应不同的域名或IP地址。 - 日志管理:Tomcat的日志文件位于`%CATALINA_HOME%\logs`,可以通过修改`logging.properties`...

    Tomcat应用文档

    其中最重要的包括`server.xml`(核心配置文件)、`web.xml`(Web应用配置)、`context.xml`(每个Web应用的配置)等。 - **/logs**:默认的日志文件存放目录。包括访问日志和错误日志等。 - **/webapps**:部署Web...

    tomcat5配置详解

    - **web.xml**: 每个Web应用的部署描述符,定义Servlet、过滤器、监听器等。 - **logging.properties**: 控制Tomcat日志输出的配置文件。 - **catalina.properties**:包含Tomcat的其他全局属性。 4. **高级...

    Tomcat 域名设置,配置

    接下来,我们需要在`&lt;Host&gt;`标签内部添加具体的`&lt;Context&gt;`配置,用于指定每个Web应用的具体路径和上下文路径。 ```xml ``` - `path`属性:指定Web应用的上下文路径(访问路径)。 - `docBase`属性:指定Web应用...

    同时部署多个Tomcat

    1. 应用隔离:每个Tomcat实例可以独立运行不同的Web应用,避免一个应用的问题影响其他应用。 2. 负载均衡:通过配置负载均衡器,可以将请求分发到多个Tomcat实例,提高系统处理能力。 3. 故障转移:当某个Tomcat实例...

    Tomcat Tomcat Tomcat Tomcat

    5. **Web应用程序目录结构**:一个标准的Tomcat部署通常包含多个Web应用程序,每个应用都有自己的目录结构,如WEB-INF目录下的web.xml文件,它是Web应用的部署描述符,定义了应用的配置信息。 6. **配置文件**:...

    Tomcat如何配置去项目名称访问.doc

    在本篇内容中,我们将深入探讨如何在Apache Tomcat服务器上配置项目以便去除项目名称进行访问,以及如何部署多个项目并设置不同的访问路径。Tomcat是Apache软件基金会的Jakarta项目下的一个开源Java Servlet容器,它...

    ServletJSP深入详解:基于Tomcat的Web开发第一章02.pdf

    Context代表一个Web应用程序。Web应用程序可以包含Servlet、JSP页面以及其他Web资源,存储在一个特定的路径下。 ### Tomcat配置 Tomcat的配置主要通过XML文件进行,位于`${CATALINA_HOME}/conf`目录下: #### ...

    xp/win7上配置多个tomcat

    在IT领域,特别是对于Web应用开发与部署而言,配置多个Tomcat服务器实例是常见的需求,尤其是在Windows XP或Win7这样的操作系统环境下。本文将深入探讨如何在XP或Win7系统上成功配置并运行多个Apache Tomcat服务器,...

    修改Tomcat默认访问根目录的方法

    在Web应用开发和部署中,Apache Tomcat是一个广泛使用的开源Servlet容器,它用于提供运行Java代码的...同时,通过在server.xml中添加自定义的配置,可以灵活地控制每个Web应用的运行行为,以适应不同的开发和部署需求。

Global site tag (gtag.js) - Google Analytics