0%

linux学习笔记:tomcat的基础知识

写在前面

这则笔记整理tomcat的相关知识,主要包括:

  • tomcat介绍

  • tomcat安装

  • tomcat配置

什么是tomcat?

目前,有很多的大型网站都是用java编写的,所以,解析java程序也需要由相关的程序来完成,tomcat就是其中之一。

Tomcat 类似与一个apache的扩展型,属于apache软件基金会的核心项目,属于开源的轻量级Web应用服务器,是开发和调试JSP程序的首选,主要针对Jave语言开发的网页代码进行解析,具有技术先进、性能稳定、免费开源的特点,是目前比较流行的web服务器。

Tomcat虽然具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常做为一个Servlet和JSP容器单独运行在后端,运行JSP 页面和Servlet。

Tomcat 支持:

  • 使用 Apache Axis servlet 的 Web 服务;

  • 开发框架,如 Apache Struts;

  • 模板引擎,如 Apache Jakarta Velocity;

  • 对象关系映射技术,如 Hibernate;

Tomcat 安装

想要安装tomcat,必须先安装JDK,即java development kit,这是Sun Microsystems 针对java开发做的一个开发者软件包,包括java运行环境、java工具和java基础库,是目前java开发的核心。

安装jdk

第一步:下载安装包

jdk官网下载地址在这里,由于这里不能使用wget命令,因此只能通过浏览器下载,之后通过ftp程序上传到虚拟机当中,进行相关的安装配置。

这里选择了linux64位的版本来下载。

第二步:上传安装包到虚拟机

因为之前已经配置好了ftp服务,所以这里刚好用上。

笔者在mac端使用的ftp软件是yummy ftp pro ,打开之后,依次选取传输协议、客户端ip、登陆用户名、密码,点击connect即可连接。

之后,选择文件,右键uoload即可。

第三步:移动安装包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 进入ftp目录
[root@local-linux02 ~]# cd /data/ftp

//查看目录,该文件已成功传输到虚拟机当中
[root@local-linux02 ftp]# ls
a.txt b.txt jdk-8u171-linux-x64.tar.gz test1 test2

//移动文件夹
[root@local-linux02 ftp]# mv jdk-8u171-linux-x64.tar.gz /usr/local/src/

//进入源码包保存目录
[root@local-linux02 ftp]# cd /usr/local/src/
[root@local-linux02 src]# ls
jdk-8u171-linux-x64.tar.gz nginx-1.14.0.tar.gz php-7.2.6
nginx-1.14.0 nginx-1.14.0.tar.gz.1 php-7.2.6.tar.gz

//解压
[root@local-linux02 src]# tar -zxvf jdk-8u171-linux-x64.tar.gz

//查看解压文件包
[root@local-linux02 src]# ls
jdk1.8.0_171 nginx-1.14.0.tar.gz php-7.2.6.tar.gz
jdk-8u171-linux-x64.tar.gz nginx-1.14.0.tar.gz.1
nginx-1.14.0 php-7.2.6

//移动重命名
mv jdk1.8.0_171 /usr/local/jdk1.8

第四步:配置系统环境变量

系统环境变量的配置文件为 /etc/profile,下面要更改系统配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
vi /etc/profile

//在末尾增加如下配置:

JAVA_HOME=/usr/local/jdk1.8/
JAVA_BIN=/usr/local/jdk1.8/bin
JRE_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

//保存退出后执行如下命令生效
source /etc/profile

校验配置是否正常

安装Tomcat

第一步:下载二进位制安装包

tomcat的官网网址为:https://tomcat.apache.org/

这里下载的镜像站点的二进位制安装包,版本号是8.5.31。同样还是采用在mac下用chrome浏览器下载,之后再通过ftp上传到虚拟机的方式。因为在虚拟机使用wget命令下载实在是太慢了。

第二步:移动文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//此处设置了alias ftp='cd /data/ftp/'
[root@local-linux02 src]# ftp
[root@local-linux02 ftp]# ls
apache-tomcat-8.5.31.tar.gz a.txt b.txt test1 test2

//移动文件
[root@local-linux02 ftp]# mv apache-tomcat-8.5.31.tar.gz /usr/local/src/

//进入源码包目录,此处也设置的alias
[root@local-linux02 ftp]# src
[root@local-linux02 src]# ls
apache-tomcat-8.5.31.tar.gz nginx-1.14.0.tar.gz php-7.2.6.tar.gz
jdk-8u171-linux-x64.tar.gz nginx-1.14.0.tar.gz.1
nginx-1.14.0 php-7.2.6

//解压
[root@local-linux02 src]# tar -zxvf apache-tomcat-8.5.31.tar.gz

