本章目录:
1、tomcat的概述
2、tomcat的架构详解
3、部署apache-tomcat+JDK+mysql+java应用(论坛)
4、整合apache+apache-tomcat实现动静页面分离
5、测试动静分离是否成功:

1、tomcat及JSP的概述:
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器(*.jsp)。

一般用于小型企业的jsp页面,因为一个tomcat最大连接数一般在1024以下,处理能力有限。

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。

Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

这里的诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS、Apache、nginx等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。


常用JSP WEB服务器:
1、WebLogic --是BEA公司的产品,是目前应用最广泛的Web服务器,支持JavaEE规范,而且不断的完善以适应新的开发要求.
2、WebSphere --IBM公司的产品,支持JavaEE规范
3、Jboss --大名鼎鼎的红帽的产品,原来属于开源组织Jboss,后被红帽收购。支持JavaEE规范,免费
4、Tomcat --在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服务器:Tomcat,该服务器支持全部JSP以及Servlet规范


2、tomcat的架构详解

1)安装tomcat+jdk(jvm)

安装JDK
# tar xf jdk-7u15-linux-x64.tar.gz -C /opt
# cd /opt
# ln -s /opt/jdk1.7.0_15/ /opt/jdk


安装tomcat
# tar tar xf apache-tomcat-7.0.37.tar.gz -C /opt/.
# ln -s /opt/apache-tomcat-7.0.37/ /opt/tomcat

编译tomcat的启动命令,简化tomcat的管理
# cd /opt/tomcat/bin/
# tar xzvf jsvc.tar.gz
# cd jsvc-src/
# chmod +x configure
# ./configure  --with-java=/opt/jdk && make
# cp jsvc /opt/tomcat/bin

创建启动脚本并启动tomcat服务:
# cd /usr/local/src/tomcat/init.d/
# cp -a tomcat /etc/init.d/tomcat
# chkconfig --add tomcat
# chkconfig tomcat on
# service tomcat start
# netstat -tnlp |grep jsvc
tcp        0      0 :::8009                     :::*                        LISTEN      18414/jsvc.exec     --缓存端口
tcp        0      0 :::8080                     :::*                        LISTEN      18414/jsvc.exec     --对外端口


2)Tomcat目录详解:
|---bin --存放启动和关闭tomcat脚本;
|---conf --存放不同的配置文件(server.xml和web.xml);
|---doc --存放Tomcat文档;
|---lib/ --存放Tomcat运行需要的库文件(JARS);
|---logs --存放Tomcat执行时的LOG文件;
|---src --存放Tomcat的源代码;
|---webapps --Tomcat的主要Web发布目录(包括应用程序示例);
|---work --存放jsp编译后产生的class文件;




3)Tomcat 的总体结构

file:///tmp/ct_tmp/1.png




4)Tomcat Server的结构图

file:///tmp/ct_tmp/2.png




5)conf/server.xml目录结构:
<Server>  
   <Listener />  
   <GlobaNamingResources>  
   </GlobaNamingResources  
   <Service>  
       <Connector />  
       <Engine>  
           <Logger />  
           <Realm />  
              <host>  
                  <Logger />  
                  <Context />  
              </host>  
       </Engine>  
   </Service>  
</Server>  


<Server>元素
它代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口来定义.它包含一个或多个<Service>元素.并且它不能做为任何元素的子元素.

file:///tmp/ct_tmp/3.png



1>className指定实现org.apache.catalina.Server接口的类.默认值为org.apache.catalina.core.StandardServer
2>port指定Tomcat监听shutdown命令端口.终止服务器运行时,必须在Tomcat服务器所在的机器上发出shutdown命令.该属性是必须的.
3>shutdown指定终止Tomcat服务器运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置

测试:
telnet localhost 8005  
输入:SHUTDOWN
结果:关闭tomcat


<Service>元素
该元素由org.apache.catalina.Service接口定义,它包含一个<Engine>元素,以及一个或多个<Connector>,这些Connector元素共享用同一个Engine元素

file:///tmp/ct_tmp/4.png



1>className 指定实现org.apahce.catalina.Service接口的类.默认为org.apahce.catalina.core.StandardService
2>name定义Service的名字


<Connector>元素
一个“Connector”(连接器)代表一个请求被接收和应答所需要的端点。每个连接器通过相关的“Container”(容器)处理请求。默认情况下,一个
非SSL的HTTP/1.1的连接器被绑定在端口8080。你也可以通过根据后面的使用说明并取消第二个连接器入口的注释,在端口8443上建立一个SSL HTTP/1.1的连接器。

