一.安装Tomcat
1.环境准备
关闭防火墙并设置开机不自启,配置 SElinux 规则:
systemctl stop firewalld.service
systemctl disable firewalld.service
hostnamectl set-hostname tomcat
// 使用 hostnamectl 命令修改主机名,修改完后 Ctrl+D 退出后重新连接
2.安装JDK
cd /usr/local/src
tar -zxvf ~
mv ~ /usr/local/jdk1.8
设置环境变量:
vi /etc/profile //在末尾输入以下内容
JAVA_HOME=/usr/local/jdk1.8/
JAVA_BIN=/usr/local/jdk1.8/bin
JAVA_HOME=/usr/local/jdk1.8/jre
PATH=$PATH:/usr/local/jdk1.8/bin:/usr/local/jdk1.8/jre/bin
CLASSPATH=/usr/local/jdk1.8/jre/lib:/usr/local/jdk1.8/lib:/usr/local/jdk1.8/jre/lib/charsets.jar
注意:根据自己的安装路径修改(第一次需要加/src,之后没加过)
保存文件后,使其生效:source /etc/profile
检测设置是否正确:java -version
如果显示如下内容,说明配置正确:
which java(如果结果为/usr/bin/java说明是rpm的JDK,并且执行java -version时会有openjdk字样。若和书上保持一致,则做临时处理:mv /usr/bin/java /usr/bin/java_bak source /etc/profile,再执行java -version结果就和书上一样)
3.安装Tomcat
tar -zxvf ~
mv apache-tomcat-8.5.60 /usr/local/tomcat
启动Tomcat:/usr/local/tomcat/bin/startup.sh
查看是否启动成功:ps aux |grep tomcat //看是否有java相关进程,也可以查看监听端口
netstat -lntp |grep java //正常会有三个端口8009,8005,8080,其中8080为提供web服务的端口,8005为管理端口,8009 端口为第三方服务调用的端口比如httpd和Tomcat结合时会用到
若想开机,需要把启动命令放到/etc/rc.d/rc.local文件里:
echo “/usr/local/tomcat/bin/startup.sh” >> /etc/rc.d/rc.local
chmod a+x /etc/rc.d/rc.local //默认该文件没有x权限,加一下
(输入http://192.168.134.130:8080/)
二.配置Tomcat
1.配置Tomcat服务的访问端口
Tomcat默认端口是8080,若想把端口改成80需要修改server.xml文件。
vi /usr/local/tomcat/conf/server.xml
//找到Connector port=”8080” protocol=”HTTP/1.1”
修改为<Connector port=”80” protocol=”HTTP/1.1”。
保存文件后重启Tomcat:
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
tomcat的关闭和开启需要使用它的自带脚本
修改后测试:netstat -plnt | grep java
浏览器访问:
2.Tomcat的虚拟主机
先看它的配置文件/usr/local/tomcat/conf/server.xml
其中<!--和-->之间的内容为注释掉的,可忽略。剩下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<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"
connectionTimeout="20000"
redirectPort="8443" />
<Connector protocol="AJP/1.3"
port="8009"
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>
其中,<Host>和</Host>之间的配置就是虚拟主机部分,name定义域名。appBase定义应用的目录。Java的应用通常是一个jar压缩包,将jar压缩包放到appBase目录下即可。
Index.jsp就是默认的Tomcat页面
curl localhost:8080/tomcat.svg -I
在增加一个虚拟主机,并定义域名:
vi /usr/local/tomcat/conf/server.xml
<Host name="www.123.cn" appBase="/data/tomcatweb/"
unpackWARs="false" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/data/tomcatweb/" debug="0" reloadable="true" crossContext="true"/> //docBase是定义网站文件存放路径的,若不定义则默认为在appBase/ROOT下
</Host>
创建目录和测试文件并测试:
mkdir -p /data/tomcatweb
echo "Tomcat test page." >/data/tomcatweb/1.html
修改完配置文件后,重启Tomcat服务:
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
curl -x127.0.0.1:8080 www.123.cn/1.html
3. appBase 部署 Java 应用
下面我们通过部署个 Java 的应用来体会 appBase 和 docBase 目录的区别。
为了方便测试,下载一个 zrlog(Java 写的 blog 站点应用,轻量),zrlog 实
际就是一个 war 包。
(下载地址:http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war)
先暂时将 zrlog 的 war 包下载到/usr/local/src 目录下
wget http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war (yum -y install wget)
ls |grep zrlog
zrlog-1.7.1-baaecb9-release.war
appBase 支持自动解压,所以直接将 war 包拷贝到/usr/local/tomcat/webapps/
目录下:
cp zrlog-1.7.1-baaecb9-release.war /usr/local/tomcat/webapps/
ls /usr/local/tomcat/webapps/
// 将 war 包拷贝到/usr/local/tomcat/webapps/目录下之后,包会自动解压。(前
提是 tomcat 正常启动。 )
重命名 war 包的文件名: cd /usr/local/tomcat/webapps/ mv zrlog-1.7.1-baaecb9-release zrlog ls
// 一但重命名或删除 war 包解压后的包的文件时,war 包就会在解压出一个
文件夹。
用浏览器访问 http://192. 168.134.130/zrlog(注意你的 IP)
出现安装向导,这是一个配置数据库的过程。登入数据库,在数据库中创建一个 zrlog 数据库和 zrlog 用户。
/usr/local/mysql/bin/mysql
mysql> create database zrlog; //创建 zrlog 数据库
mysql> grant all on zrlog.* to 'zrlog'@127.0.0.1 identified by '000000'; //创建 zrlog 用户
mysql>exit
Byebye //退出数据库
检查创建用户是否可以登陆数据库,使用 zrlog 用户登录
/usr/local/mysql/bin/mysql -u zrlog -h 127.0.0.1 -p
mysql> show databases;
//检查已有数据库
+--------------------+
| Database |+--------------------+
| information_schema |
| test |
| zrlog |
+--------------------+
3 rows in set (0.00 sec)
mysql> exit
Byebye
检查完成,zrlog 用户登录成功。使用 zrlog 用户信息填写刚才在浏览器中打
开的网页,Email 填写自己的邮箱,本次是实验,填写内容为自定义邮箱
(tomcat@163.com),单击“下一步”按钮
设置管理员账号(admin)和管理员密码(123456),网站标题和子标题按
需填写,本次自定义内容(网站标题:“测试”,网站子标题:“linux”)
填写完成后,单击“下一步”按钮,可以看到安装完成的界面。
单击“点击查看”按钮,我们就可以进入搭建好的 zrlog 页面了
我们也可以进入管理页面,写一些文章,单击上图主菜单栏中的“管理”按
钮
输入安装向导里已经设置好的账户名和密码(admin:123456),单击“登
录”按钮,登录成功页面,如图所示:
单击“文章撰写”栏目,写上自己想写的内容,然后保存
4. ocBase 部署 Java 应用
查看虚拟主机 docBase 的路径,结果如下:
vi /usr/local/tomcat/conf/server.xml
<Host name="www.123.cn" appBase=""
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/data/wwwroot/123.cn/" debug="0"
reloadable="true" crossContext="true"/>
</Host>
//docBase 定义的目录为:/data/wwwroot/123.cn
创建 docBase 目录:
mkdir -p /data/wwwroot/123.cn/
将/usr/local/tomcat/webapps/zrlog 中的所有文件移动到/data/wwwroot/123.cn/
目录下:
mv /usr/local/tomcat/webapps/zrlog/*
/data/wwwroot/123.cn/
接下来在 Windows 下绑定 hosts 文件
hosts 文件路径:C:WindowsSystem32driversetc
在文件下面添加
192.168.134.130 www.123.cn
测试
打开命令提示符(CMD),用 ping 命令 ping www.123.cn 看 IP 是否为虚拟
机 IP,如果是的话,现在就可以访问了。
接下来就用域名去访问 zrlog 页面,由于之前配置完虚拟主机后,并没有重
启服务,这里要重启一下服务。
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
三.测试Tomcat解析JSP
Tomcat主要是用来解析JSP页面。创建JSP测试页面:
vi /data/tomcatweb/111.jsp
<html><body><center>
Now time is:<%=new java.util.Date()%>
</center></body></html>
curl -x127.0.0.1:8080 www.123.cn/111.jsp
四.Tomcat日志
Tomcat的日志目录时/usr/local/tomcat/logs。主要四大日志为:
其中catalina开头的日志为Tomcat的综合日志,他记录Tomcat服务相关信息,也会记录错误日志。其中,catalina.2020-10-23.log和catalina.out内容相同,前者会每天生成一个新的日志。host-manager和manager为管理相关的日志,其中host-manager为虚拟主机的管理日志。Localhost和localhost_access为虚拟主机相关日志。其中带access字样的日志为访问日志,不带access字样的为默认虚拟主机的错误日志。访问日志默认不会生成,需要在server.xml中配置。在对应虚拟主机的<Host></Host>里加入下面配置:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="123.cn_access_log" suffix=".txt"
pattern="%h %l %u %t %quot;%r" %s %b" />
valve 为日志文件配置;prefix定义访问日志得前缀。suffix定义日志后缀,pattern 定义日志格式。错误日志在catalina.out中
配置完成后,重启 Tomcat 服务
重启 Tomcat 服务完成后,访问网站,查看/usr/local/tomcat/logs 目录下是否
有日志生成,并且查看生成的日志信息,命令如下:
ls /usr/local/tomcat/logs/
cat /usr/local/tomcat/logs/123_access_log.2020-03-29.txt
五.Tomcat链接MySQL
配置MySQL创建试验用的库,表以及用户:
mysql -uroot -p'000000'
(出现错误alias mysql=/usr/local/mysql/bin/mysql)
修改密码set password for root@localhost=password('000000');
mysql>create database java_test; //创建数据库名
mysql> use java_test;
mysql> grant all on java_test.* to 'java'@'127.0.0.1' identified by 'sxt'; //创建用户
mysql> create table sxt (`id` int(4), `name` char(40));
mysql> insert into sxt values (1,'abc');
mysql> insert into sxt values (2,'aaa');
mysql> insert into sxt values (3,'ccc');
若想加入中文,则mysql > CREATE DATABASE IF NOT EXISTS test_db_char
-> DEFAULT CHARACTER SET utf8
-> DEFAULT COLLATE utf8_general_ci;
创建完表以及用户后,退出mysql,验证用户是否可用:
mysql -ujava -psxt -h127.0.0.1
正常进入mysql,说明刚创建的java用户没问题。配置Tomcat相关的配置文件:
vi /usr/local/tomcat/conf/context.xml // 在</Context>上面
<Resource name="jdbc/mytest" //name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称
auth="Container" //auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
type="javax.sql.DataSource" //type:此名称所代表的类型
maxActive="100" maxTdle="30" maxWait="10000" //maxActive:表示一个数据库在此服务器上所能打开的最大连接数. maxWait:最大等待时间. maxIdle:表示一个数据库在此服务器上维持的最小连接数
username="java" password="sxt" //username:数据库连接的用户名password:数据库连接的密码
driverClassName="com.mysql.jdbc.Driver" //driverClassName:数据库连接的驱动程序
url="jdbc:mysql://127.0.0.1:3306/java_test"> //url:数据库连接的地址
</Resource>
另一个配置文件:
vi /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml //在</web-app>上面增加
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mytest</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
每个应用目录下都有一个WEB-INF目录,它里面会有对应的配置文件。res-ref-name和Resource name保持一致。在ROOT下创建测试JSP文件(用浏览器访问的文件):
vi /usr/local/tomcat/webapps/ROOT/t.jsp
<%@page import="java.sql.*"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.*"%>
<%
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx
.lookup("java:comp/env/jdbc/mytest");
Connection conn = ds.getConnection();
Statement state = conn.createStatement();
String sql = "select * from sxt";
ResultSet rs = state.executeQuery(sql);
while (rs.next()) {
out.println(rs.getString("id") +"<tr>");
out.println(rs.getString("name") +"<tr><br>");
}
rs.close();
state.close();
conn.close();
%>
这个脚本会连接mysql并查询一个库,表的数据。
保存重启Tomcat:
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
在浏览器中访问,他会查询java_test库的sxt表,并列出数据
直接用命令结果一样:mysql -ujava -psxt -h127.0.0.1 java_test -e "select * from sxt"
用虚拟机查看正常,用浏览器显示500
下载5.17的mysql-connector-java包,上传至虚拟机,放到/tomcat/bin /tomcat/lib目录中
可能之后还会出错,有能是这个包还没读取到,最后得到