第三步:安装

由于下载的是二进位制安装包,因此就省去了编译环节。

  • 移动文件夹到自定义安装目录
1
[root@local-linux02 src]# mv apache-tomcat-8.5.31 /usr/local/tomcat
  • 运行启动脚本
1
2
3
4
5
6
7
[root@local-linux02 bin]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
  • 校验是否成功 ps -aux |grep java

  • 检查端口情况 netstat -lntp |grep java

说明:正常会有三个以下端口开放

  • 8080提供wed服务的端口;

  • 8005为管理端口;

  • 8009为第三方服务调用端口(如httpd和Tomcat结合时会用到);

第四步:设置开机启动

1
2
3
echo "/usr/local/tomcat/bin/startup.sh" >> /etc/rc.d/rc.local

chmod a+x /etc/rc.d/rc.local

第五步:配置iptables端口

1
2
3
4
5
6
[root@local-linux02 bin]# vi /etc/sysconfig/iptables

//增加一条
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT

[root@local-linux02 bin]# systemctl restart iptables

校验成功

浏览器登录

最后,如需关闭tomcat执行如下脚本

1
/usr/local/tomcat/bin/shutdown.sh

tomcat的目录结构

tomcat的目录结构说明

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@local-linux02 conf]# tree -L 1 /usr/local/tomcat
/usr/local/tomcat //tomcat目录
├── bin //执行脚本目录
├── conf //配置文件
├── lib //运行时必要的库文件(JARS)
├── LICENSE
├── logs //执行日志文件
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp //临时文件存放目录
├── webapps //主要Web发布目录(存放JSP,SERVLET等)
└── work //工作目录,Tomcat将翻译JSP文件到的Java文件和class文件放在这里

bin目录主要文件包括:

  • catalina.sh 用于启动和关闭tomcat服务器;

  • configtest.sh 用于检查配置文件;

  • startup.sh 启动Tomcat脚本;

  • shutdown.sh 关闭Tomcat脚本;

conf目录主要的配置文件:

  • server.xml Tomcat 的全局配置文件;

  • web.xml 为不同的Tomcat配置的web应用设置缺省值的文件;

  • tomcat-users.xml Tomcat用户认证的配置文件;

logs目录主要文件包括:

  • localhost_access_log.2018-06-26.txt 访问日志

  • localhost.2018-06-26.log 错误和其它日志

  • manager.2018-06-26.log 管理日志

  • catalina.2018-06-26.log Tomcat启动或关闭日志文件

Tomcat 配置文件

tomcat配置文件目录为 /usr/local/tomcat/conf/, 主要包括以下文件:

  • server.xml omcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;

  • web.xml 每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;

  • tomcat-user.xml 用户认证的账号和密码文件,在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;

  • catalina.policy java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;当使用-security选项启动tomcat时,用于为tomcat设置安全策略;

  • catalina.properties Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数,Tomcat在启动时会事先读取此文件的相关设置;

  • logging.properties Tomcat日志记录器相关的配置信息,可以用来定义日志记录的组件级别以及日志文件的存在位置等;

  • context.xml 每个web专用的配置文件,包括所有host的默认配置信息,其存放位置为WEB-INF/目录中;

tomcat的核心组件

Server 组件

元素是整个配置文件的根元素,在所有元素最顶层,代表整个Tomcat容器,类似于标签

  • className: 用于实现此Server容器的完全限定类的名称,默认为org.apache.catalina.core.StandardServer

  • port 接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;

  • shutdown 指定向端口发送的命令字符串;

Service 组件

Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。

Connector组件

主要功能接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。

进入tomcat的请求可分为两类:

第一类:standalone,请求来自于客户端浏览器;

第二类:由其它的web server反代,来自前端的反代服务器;

  • nginx –> http connector –> tomcat

  • httpd(proxy_http_module) –> http connector –> tomcat

  • httpd(proxy_ajp_module) –> ajp connector –> tomcat

相关属性:

1
2
3
4
5
6
7
port=”8080″
protocol=”HTTP/1.1″
connectionTimeout=”20000″
address:监听的IP地址;默认为本机所有可用地址;
maxThreads:最大并发连接数,默认为200;
enableLookups:是否启用DNS查询功能;
acceptCount:等待队列的最大长度

Engine组件

servlet引擎,其内部可以一个或多个host组件来定义站点; 通常需要通过defaultHost来定义默认的虚拟主机;

Host组件

Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。

  • name 指定主机名;

  • appBase 应用程序基本目录,即存放应用程序的目录;

  • unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序;

tomcat 常用配置

配置Tomcat监听80端口

第一步:修改server.xml配置文件