file:///tmp/ct_tmp/5.png



Coyote HTTP/1.1 Connector

className:
该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector

port:
在端口号8080处侦听来自客户browser的HTTP1.1请求.如果把8080改成80,则只要输入 http://localhost/即可

protocol:
设定Http协议,默认值为HTTP/1.1

minSpareThreads:
该Connector先创建5个线程等待客户请求,每个请求由一个线程负责

maxSpareThread:
设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200

acceptCount:
当现有线程已经达到最大数时,为客户请求排队.当队列中请求数超过设定值时,后来的请求返回Connection refused错误

redirectport:
当客户请求是https时,把该请求转发到端口8443去

enableLookups:
如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用request.getRemoteHost方法返回客户机主机名.默认值为true

connectionTimeout:
定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间



<Engine>元素
每个Service元素只能有一个Engine元素.处理在同一个<Service>中所有<Connector>元素接收到的客户请求.由org.apahce.catalina.Engine接口定义.

file:///tmp/ct_tmp/6.png



1>className
指定实现Engine接口的类,默认值为StandardEngine

2>defaultHost
指定处理客户的默认主机名,在<Engine>中的<Host>子元素中必须定义这一主机

3>name
定义Engine的名字

在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>


<Host>元素

file:///tmp/ct_tmp/7.png


1> appBase :
指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录.如果没有此项,默认为<CATALINA_HOME>/webapps. 它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处理

2>
autoDeploy:
如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用

3> unpackWARs:
如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件

4> alias:
指定主机别名,可以指定多个别名

5>
deployOnStartup:
如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用中的server.xml没有相应的<Context>元素,将采用Tomcat默认的Context (/opt/tomcat/webapps)


6)配置默认主页
主页:web应用中web.xml:
   <welcome-file-list>
       <welcome-file>index.html</welcome-file>
       <welcome-file>index.htm</welcome-file>
       <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>


7) Tomcat Server处理一个http请求的过程
假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp -->tomcat(ip)

1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/wsota/wsota_index.jsp ,匹配它所拥有的所有Context  
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser


3、部署apache-tomcat+JDK+mysql+java应用(论坛)

file:///tmp/ct_tmp/8.png


file:///tmp/ct_tmp/9.png



--apache 前端调试器(直接解析静态页面/把动态页面发送后端中间件服务器)
--tomcat 接收动态页面的请求,呼叫jdk来编译动态页面
--JDK 编译java程序(页面),调度mysql


####################以下步骤如果前面已经完成,可以不用需要做了############################
1.安装JDK
# tar xf jdk-7u15-linux-x64.tar.gz -C /opt
# cd /opt
# ln -s /opt/jdk1.7.0_15/ /opt/jdk


2.安装tomcat(二进制版)
# tar tar xf apache-tomcat-7.0.37.tar.gz -C /opt/
# ln -s /opt/apache-tomcat-7.0.37/ /opt/tomcat


创建启动脚本并启动tomcat服务:
# cd /usr/local/src/tomcat/init.d/
# cp -a tomcat /etc/init.d/tomcat
# chkconfig --add tomcat
# chkconfig tomcat on
# service tomcat start
# netstat -tnlp |grep jsvc
tcp        0      0 :::8009                     :::*                        LISTEN      18414/jsvc.exec     --缓存端口
tcp        0      0 :::8080                     :::*                        LISTEN      18414/jsvc.exec     --对外端口

# ls /opt/tomcat/ -l|grep ^d
drwxr-xr-x 3 root root  4096 Mar 30 19:26 bin
drwxr-xr-x 2 root root  4096 Mar 30 19:33 conf --配置文件所在的目录
drwxr-xr-x 2 root root  4096 Mar 30 19:23 lib --库文件
drwxr-xr-x 2 root root  4096 Mar 30 19:33 logs --日志
drwxr-xr-x 3 root root  4096 Mar 30 19:33 temp
drwxr-xr-x 7 root root  4096 Jul 22  2008 webapps --默认网页根目录
drwxr-xr-x 3 root root  4096 Mar 30 19:33 work

测试tomcat是否能看到默认页面:
# firefox http://server:8080
#####################以上步骤如果前面已经完成,可以不用需要做了############################



