文章目录
Tomcat
提到tomcat就不能不说java,tomcat是服务器,是一种比较简单的中间件,用来把java web开发部署到tomcat中。并且tomcat本身也是java开发的
java
java简介
- java是一种跨平台的,面向对象的程序设计语言,java技术具有卓越的通用性。高效性,平台移植性和安全性
java的体系
- java SE(标准版)
- java EE(企业版)
- java ME(移动版)
jdk简介
-
jdk(java development kit)是sun针对java开发者退出的java语言的软件开发工具包
-
jdk是整个java的核心
包括了java的运行环境
java工具(如编译、排错、打包等工具)
java基础的库类
-
JRE:java的运行环境,JRE是JDK的子集
-
JRE包括
java虚拟机(jvm)
java核心库类和支持文件
不包括开发工具(JDK)–编译器、调试器和其他工具
Java servlet
-
servlet是java扩展web服务器功能的嘴贱规范
-
常见的servlet容器
IBM websphere
Oracle weblogic
Apache tomcat
Redhat jboss
以上的软件只能用作java,除tomcat是免费的,其余的都是收费的
Tomcat的部署
1.问题:
部署tomcat服务器,要求如下
- 安装部署jdk基础环境
- 安装部署tomcat服务器
- 创建测试页面,文件名为test.jsp,显示服务器当前时间
然后使用客户机访问web服务器验证效果
- 使用浏览器访问Tomcat服务器的8080端口,浏览默认首页
- 使用浏览器访问Tomcat服务器的8080端口,浏览默认测试页面
2.方案:
使用两台虚拟机,其中一台作为Tomcat服务器,另一台作为测试机
3.步骤:
步骤一:安装软件
1)部署Tomcat服务器软件
使用yum安装jdk环境
yum -y install java-1.8.0-openjdk #安装javajdk
yum -y install java-1.8.0-openjdk-headless #
java -version #查看java版本
2)安装tomcat
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.52/bin/apache-tomcat-9.0.52.tar.gz
#本次实验使用的是tomcat-9.0版本
tar -xf apache-tomcat-9.0.52.tar.gz
mv apache-tomcat-9.0.52 /usr/local/tomcat
#这个软件不需要安装,因为tomcat本身就是java写的程序脚本
ls /usr/local/tomcat
bin # 主程序目录
conf #配置文件目录
lib #库文件目录(类的库)
logs #日志目录
webapps #页面目录(网站根目录)
temp #临时目录
work #自动编译目录jsp
3)启动服务
/usr/local/tomcat/bin/startup.sh
ss -ntulp | grep java
查看端口情况,如果为8005 和8080这两个端口则启动成功,如果不是,或者只有其中一个,启动失败
8005为tomcat软件使用端口,8080为用户使用端口
提示:如果检查端口时,8005端口启动非常慢,可使用下面的命令用urandom替换random(非必须操作),tomcat启动时需要大量的随机数据(在、dev/random)
mv /dev/random /dev/random.bak
ln -s /dev/urandom /dev/random
4)验证
在浏览器输入 http://192.168.19.130:8080 (ip为Tomcat服务器的IP)
步骤二:修改tomcat配置文件
1)创建测试jsp页面
vim /usr/local/tomcat/webapps/ROOT/test.jsp
<html>
<body>
<center>
Now time is: <%=new java.util.Date()%>
</center>
</body>
</html>
2)验证:
输入http://192.168.19.130:8080/test.jsp来验证
使用Tomcat部署虚拟主机
1.问题:
沿用上述练习,使用Tomcat部署加密虚拟主机,实现以下要求
- 实现基于两个域名的虚拟主机,分别为www.a.com和www.b.com
- 使用www.a.com域名访问的页面根路径为/usr/local/tomcat/a/ROOT
- 使用www.b.com域名访问的页面根路径为/usr/local/tomcat/b/base
- 访问www.a.com/test时,页面自动跳转到/var/www/html目录下的页面
- 访问页面时支持SSL加密通讯
- 私钥,证书存储路径为/usr/local/tomcat/conf/cert
- 每个虚拟主机都拥有独立的访问日志文件
- 配置tomcat集群环境
2.方案:
修改server.xml配置文件,创建两个域名的虚拟主机,修改如下两个参数模块
介绍主配置文件的主要参数
cat /usr/local/tomcat/conf/server.xml #tomcat的主配置文件
<Server>
<service>
<Connector prot=8080/> #tomcat的默认端口
<Connector prot=8009/>
<Engine name="Catalina" defaultHost="localhost">
#如果输入ip,defaultHost等于谁,就打开谁
<Host name="www.a.com" appBase="a"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.b.com" appBase="b"
unpackWARs="true" autoDeploy="true">
</Host>
...
每一对<host>代表一个主机 name代表主机名字 ,appbase代表网页根路径,unpackWARs 是否自动解压war包,auwodeploy,自动部署
3.步骤:
步骤一:配置服务器虚拟主机
1)修改server.xml配置文件,创建虚拟主机
vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.a.com" appBase="a"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.b.com" appBase="b"
unpackWARs="true" autoDeploy="true">
</Host>
...
整个配置文件严格区分大小写
2)创建虚拟主机对应的页面根路径
mkdir -p /usr/local/tomcat/{a,b}/ROOT
echo "AAA" > /usr/local/tomcat/a/ROOT/index.html
echo "BBB" > /usr/local/tomcat/b/ROOT/index.html
3)重启服务
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
ss -ntulp | grep java
#查看是否启动成功
4)客户端设置hosts文件,并测试
vim /etc/hosts
192.168.19.130 www.a.com www.b.com
curl www.a.com:8080
curl www.b.com:8080
步骤二:修改www.b.com网站的首页目录为base
1)使用docBase参数可以修改默认网站首页路径
vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.a.com" appBase="a"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.b.com" appBase="b"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="base"/>
</Host>
...
# <Context path="" docBase="base"/> 默认路径在ROOT,加上docBase参数,修改默认路径
mkdir /usr/local/tomcat/b/base
echo "BASE" > /usr/local/tomcat/b/base/index.html
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
2)测试查看页面是否正确
步骤三:跳转
1)当用户访问http://www.com/test打开/var/www/html目录下的页面
vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.a.com" appBase="a"
unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="/var/www/html/" />
</Host>
<Host name="www.b.com" appBase="b"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="base"/>
</Host>
...
/var/www/html/为apache的httpd默认目录,如果没有安装过httpd是没有这个目录的,所以可以自己建,也可以对上述路径进行修改
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
2)测试
步骤四:配置Tomcat支持SSL加密网站
在Tomcat中端口和虚拟主机并不绑定,这和httpd和nginx不同
例:httpd用80只能访问固定的网站
nginx:端口和网站也是绑定的
tomcat端口和虚拟主机并不绑定,每个网站公用8080端口,Tomcat加密做一次,所有的网站都会加密
Tomcat工作原理
用户从8080端口访问网页,通过engine来查找你想要看的网页,如果有,则导航去相应的网页,如果没有,则导航去默认网页localhost,<host 的三大参数,决定了网页位置,path,appbase,docbase>
1)创建加密用的私钥和证书文件
keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
#-genkeypair 生成密钥对,生成只有一个文件,公钥私钥在一个文件里
#-alias 密钥别名
#-keyalg 定义密钥算法为RSA算法
#-keystore 定义密钥文件存储在/usr/lcoal/tomcat/keystore
2)再次修改server.xml配置文件,创建支持加密连接的Connector
vim /usr/local/tomcat/conf/server.xml
...
Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" schme="https" secure="true" clientauth="false" sslProtocol="TLS" keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456">
#这行配置文件在主配置文件中存在,大概在86行左右,打开部分注释,修改密钥路径,密钥密码即可
#keystorePass 打开密钥的密码
#keystoreFile 密钥位置
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
3)开始测试
使用https://www.a.com:8443开始验证,tomcat加密之后端口改为8443,这个端口可以修改。配置文件里默认为8443
步骤五:配置Tomcat日志
Tomcat默认日志在/usr/local/tomcat/logs
catalina.时间.log 为tomcat的系统日志,这个日志每天产生一个
1)为每个虚拟主机设置不同的日志文件
vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.a.com" appBase="a"
unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="/var/www/html/" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="www.a.com" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
#directory="logs" 日志存放目录
#prefix 日志文件名
#suffix 日志扩展名
#这个<valve>在之前的默认host中存在,可以复制下来,修改其中内容
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
2)开始测试
进行一次访问之后再次查看
我们发现多了一个www.a.com的日志
步骤六:配置Tomcat集群
配置过程
1)使用一台虚拟机配置nginx调度器
详细配置过程请见Nginx的反向代理
vim /usr/local/nginx/conf/nginx.conf
....
upstream tomcat{
server 192.168.20.30:8080; #使用server定义集群中的具体服务器和端口
server 192.168.20.40:8080;
}
server {
listen 80;
server_name www.a.com;
location / {
proxy_pass http://tomcat;
}
}
通过调度之后,访问调度器的80端口,会被转发到Tomcat集群的8080端口
tomcat内存空间设置
常见内存错误:
1、java.lang.OutOfMemoryError: Java heap space
整体意思是超出内存堆空间的错误
使用Java程序从数据库中查询大量的数据时出现异常
在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的Heap size 不足2%的时候将抛出此异常信息。
2、java.lang.OutOfMemoryError: PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的。
如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
3、OutOfMemoryError: unable to create new native thread.
无法创建新的线程。
4、java “Too small initial heap” 错误
Xmx设置小了。
具体解决方法:
#生产环境设置,假设内存空间为8G,在catalina.sh在文件头部的注释下面,加入下面的内容
下面使用的为JDK
export JAVA_OPTS='-server –Xms4096m –Xmx4096m -Xmn256m -XX:PermSize=256m -XX:MaxNewSize=512m -XX:MaxPermSize=512m '
提示:
使用64位tomcat版本。