zoukankan      html  css  js  c++  java
  • Apache 与 Tomcat 整合

    目标

    1、同一台机器上,不同的域名指向,访问不同的项目,即:
    (1)one.test.com 访问 project_one
    (2) two.test.com 访问 project_two
     
    2、将Tomcat布署为Apache的后端服务,若为动态程序由Tomcat执行,静态文件由Apache执行

    准备

    1、安装apache、tomcat、JDK。这三个安装都比较简单,网上的资料也很多,忽略之。几个重要的路径这里说明一下:
    Apache的根目录为:  E:/Apache_Server
    Web项目路径为:     E:/Apache_Server/www(即Apache的DocmentRoot路径)
    
    tomcat的根目录为:  E:Apache_tomcat
    2、下载tomcat-connectors,解压有一个mod_jk.so,用于扩展Apache,让Apache可以识别出jsp等动态语言,并将其转发到Tomcat
     
    3、为方便测试,添加两个域名
    在C:WindowsSystem32driversetchost文件中末尾,追加一行:
    127.0.0.1 one.test.com two.test.com

    tomcat配置

    (1)设置http访问端口,这里设为 8081(任选一个不被占用的端口,只与Apache访问端口分开就行)
    <Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443" compressableMimeType="text/html,application/xml,application/json,application/javascript,text/css,text/plain" />

    (2)设置AJP端口,这里设为8009。此端口在后续需配置到Apache中, Apache通过该端口将任务转发到Tomcat

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" compressableMimeType="text/html,application/xml,application/json,application/javascript,text/css,text/plain"  />
    (3)配置项目路由及域名
    在tomcat/conf/server.xml中,在Engine节点下增加两个Host节点。Host节点中配置项目的访问域名name、项目路径docBase等信息,如下:
    <Host appBase="webapps" autoDeploy="true" name="one.test.com" unpackWARs="true">
       <Context path="" docBase="E:/Apache_Server/www/project_one" debug="0" reloadable="true"/>
           <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>
     </Host>    
    
    <Host appBase="webapps" autoDeploy="true" name="two.test.com" unpackWARs="true">
       <Context path="" docBase="E:/Apache_Server/www/project_two" debug="0" reloadable="true"/>
           <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>
     </Host>

    Apache配置

    1、设置服务访问端口,因我的机器80端口正在使用,所以这里设为:8082
    Listen 8082
    2、添加mk模块:
    (1)解压tomcat-connectors,将其内的mod.jk.so拷贝到apache/modules文件夹之下
    (2)在apache/conf/http.conf中添加:
    LoadModule jk_module modules/mod_jk.so
    JkWorkersFile conf/workers.properties
    JkLogFile logs/mod_jk.log
    3、apache/conf目录下,增加workers.properties文件,内容如下所示,指定协议为ajp,对应端口为8009(与Tomcat中的配置一致)
    workers.tomcat_home=E:Apache_tomcat
    workers.java_home=D:Java1.8jdk
    ps=/
    worker.list=worker_one,worker_two
     
    worker.worker_one.port=8009
    worker.worker_one.host=localhost
    worker.worker_one.type=ajp13
     
    worker.worker_two.port=8009
    worker.worker_two.host=localhost
    worker.worker_two.type=ajp13
     
    4、添加虚拟主机
    http.conf中,将这三个与虚拟主机相关的配置前的“#”去掉,即使之生效。
    LoadModule access_compat_module modules/mod_access_compat.so
    LoadModule vhost_alias_module modules/mod_vhost_alias.so
    Include conf/extra/httpd-vhosts.conf

    在 conf/extra/httpd-vhosts.conf 文件中,添加虚拟主机的配置信息。用JkMount指定哪些内容将转发给Tomcat处理。

    <VirtualHost *:8082>
        DocumentRoot "E:Apache_Serverwwwproject_one"
        ServerName one.test.com
        ServerAlias one.test.com
     
        JkMount /servlet/* worker_one
        JkMount /*.jsp worker_one
        JkMount /*.htm worker_one
        JkMount /*.html worker_one
        JkMount /*.do worker_one
        JkMount /* worker_one
     
        <Directory "E:Apache_Serverwwwproject_one">
            Options -Indexes +FollowSymLinks +Includes
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
    
    <VirtualHost *:8082>
        DocumentRoot "E:Apache_Serverwwwproject_two"
        ServerName two.test.com
        ServerAlias two.test.com
     
        JkMount /servlet/* worker_two
        JkMount /*.jsp worker_two
        JkMount /*.htm worker_two
        JkMount /*.html worker_two
        JkMount /*.do worker_two
        JkMount /* worker_two
     
        <Directory "E:Apache_Serverwwwproject_two">
            Options -Indexes +FollowSymLinks +Includes
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost> 

    配置到此就完成了。

    最后,重启Tomcat、重启Apache即可

    测试

    1、测试jsp网页

    在apache的DocmentRoot路径下,增加web.jsp文件,内容如下:

    <%@page language="java" import="java.util.*" %>
    Stay hungry Stay foolish !!!
    Now the time is: <%out.println(new Date());%>

     浏览器分别访问Apache和Tomcat:local:8081/wel.jsp、local:8082/wel.jsp,都能看到相同的运行结果,表示整合完成。

    2、接口测试

    在project_one项目中,增加一个接口,随便返回点东西,如下:

    protected void doGet(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/json; charset=utf-8");
            PrintWriter out = null;  
            try{  
                out = response.getWriter();  
                out.write("nothing!");  
                out.flush();  
            }catch(IOException e){  
                e.printStackTrace();  
            }  
    }

    相应的web.xml如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <servlet-name>testInferface</servlet-name>
        <servlet-class>com.api.testInferface</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>testInferface</servlet-name>
        <url-pattern>/testInferface</url-pattern>
    </web-app>

    布署上去之后,下面两个链接能对它进行访问,因为one.test.com指向了该项目。

    http://one.test.com:8081/testinferface
    http://one.test.com:8082/testinferface

    而下面这两个则访问不了
    http://two.test.com:8081/testinferface
    http://two.test.com:8082/testinferface

    Over!

  • 相关阅读:
    一段关于生成器代码的解读
    (十三)内置函数
    (十二)生成器和生成器函数,推导式和表达式
    (十一)函数名的使用,闭包,迭代器
    (十)函数的动态传参,作用域
    (九)函数
    (八)文件操作
    (七)深浅拷贝
    (六)id(),is和==,内存常量
    (五)字典,集合
  • 原文地址:https://www.cnblogs.com/Fordestiny/p/9436732.html
Copyright © 2011-2022 走看看