3.创建数据库,数据用户

# yum -y install mysql-server mysql


初始化配置:
mysql> delete from mysql.user where user='';
Query OK, 2 rows affected (0.00 sec)

mysql> update mysql.user set password=password('123');
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

为java论坛创建两个数据库及对应数据用户:
# mysql -uroot -p123
mysql> create database java1;
Query OK, 1 row affected (0.05 sec)

mysql> grant all on java1.* to user01@'localhost' identified by '123';
Query OK, 0 rows affected (0.10 sec)

mysql> create database java2;
Query OK, 1 row affected (0.07 sec)

mysql> grant all on java2.* to user02@'localhost' identified by '123';
Query OK, 0 rows affected (0.03 sec)

4、上传JAVA论坛的页面:
# mkdir /webroot/bbs1.uplooking.com -p
# mkdir /webroot/bbs2.uplooking.com -p
# cd /root/tomcat
# unzip JavaCenter_Home_2.0_Source_UTF8.zip
# cp -r JavaCenter_Home_2.0_Source_UTF8/source/WebRoot/* /webroot/bbs1.uplooking.com


# unzip ejforum-2.3.zip
# cd ejforum-2.3/ejforum/
# mv * /webroot/bbs2.uplooking.com -p



5、创建第二个tomcat的虚拟主机:
# vim /opt/tomcat/conf/server.xml
   <Engine name="Catalina" defaultHost="localhost">
     <Realm className="org.apache.catalina.realm.LockOutRealm">
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
              resourceName="UserDatabase"/>
     </Realm>
     <Host name="bbs1.uplooking.com"  appBase="/webapps"
           unpackWARs="true" autoDeploy="true"  deployOnStartup="true">
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/opt/tomcat/logs"
              prefix="bbs1.uplooking.com_access_log." suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
       <Context path="" docBase="/webroot/bbs1.uplooking.com" />
     </Host>

     <Host name="bbs2.uplooking.com"  appBase="/opt/tomcat/webapps"
           unpackWARs="true" autoDeploy="true"  deployOnStartup="true">
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/opt/tomcat/logs"
              prefix="bbs2.uplooking.com_access_log." suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
       <Context path="" docBase="/webroot/bbs2.uplooking.com" />
     </Host>
   </Engine>



# vim /etc/hosts
192.168.0.1       bbs1.uplooking.com bbs2.uplooking.com



7、测试两个论坛看是否可以访问(看到页面表示成功):
# firefox http://bb1.uplooki专门搬运动态页面给ng.com:8080/install --安装论坛
# firefox http://bbs2.uplooking.com:8080/         --安装请看详细信息




4、整合apache+apache-tomcat实现动静页面分离
apache + tomcat 实现动静分离,统一入口
apache --解析静态页面
tomcat  --解析动态页面

client(html/jsp)-->apache--> mod_jk.so-->(tomcat+jdk)

# yum -y install httpd
# vim /etc/httpd/conf/httpd.conf
LoadModule jk_module modules/mod_jk.so --加载一个mod_jk模块
Include conf/mod_jk.conf --模块对应配置文件
JkWorkersFile conf/workers.properties --定义一个机器人,专门搬运动态页面给tomcat解析
JkMountFile conf/uriworkermap.properties --定义哪些属于动态页面的类型


创建mod_jk模块:
# cp mod_jk-1.2.28-httpd-2.2.X.so /etc/httpd/modules/mod_jk.so

# vim /etc/httpd/conf/mod_jk.conf
JkLogLevel info
JkLogFile logs/jk.log
JkShmFile logs/jk-runtime-status
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkRequestLogFormat "%w %V %T"
JkOptions  +ForwardKeySize +ForwardURICompat -ForwardDirectories



# vim /etc/httpd/conf/workers.properties
workers.tomcat_home=/opt/tomcat
workers.java_home=/opt/jdk
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=1


