您的位置:首页 > 运维架构 > Tomcat

tomcat 的基本概念和安装配置

2016-03-29 13:26 666 查看
本章目录:
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 的总体结构


4)Tomcat Server的结构图


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>元素.并且它不能做为任何元素的子元素.


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元素


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的连接器。


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接口定义.


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

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

3>name
定义Engine的名字

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

<Host>元素


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应用(论坛)



--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 "%r" %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 "%r" %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 "%r" %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 "%r" %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 "%r" %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&autoReconnect=true&autoReconnectForPools=true&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 --访问图片失败
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息