1
2
3
[root@local-linux02 conf]# vi /usr/local/tomcat/conf/server.xml

//Connector port="8080",将端口号改为80,之后保存退出。

第二步:重启tomcat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//关闭tomcat
[root@local-linux02 conf]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

//再次启动tomcat
[root@local-linux02 conf]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

校验成果

  • 检查端口情况
1
2
3
4
[root@local-linux02 conf]# netstat -lntp | grep java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 42011/java
tcp6 0 0 :::8009 :::* LISTEN 42011/java
tcp6 0 0 :::80 :::* LISTEN 42011/java
  • 浏览器测试

配置Tomcat虚拟主机

同样还是修改配置文件server.xml,其中<host></host>字段就是关于虚拟主机的配置,包括以下选项:

name定义域名;

appBase定义应用的目录,Java的应用通常是一个war的压缩包,你只需要将war的压缩包放到appBase目录下面即可;

docBase,这个参数用来定义网站的文件存放路径,默认为appBase/ROOT

应用示例:利用zrlog部署一个java的应用

第一步:修改配置文件

1
2
3
4
5
6
7
8
9
vi /usr/local/tomcat/conf/server.xml

//修改host字段

<Host name="www.java-test.com" appBase=""
unpackWARs= "true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/data/wwwroot/java-test.com/" debug="0" reloadable="true" crossContext="true"/>
</Host>

第二步:下载zrlog

1
2
3
4
5
6
7
//下载zrlog
[root@local-linux02 src]# wget http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war

//移动至webapps
mv zrlog-1.7.1-baaecb9-release.war /usr/local/tomcat/webapps/

mv /usr/local/tomcat/webapps/zrlog-1.7.1-baaecb9-release /usr/local/tomcat/webapps/zrlog

第三步:数据库配置

  • 登陆数据库
1
2
3
4
5
6
7
8
9
[root@local-linux02 webapps]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.2.15-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

创建数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
MariaDB [(none)]> create database zrlog;
Query OK, 1 row affected (0.02 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| db2 |
| information_schema |
| mysql |
| performance_schema |
| zrlog |
+--------------------+
5 rows in set (0.08 sec)
  • 授权用户
1
2
3
4
5
MariaDB [(none)]> grant all on zrlog.* to 'zrlog'@127.0.0.1 identified by 'steve-123';
Query OK, 0 rows affected (0.05 sec)

MariaDB [(none)]> exit
Bye
  • 测试是否数据库是否能正常登陆

第四步:浏览器访问 ip:8080/zrlog ,运行安装程序

  • 依次填写服务器地址、数据库名、用户名、密码、端口、系统邮箱

  • 下一步,随便填了,反正是实验环境

  • 完成

  • 效果预览

第五步:去掉浏览器访问时输入的目录名

第六步:重启tomcat

1
2
[root@local-linux02 webapps]# /usr/local/tomcat/bin/shutdown.sh
[root@local-linux02 webapps]# /usr/local/tomcat/bin/startup.sh

浏览器测试

  • 修改本地host文件

  • 浏览器测试

Tomcat日志

其中,

  • catalina开头的日志为Tomcat的综合日志,它记录Tomcat服务相关信息,也会记录错误日志。catalina.2018-xx-xx.logcatalina.out内容相同,前者会每天生成一个新的日志;

  • host-managermanager为管理相关的日志,其中host-manager为虚拟主机的管理日志;

  • localhostlocalhost_access为虚拟主机相关日志,其中带access字样的日志为访问日志,不带access字样的为默认虚拟主机的错误日志。

日志文件同样是在/usr/local/tomcat/conf/server.xml 中虚拟主机配置的位置字段,其中:

  • prefix定义访问日志的前缀;

  • suffix定义日志的后缀;

  • pattern定义日志格式;

示例:

1
2
3
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="123.cn_access" suffix=".log"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />

tomcat 连接 mysql

tomcat连接mysql是通过自带的JDBC驱动实现的,具体步骤如下:

第一步:配置mysql,创建数据库、表、用户

1
2
3
4
5
6
7
mysql -u root -p

create database java_test;

use java_test;

grant all on java_test.*'java@ip' identified by 'passwd';

第二步:修改tomcat配置文件

1
2
3
4
5
6
7
8
9
10
vi content.xml

<Resource name="jdbc/mytest"
auth="Container"
type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="java" password="aminglinux"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/java_test">
</Resource>

第三步:修改 web.xml配置文件

1
2
3
4
5
6
7
8
9

vi /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml

<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>
</r

第四步:编辑测试内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 aminglinux";
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();
%>

第五步:重启tomcat

/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh

参考资料:

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!