# vim /etc/httpd/conf/uriworkermap.properties --动静分离的依据
/*.jsp*=worker1 --所有的JSP页面都交给tomcat
/forum-*.html=worker1   --- 伪静态页面(一个jsp页面)

!/*.gif worker1
!/*.jpg worker1
!/*.png worker1
!/*.ico worker1
!/*.css worker1
!/*.js worker1
!/*.htm worker1
!/*.html worker1
!/*.asp worker1
!/*.aspx worker1
!/*.txt worker1
!/*.swf worker1
!/*.flv worker1
!/*.php worker1


定义apache的虚拟主机,必须跟tomcat的虚拟主机相对应
# vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.html.var index.jsp

NameVirtualHost *:80
<VirtualHost *:80>
   DocumentRoot /webroot/bbs1.uplooking.com
   ServerName bbs1.uplooking.com
   ErrorLog logs/bbs1.uplooking.com-error_log
   CustomLog logs/bbs1.uplooking.com-access_log combined
   JkMountFile conf/uriworkermap.properties
</VirtualHost>
<VirtualHost *: 80>
   DocumentRoot /webroot/bbs2.uplooking.com
   ServerName bbs2.uplooking.com
   ErrorLog logs/bbs2.uplooking.com-error_log
   CustomLog logs/bbs2.uplooking.com-access_log combined
   JkMountFile conf/uriworkermap.properties
</VirtualHost>

<Directory "/webroot">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>






# service httpd restart


5测试动静分离是否成功:
1、关闭tomcat服务器,看否还可能访问和登录
看到的结果无法打开空间首页,但单独访问表态文件时是没有问题的。

2、故意把apache的虚拟主机网页目录指不存在的目录,测试访问论坛;
看到的结果是所有静态页面都无法显示,但tomcat显示的信息是正常的。



*********************************************************

文本安装详细步骤




tomcat的架构详解
---- Server[N个Service(Engine)---多个host(虚拟主机)]

1)安装tomcat+jdk(java)
 
 1> 下载
[root@tomcat ~]# lftp 192.168.0.254
lftp 192.168.0.254:~> cd notes/project/software/
lftp 192.168.0.254:/notes/project/software> mirror tomcat/
Total: 49 directories, 364 files, 0 symlinks                                      
New: 364 files, 0 symlinks
135847627 bytes transferred in 5 seconds (24.27M/s)
lftp 192.168.0.254:/notes/project/software> exit

 2> 安装java程序
[root@tomcat ~]# tar -xf /root/tomcat/jdk-7u15-linux-x64.tar.gz -C /opt/
[root@tomcat ~]# mv /opt/jdk1.7.0_15/ /opt/jdk


 2> 解压到opt
[root@tomcat ~]# tar xf /root/tomcat/apache-tomcat-7.0.37.tar.gz -C /opt/
[root@tomcat ~]# mv /opt/apache-tomcat-7.0.37/ /opt/tomcat



[root@tomcat ~]# find /opt/tomcat/ -maxdepth 1 -type d
/opt/tomcat/      --程序家目录
/opt/tomcat/temp  --临时文件
/opt/tomcat/lib   --库文件 *.jar
/opt/tomcat/conf  --配置文件
/opt/tomcat/logs  --日志目录
/opt/tomcat/bin   --命令
/opt/tomcat/work  --中间结果集
/opt/tomcat/webapps  --帮助手册和jsp页面的家目录




[root@tomcat ~]# export JAVA_HOME=/opt/jdk/  --定义环境变量

--启动tomcat
[root@tomcat ~]# /opt/tomcat/bin/startup.sh
Using CATALINA_BASE:   /opt/tomcat    --程序家目录
Using CATALINA_HOME:   /opt/tomcat    --软件家目录
Using CATALINA_TMPDIR: /opt/tomcat/temp  --临时文件
Using JRE_HOME:        /opt/jdk/         --java程序
Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar  --内部库文件

[root@tomcat ~]# netstat -tnlp |grep :80
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      2451/java           
tcp        0      0 :::8009                     :::*                        LISTEN      2451/java           
tcp        0      0 :::8080                     :::*                        LISTEN      2451/java


--访问
http://192.168.0.1:8080/


8005 内部管理端口
8009 ajp协议 连接内部程序与库文件
8080 http协议 数据的交互

  --关闭tomcat
[root@tomcat ~]# telnet localhost 8005
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SHUTDOWN
Connection closed by foreign host.




[root@tomcat ~]# /opt/tomcat/bin/startup.sh   --启动
[root@tomcat ~]# /opt/tomcat/bin/shutdown.sh  --关闭

--声明变量
# vim /opt/tomcat/bin/startup.sh        --在第二行加入以下内容
CATALINA_BASE=/opt/tomcat
CATALINA_HOME=/opt/tomcat
JRE_HOME=/opt/jdk
export CATALINA_BASE CATALINA_HOME JRE_HOME

# vim /opt/tomcat/bin/shutdown.sh     --写入跟上面同样的内容
CATALINA_BASE=/opt/tomcat
CATALINA_HOME=/opt/tomcat
JRE_HOME=/opt/jdk
export CATALINA_BASE CATALINA_HOME JRE_HOME

---------------方式1  以java程序的方式启动 ------------------------



---------------方式2  以jsvc程序的方式启动 ------------------------  建议使用jsvc方式


[root@tomcat ~]# cd /opt/tomcat/bin/
[root@tomcat bin]# tar xf commons-daemon-native.tar.gz
[root@tomcat bin]# cd commons-daemon-1.0.13-native-src/unix/
[root@tomcat unix]# ./configure --with-java=/opt/jdk/
[root@tomcat unix]# make
[root@tomcat unix]# cp jsvc /opt/tomcat/bin/ -a



创建启动脚本
[root@tomcat ~]# cp /root/tomcat/tomcat-init.sh /etc/init.d/tomcat
[root@tomcat ~]# chmod +x /etc/init.d/tomcat

[root@tomcat ~]# vim /etc/init.d/tomcat
JAVA_HOME=/opt/jdk
CATALINA_HOME=/opt/tomcat
CATALINA_BASE=/opt/tomcat
TOMCAT_USER=root


[root@tomcat ~]# service tomcat start

ot@tomcat ~]# netstat -tnlp |grep :80
tcp        0      0 :::8009                     :::*                        LISTEN      3532/jsvc.exec      
tcp        0      0 :::8080                     :::*                        LISTEN      3532/jsvc.exec

[root@tomcat ~]# chkconfig --add tomcat
[root@tomcat ~]# chkconfig tomcat on

--访问
http://192.168.0.1:8080/

[root@tomcat ~]# ls /opt/tomcat/webapps/ROOT/index.jsp






--配置文件


[root@tomcat ~]# ll /opt/tomcat/conf/*.xml
-rw-------. 1 root root   1394 2月  13 2013 /opt/tomcat/conf/context.xml
-rw-------. 1 root root   6435 2月  13 2013 /opt/tomcat/conf/server.xml
-rw-------. 1 root root   1530 2月  13 2013 /opt/tomcat/conf/tomcat-users.xml
-rw-------. 1 root root 162905 2月  13 2013 /opt/tomcat/conf/web.xml



/opt/tomcat/conf/context.xml ---页面家目录
<WatchedResource>WEB-INF/web.xml</WatchedResource>
/opt/tomcat/conf/web.xml    --- tomcat识别与处理的页面 jsp|*.jsp|*.jspx
/opt/tomcat/conf/tomcat-users.xml  --tomcat用户

/opt/tomcat/conf/server.xml   ---主配置文件


<Server port="8005" shutdown="SHUTDOWN">  --开启控制端口
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  --内部库的目录
<Listener className="org.apache.catalina.core.JasperListener" />
<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"  ---连接池  连接http协议
               connectionTimeout="20000"
               redirectPort="8443" /> --端口重定向 8443 tomcat加密端口


   <!-- Define an AJP 1.3 Connector on port 8009 -->  --内部协议 连接servlet容器 (claess与缓存文件)
  <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>
</Server>



name="localhost"  = 域名
appBase="webapps"  = /opt/tomcat/webapps/
unpackWARs="true"
如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件
alias:
指定主机别名,可以指定多个别名
deployOnStartup:
如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用中的server.xml没有相应的<Context>元素,将采用Tomcat默认的Context (/opt/tomcat/webapps)
autoDeploy:
如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用




conf/server.xml目录结构:
<Server>  
    <Listener />  
    <GlobaNamingResources>  
    </GlobaNamingResources  
    <Service>  
        <Connector />  
        <Engine>  
            <Logger />  
            <Realm />  
               <host>  
                   <Logger />  
                   <Context />  
               </host>  
        </Engine>  
    </Service>  
</Server>  




部署apache-tomcat+JDK+mysql+java应用(论坛)



1> 确认是否安装apache-tomcat
[root@tomcat ~]# ls -d /opt/tomcat/
[root@tomcat ~]# netstat -tnlp |grep :80

2> 确认JDK程序是否存放
[root@tomcat ~]# ls -d /opt/jdk/


3> 安装数据库
[root@tomcat ~]# yum -y install mysql-server mysql
[root@tomcat ~]# service mysqld start

mysql> delete from mysql.user where user='';
mysql> update mysql.user set password=password('redhat')  where user='root';
mysql> flush privileges;

--新建库与授权
mysql> create database java01 default charset utf8;
mysql> grant all on java01.* to 'runjava01'@'localhost' identified by '123456java01';




4> 下载java论坛页面
[root@tomcat tomcat]# cd /root/tomcat/
[root@tomcat tomcat]# unzip JavaCenter_Home_2.0_Source_UTF8.zip
[root@tomcat tomcat]# mkdir /webroot
[root@tomcat tomcat]# mv JavaCenter_Home_2.0_Source_UTF8/source/WebRoot/ /webroot/java01



5> 通过tomcat的虚拟主机发布页面

[root@tomcat tomcat]# vim /opt/tomcat/conf/server.xml
      <Host name="java01.uplooking.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true" deployOnStartup="true">   eployOnStartup--找不到页面 寻找默认webapps
        <Context path="" docBase="/webroot/java01" />              --页面家目录
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="java01.uplooking.com_access_log." suffix=".txt"  --访问日志
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
[root@tomcat tomcat]# service tomcat restart

[root@tomcat tomcat]# echo "192.168.0.1 java01.uplooking.com" >> /etc/hosts

测试访问
[root@instructor ~]# echo "192.168.0.1 java01.uplooking.com" >> /etc/hosts

安装java论坛
http://java01.uplooking.com:8080/install/


 

上传第二套java页面 /root/tomcat/ejforum-2.3.zip

 解压页面
[root@tomcat tomcat]# unzip ejforum-2.3.zip
[root@tomcat tomcat]# mv ejforum-2.3/ejforum/ /webroot/java02

 发布页面
[root@tomcat tomcat]# vim /opt/tomcat/conf/server.xml
<!--java02.uplooking.com -->
      <Host name="java02.uplooking.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true" deployOnStartup="true">
        <Context path="" docBase="/webroot/java02" />    
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="java02.uplooking.com_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

[root@tomcat tomcat]# service tomcat restart


 新建库与授权
[root@tomcat tomcat]# mysql -uroot -predhat
mysql> create database java02 default charset utf8;
mysql> grant all on java02.* to 'runjava02'@'localhost' identified by '123456java02';

 
 修改页面的配置文件 连接数据库


[root@tomcat tomcat]# vim /webroot/java02/WEB-INF/conf/config.xml
    <!-- DB Connection Pool - Hsqldb
        <database maxActive="10" maxIdle="10" minIdle="2" maxWait="10000"
                          username="sa" password=""
                          driverClassName="org.hsqldb.jdbcDriver"
                          url="jdbc:hsqldb:file:/WEB-INF/data/ejf;shutdown=true"
                          sqlAdapter="sql.HsqldbAdapter"/>
        -->   --注释掉默认的文本数据库 Hsqldb
     <!-- DB Connection Pool - Mysql-->   --开启Mysql数据 填写用户名与密码以及数据库名称
        <database maxActive="10" maxIdle="10" minIdle="2" maxWait="10000"
                          username="runjava02" password="123456java02"
                          driverClassName="com.mysql.jdbc.Driver"
                          url="jdbc:mysql://localhost:3306/java02?characterEncoding=gbk&amp;autoReconnect=true&amp;autoReconnectForPools=true&amp;zeroDateTimeBehavior=convertToNull"
                          sqlAdapter="sql.MysqlAdapter"/>



***导库***
[root@tomcat ~]# mysql -urunjava02 -p123456java02 java02  < /root/tomcat/ejforum-2.3/install/script/easyjforum_mysql.sql





[root@tomcat tomcat]# echo "192.168.0.1 java02.uplooking.com" >> /etc/hosts

测试
[root@instructor ~]# echo "192.168.0.1 java02.uplooking.com" >> /etc/hosts


http://java02.uplooking.com:8080/




***整合apache+apache-tomcat实现动静页面分离
apache + tomcat 实现动静分离,统一入口
    apache --解析静态页面
    tomcat  --解析动态页面



client(html/jsp)-->apache--> mod_jk.so-->(tomcat+jdk)


1> 安装httpd
[root@tomcat ~]# yum -y install httpd

2> 在httpd中定义mod_jk模块的配置文件

 202 LoadModule jk_module modules/mod_jk.so
 203 Include conf/mod_jk.conf                        -模块对应配置文件
 204 JkWorkersFile conf/workers.properties           --定义一个机器人,专门搬运动态页面给tomcat解析
 205 JkMountFile conf/uriworkermap.properties        --定义哪些属于动态页面的类型


3> 创建mod_jk模块:
[root@tomcat ~]# cp /root/tomcat/mod_jk-1.2.28-httpd-2.2.X.so /usr/lib64/httpd/modules/mod_jk.so -a
[root@tomcat ~]# ls -d /usr/lib64/httpd/modules/mod_jk.so
/usr/lib64/httpd/modules/mod_jk.so

4> 定义jk.conf的配置文件 (如何连接tomcat|机器人|动态页面的类型列表)
vim /etc/httpd/conf/mod_jk.conf
JkLogLevel info
JkLogFile logs/jk.log
JkShmFile logs/jk-runtime-status
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkRequestLogFormat "%w %V %T"
JkOptions  +ForwardKeySize +ForwardURICompat -ForwardDirectories

5> 定义机器人(专门搬运动态页面给tomcat解析)  --机器人名称worker1
vim /etc/httpd/conf/workers.properties
workers.tomcat_home=/opt/tomcat
workers.java_home=/opt/jdk
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=1

6> 定义机器人worker1的页面解析列表  那些属于apache解析 那些属于tomcat解析

[root@tomcat ~]# vim /etc/httpd/conf/uriworkermap.properties

/*.jsp*=worker1
/forum-*.html=worker1   --- 伪静态页面(一个jsp页面)

!/*.gif worker1
!/*.jpg worker1
!/*.png worker1
!/*.ico worker1
!/*.css worker1
!/*.js worker1
!/*.htm worker1
!/*.html worker1
!/*.asp worker1
!/*.aspx worker1
!/*.txt worker1
!/*.swf worker1
!/*.flv worker1
!/*.php worker1
!/*.mp3 worker1



7> 定义apache的虚拟主机,必须跟tomcat的虚拟主机相对应

[root@tomcat ~]# vim /etc/httpd/conf.d/java1.uplooking.conf
NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin java01@uplooking.com
    DocumentRoot /webroot/java01
    ServerName java01.uplooking.com
    ErrorLog logs/java01.uplooking.com-error_log
    CustomLog logs/java01.uplooking.com-access_log combined
    JkMountFile conf/uriworkermap.properties  -- 动静分离的依据列表
</VirtualHost>
    <Directory "/webroot/java01">
        AllowOverride None
        Options Indexes
        Order allow,deny
        Allow from all
    </Directory>
[root@tomcat ~]# vim /etc/httpd/conf.d/java2.uplooking.conf
<VirtualHost *:80>
    ServerAdmin java02@uplooking.com
    DocumentRoot /webroot/java02
    ServerName java02.uplooking.com
    ErrorLog logs/java02.uplooking.com-error_log
    CustomLog logs/java02.uplooking.com-access_log combined
    JkMountFile conf/uriworkermap.properties
</VirtualHost>
    <Directory "/webroot/java02">
        AllowOverride None
        Options Indexes
        Order allow,deny
        Allow from all
    </Directory>


8> 增加apache 能够识别index.jsp
DirectoryIndex index.html index.html.var  index.jsp


9> 启动
[root@tomcat ~]# service httpd restart
[root@tomcat ~]# chkconfig httpd on


10>  访问
http://java01.uplooking.com/
http://java02.uplooking.com/



  如何测试动静分离?
1> 如果将tomcat关闭  静态的数据(图片)  可以访问


[root@tomcat ~]# service tomcat stop

访问图片
http://java01.uplooking.com/data/avatar/noavatar_middle.gif

访问主页 失败 503  Service Temporarily Unavailable  --页面内部错误
http://java01.uplooking.com/space.jsp?do=home





2> 将apache虚拟主机的页面根目录指向新的目录
[root@tomcat ~]# mkdir /webtest
[root@tomcat ~]# vim /etc/httpd/conf.d/java1.uplooking.conf
    DocumentRoot /webtest
    <Directory "/webtest">

[root@tomcat ~]# service httpd restart
[root@tomcat ~]# service tomcat start


访问
http://java01.uplooking.com/space.jsp  --能够登录用户

 
http://java01.uplooking.com/data/avatar/noavatar_middle.gif  --访问图片失败