一:Tomcat及JDK简介
1.)Tomcat是一个免费的web应用服务器服务器,国内很多大型站点也是采用Tomcat来构建的。Tomcat是apache基金会的一个核心项目,其运行环境需要JDK的支持,Tomcat都是基于某个版本的JDK平台所研发,版本不对称,会导致Tomcat启动失败。
2.)JDK于1996年开发第一个版本,JDK主要组建JVM,Applet,AWT等。JDK1.1的版本引入了JAR格式,用户打包Java程序代码。还引入了JDBC,Java通过驱动去连接数据库。
3.)Java技术分为了三个方向:J2SE(标准本),J2EE(企业版),J2ME(移动版),J2SE就是Java2的标准版,主要用于桌面程序的软件编程。J2EE是Java2的企业版,主要用户分布式网络程序的开发。J2ME主要应用于嵌入式系统开发,例如手机和PDA的编程。
4.)Java类库:Java是面向对象编程语言,类则是对面向对象中的一种概念,对具有相同属性的事物具有相同属性的概念。类可以被具体化为一个一个的对象。
二:JVM简介:
1.)JVM是Sun公司设计java语言的目标是让java程序可以适应于各种平台的计算机上运行,为了实现这个目标,Sun公司提出了java虚拟机机制。
2.)Java虚拟机是编译和运行Java程序等命令及其运行环境的总称。Java源程序在编译后生存后缀为class的文件,该文件以字节码的方式进行编码。这种字节码实际上是一种伪代码,它包含各种指令,这种指令基本是与平台无关的指令。Java虚拟机在字节码文件的基础上解释这些字节码,以及将这些字节码转换为计算机的语言代码,并交给计算机执行。
3.)字节码是一种于平台无关的伪代码,通过Java命令演变成在各种平台上的机器代码,这些伪代码最终是在本地计算机平台是运行的,但Java程序好像是在这些Java命令的基础上运行的,因此这些Java命令的几个好像是如同我们所使用的VM虚拟机或者virtualbox等软件实现的虚拟机。
三:Tomcat在web架构应用中的位置以及处理流程图:
四.安装JDK及Tomcat:
1.)安装环境:
操作系统:CentOS6.5 x86_64
JDK版本:jdk-7u9-linux-x64.rpm
Tomcat版本:apache-tomcat-7.0.42.tar.gz
网络地址:tomcatnode1: 192.168.169.128,tomcatnode1: 192.168.169.129,httpd代理主机:192.168.169.130,memcached节点使用http主机的地址。
2.)安装JDK,设置Java环境变量:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# rpm -ivhjdk-7u9-linux-x64.rpm
Preparing...
########################################### [100%]
1:jdk
###########################################[100%]
# rpm -ql jdk | less
/usr/java/jdk1
.7.0_09
#此目录为jdk安装目录
# vim/etc/profile.d/java.sh
JAVA_HOME=
/usr/java/jdk1
.7.0_09
PATH=$JAVA_HOME
/bin
:$PATH
export
JAVA_HOME PATH
# source/etc/profile.d/java.sh
# java -version
java version
"1.7.0_09"
Java(TM) SE RuntimeEnvironment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-BitServer VM (build 23.5-b02, mixed mode)
|
3.)安装Tomcat:
1
2
3
4
|
# tar xfapache-tomcat-7.0.42.tar.gz -C /usr/local/
# cd /usr/local/
# ln -svapache-tomcat-7.0.42 tomcat
`tomcat
' ->`apache-tomcat-7.0.42'
|
4.)Tomcat安装后生成的目录:
bin:tomcat相关命令存放位置。
conf:tomcat配置文件存放位置。
work:tomcat工作目录。
webapps:项目存放位置。
temp:临时存放一些数据的目录。
5.)Tomcat环境变量修改:
1
2
3
4
|
# vim/etc/profile.d/tomcat.sh
exportCATALINA_HOME=
/usr/local/tomcat
exportPATH=$CATALINA_HOME
/bin
:$PATH
# source/etc/profile.d/tomcat.sh
|
6.)为Tomcat提供SysV脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# vim/etc/init.d/tomcat
#!/bin/bash
# description: TomcatStart Stop Restart
# processname: Tomcat
# chkconfig: 234 20 80
JAVA_HOME=
/usr/java/jdk1
.7.0_09
CATALINA_HOME=
/usr/local/tomcat
export
JAVA_HOMECATALINA_HOME
case
$1
in
start)
exec
$CATALINA_HOME
/bin/catalina
.sh start ;;
stop)
exec
$CATALINA_HOME
/bin/catalina
.sh stop;;
restart)
$CATALINA_HOME
/bin/catalina
.sh stop
sleep
2
exec
$CATALINA_HOME
/bin/catalina
.sh start ;;
configtest)
exec
$CATALINA_HOME
/bin/catalina
.shconfigtest ;;
-
v
)
exec
$CATALINA_HOME
/bin/catalina
.sh version.sh;;
*)
exec
$CATALINA_HOME
/bin/catalina
.sh * ;;
esac
|
7.)添加Tomcat开启启动:
1
2
3
|
# chmod +x/etc/init.d/tomcat
# chkconfig --addtomcat
# chkconfig tomcat on
|
8.)查看Tomcat版本信息及JDK信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# service tomcat -v
UsingCATALINA_BASE:
/usr/local/tomcat
UsingCATALINA_HOME:
/usr/local/tomcat
Using CATALINA_TMPDIR:
/usr/local/tomcat/temp
Using JRE_HOME:
/usr/java/jdk1
.7.0_09
Using CLASSPATH:
/usr/local/tomcat/bin/bootstrap
.jar:
/usr/local/tomcat/bin/tomcat-juli
.jar
Usage: catalina.sh (commands ... )
commands:
debug Start Catalina
in
a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina
in
the currentwindow
run -security Start
in
the current window with securitymanager
start Start Catalina
in
a separatewindow
start -security Start
in
a separate window with securitymanager
stop Stop Catalina, waiting up to 5seconds
for
the process to end
stop n Stop Catalina, waiting up to nseconds
for
the process to end
stop -force Stop Catalina, wait up to 5 seconds andthen use
kill
-KILL
if
still running
stop n -force Stop Catalina, wait up to n seconds andthen use
kill
-KILL
if
still running
configtest Run a basic syntax check on server.xml- check
exit
code
for
result
version What version of tomcat are yourunning?
Note: Waiting
for
theprocess to end and use of the -force option require that $CATALINA_PID isdefined
|
8.)启动Tomcat:
1
2
3
4
5
6
|
# service tomcat start
UsingCATALINA_BASE:
/usr/local/tomcat
UsingCATALINA_HOME:
/usr/local/tomcat
Using CATALINA_TMPDIR:
/usr/local/tomcat/temp
Using JRE_HOME:
/usr/java/jdk1
.7.0_09
Using CLASSPATH:
/usr/local/tomcat/bin/bootstrap
.jar:
/usr/local/tomcat/bin/tomcat-juli
.jar
|
9.)检查Tomcat端口:
1
2
3
4
5
6
7
|
# ss -tnl
State Recv-Q Send-Q LocalAddress:Port PeerAddress:Port
LISTEN 0 100 :::8080 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 100 127.0.0.1:25 *:
|
10.)访问测试:
11.)隐藏Tomcat版本信息:
当输入一个不存在的页面或者文件时,会显示当前Tomcat的版本信息,如果出现漏洞并且没有第一时间修复,很可能被利用。
1
2
3
4
5
6
|
# cd/usr/local/tomcat/lib/
# jar xf catalina.jar
# vimorg/apache/catalina/util/ServerInfo.properties
server.info=ApacheTomcat
server.number=www.stu32.com
server.built=Jul 2 201308:57:41
|
五.Tomcat配置文件:
1.)server.xml:主配置文件。
2.)context.xml:上下文,为部署每个webapp的默认配置文件。
3.)web.xml:部署描述符文件,为所有部署当前tomcat实例上所有的webapp提供默认的部署描述符。
4.)users.xml:为jsp页面提供访问权限的文件。
5.)catalina.policy:当基于-security选项启动tomcat实例时会读取此配置文件。
6.)catalina.properties:Java属性定义的文件,用于设定类加载器路径,以及安全包列表,和一些调整性能的相关参数的信息。
六.Tomcat负载均衡:
1.)如开始介绍安装环境时写的网络地址,分为node1,node2节点以及nginx代理服务器,上面安装好的就为node1节点,现在开始配置node2节点,node2节点与node1节点配置一致。
2.)编译安装Nginx:
编译过程参考前面的nginx初级使用部分。
3.)修改nginx配置文件,使其能够代理Tomcat node1,node2节点:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# vim/etc/nginx/nginx.conf
http{
client_max_body_size 300m;
client_body_buffer_size 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 16k;
proxy_buffers 4 42k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
upstream jsp_server {
server 192.168.169.128:8080 weight=1max_fails=2 fail_timeout=30s;
server 192.168.169.129:8080 weight=1max_fails=2 fail_timeout=30s;
}
server{
location ~ .*.jsp$ {
index index.jsp;
proxy_passhttp:
//jsp_server
;
proxy_set_header X-Real-IP$remote_addr;
}
|
分别在http段落定义upsream,server段调用jsp_server。
4.)定义jsp页面的测试页:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# cd/usr/local/tomcat/webapps/
# mkdir -pvsession/WEB-INF/{classes,lib}
# cd session
# vim index.jsp
<%@ pagelanguage=
"java"
%>
<
head
>
/title
><
/head
>
<
tr
>
|
此处配置的是node2节点,node1节点相同配置,为了测试,需要修改title部分为node1。
5.)启动nginx,测试反向代理:
代理部分基本配置已经完成。
七.基于Memcached构建MemcachedSession Manager Session会话服务器。
1.)Session简介:Session对象的引入是为了弥补HTTP协议的不足,HTTP协议是无状态协议。Session是代表服务器于客户端之间的会话。Session的作用时间是用户到达某个特定的Web页面开始,直到用户离开Web站点,或者程序中利用代码终止了Session结束。引用Session可以让用户访问多个页面之间的切换也会保留该用户的信息。最简单的理解就是我们去网上购物的时候,已经添加到购物车,(前端为反向代理服务器)当我们需要付款的时候,就会跳到另外一个新的页面,那么我们所下的订单也会停留在上一个页面或者找不到了。
2.)Memcached简介:Memcached是一款高性能分布式内存缓存系统,用户动态web应用减轻数据库压力。架构中的位置处于应用服务器于数据库中间,当用户第一次请求数据的时候,会经由数据库反回数据并且缓存到Memcached内存中,第二次访问的时候,就直接在Memcached内存中读取数据,从而提高动态,数据库访问速度。Memcached是基于存储键/值对的hashmap,其守护进程为Domain,其客户端也就是应用服务器,可以是php,jsp等语言。
3.)Session工作流程图:
4.)下载Session所需要的jar包:
1
2
3
4
|
# ls
javolution-5.5.1.jar memcached-session-manager-tc7-1.8.2.jar spymemcached-2.10.2.jar
memcached-session-manager-1.8.2.jar msm-javolution-serializer-1.8.2.jar
cp
*
/usr/local/tomcat/lib/
|
5.)将jar包复制到node2节点:
1
|
scp
*192.168.169.129:
/usr/local/tomcat/lib/
|
6.)修改server.xml,在host上定义一个用于测试的context容器,并在其中创建一个会话管理器:
1
2
3
4
5
6
7
|
# vim/usr/local/tomcat/conf/server.xml
memcachedNodes=
"n1:192.168.169.130:11211"
requestUriIgnorePattern=
".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass=
"de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
/>
<
/Context
>
|
7.)重启Tomcat,并修改node2节点的server.xml,和node1节点保持一致。
8.)安装memcached,可以使用源码包,也可以使用rpm包,去memcached站点下载,需要注意的是所依赖的libevent。我这边就是使用yum安装的了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# yum –y installmemcached
# service memcachedstart
# ss -tunl
Netid State Recv-Q Send-Q Local Address:Port PeerAddress:Port
udp UNCONN 0 0 *:68 *:*
udp UNCONN 0 0 *:11211 *:*
udp UNCONN 0 0 :::11211 :::*
tcp LISTEN 0 128 :::11211 :::*
tcp LISTEN 0 128 *:11211 *:*
tcp LISTEN 0 128 *:80 *:*
tcp LISTEN 0 128 :::22 :::*
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 100 ::1:25 :::*
tcp LISTEN 0 100 127.0.0.1:25 *:*
|
9.)访问测试:
测试得到的结果是网页的内容发生了变化,但是可以看到Session ID 一直没有变化。