配置Tomcat

1 安装 Tomcat

  1.1 安装JDK

  1.2 安装Tomcat

2 配置Tomcat

  2.1 配置Tomcat服务的访问端口

  2.2 虚拟主机

    2.2.1 server.xml文件的内容

    2.2.2 增加一个虚拟主机

3 测试 Tomcat解析JSP

4 Tomcat日志

5 Tomcat连接MySQL

配置Tomcat

目前有很多网站使用Java编写的,所以解析Java程序就必须有相关的软件来完成,Tomcat就是其中一个。Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,有Apache、Sun和其他一些公司及个人共同开发而成。

Tomcat技术先进、性能稳定而且免费,因而深受Java爱好者的喜爱,并得到部分软件开发商的认可,成为目前比较流行的Web应用服务。

Tomcat是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试Java程序的首选。对于初学者来说,在一台机器上配置好Apache服务器之后,可利用它响应对HTML页面的访问请求。实际上,Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你运行Tomcat是,它是作为一个独立的进程运行的。

1 安装 Tomcat

Tomcat的安装分为安装JDK和安装Tomcat两个步骤。JDK(Java Development Kit)是Sun Microsystems针对Java开发的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK是整个Java的核心,它包括了Java运行环境、Java工具和Java基础的类库。所以想要运行Java程序必须要有JDK的支持,而安装Tomcat的前提也是安装好JDK。

1.1 安装JDK

官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

或:http://r.aminglinux.com

需先下载再借助FTP服务上传到Linux

# cd /usr/local/scr
# tar zxvf jdk-8u101-linux-x64.tar.gz
# mv jdk1.8.0_101 /usr/local/jdk1.8

设置环境变量
# vim /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 //重新加载
# java -version //检测是否正确
java version "1.8.0_101"
java(TM) SE Runtime Environment (build 1.8.0_101-b13)
java HotSpot(TM) 64-Bit Server VM (build 25.101-b13,mixed mode)

如果检测结果不一样,可能是系统调用了rpm的openjdk,检测

# which java
//如果结果为/usr/bin/java则说明这是rpm的JDK,而且执行Java -version时会有openjdk字样。其实也可以直接使用openjdk做后续实验结果保持一致,需做一个临时处理
# mv /usr/bin/java /usr/bin/java_bak
# source /etc/profile

再次执行java -version,显示正常

1.2 安装Tomcat

官方网站:http://tomcat.apache.org

或 当前下载的版本为Tomcat 8

# cd /usr/local/scr/
# wget http://apache.fayea.com/tomcat/tomcat-8/v8.5.13/bin/apache-tomcat-8.5.13.tar.gz
# tar zxvf apache-tomcat-8.5.13.tar.gz
# mv apache-tomcat-8.5.13 /usr/local/tomcat
//二进制报,免去编译过程
# /usr/local/tomcat/bin/startup.sh
...
tomcat started.
# ps aux |grep tomcat
# netstat -lntp |grep java
//正常会有8080端口、8005管理端口、8009第三方服务调用的端口,如httpd和Tomcat结合时会用到

开机启动
# echo "/usr/local/tomcat/bin/startup.sh" >> /etc/rc.d/rc.local
# chmod a+x /etc/rc.d/rc.local //默认该文件没有x权限

浏览器输入http://192.168.188.128:8080,看到Tomcat默认页面

image-20201231160606769

2 配置Tomcat

2.1 配置Tomcat服务的访问端口

Tomcat默认启动的端口是8080,在/usr/local/Tomcat/conf/server.xml文件修改。

# vim /usr/local/Tomcat/conf/server.xml
Connector port="80" protocol="HTTP/1.1"

重启Tomcat
# /usr/local/Tomcat/bin/shutdown.sh
# /usr/local/Tomcat/bin/startup.sh

Tomcat的关闭和启动需使用自带的脚本实现。

再生产环境中,Tomcat使用8080端口,Nginx使用80端口。想访问Tomcat,需要使用Nginx代理。

2.2 虚拟主机

配置文件/usr/local/tomcat/conf/server.xml,其中<!--和-->之间的内容为注释掉的

2.2.1 server.xml文件的内容

内容(不好包含注释掉的):

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="orgapache.catalina.startup.VersionLoggerListener" />
<Listener className="orgapache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="orgapache.catalina.core.JreMenoryLeakPreventionListener" />
<Listener className="orgapache.catalina.mbeans.GloalResourcesLifecycleListener" />
<Listener className="orgapache.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.MenoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
  connectionTimeout="20000"
  redirectPort="8443" />
<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 &quot;%r&quot; %s %b" />
</Host>
</Engine
</Service>

<Host></Host>之间的配置为虚拟主机配置部分,name定义域名,appBase定义应用的目录/usr/local/tomcat/webapps

Java的应用通常是一个jar的压缩包,将jar的压缩包放到appBase目录下面。

刚刚访问的Tomcat默认页在appBase目录下面,不过是在它子目录ROOT里:

# ls /usr/local/tomcat/webapps/ROOT/
... tomcat.gif index.jsp
#curl localhost:8080/tomcat.gif -I
//200 ok

在appBase(/usr/local/Tomcat/webapps)目录下有很多子目录,每一个子目录都可以被访问,可以把自定义的应用放到webapps目录里(假设应用名字为xxx,xxx为一个目录),可以通过http://ip/xxx/来访问这个应用。

2.2.2 增加一个虚拟主机

增加一个虚拟主机,并定义域名,编辑server.xml,在</Host>下一行插入新的<Host>,如下:

<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"/>
</Host>

其中多了一个docBase,这个参数用来定义网站的文件存在放的路径,如果不定义,默认是在/usr/local/tomcat/webapps/ROOT/下面的。

定义了docBase就以该目录为主了,其中appBase和docBase可以一样。

测试:

# mkdir /data/tomcatweb
# echo "Tomcat test page." > /data/tomcatweb/1.html

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

# curl -x127.0.0.1:8080 www.123.cn/1.html
Tomcat test page.

3 测试 Tomcat解析JSP

Tomcat主要用来解析JSP页面。创建一个JSP的测试页面:

# vim /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
<html><body><center>
Now time is: Mon Apr 03 12:59:13 CST 2017
</center></body></html>

浏览器测试需设置hosts文件

4 Tomcat日志

Tomcat的日志目录为/usr/local/tomcat/logs,主要有四大类日志:

# cd /usr/local/tomcat/logs
# ls
catalina.2017-04-03.log catalina.out host-manager.2017-04-03.log localhost.2017-04-03.log localhost_access_log.2017-04-03.txt
manager.2017-04-03.log WEB-INF

catalina开头的日志为Tomcat的综合日志,他记录Tomcat服务相关信息,也会记录错误日志。

catalina.2017-04-03.logcatalina.out内容相同,前者会每天生成一个新的日志。

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

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

 

访问日志默认不会生成,需要在server.xml中配置一下。

具体方法是在对应虚拟主机的<Host></Host>里面加入下面的配置(假如域名为123.cn):

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

prefix定义访问日志的前缀,suffix定义日志的后缀,pattern定义日志格式。

新增加的虚拟主机默认并不会生成类似默认虚拟主机的那个“localhost.日期.log”日志,错误日志会统一记录到catalina.out中。关于Tomcat日志,最需要关注catalina.out,出现问题是应该首先查看。

5 Tomcat连接MySQL

Tomcat连接MySQL是通过自带的JDBC驱动实现,网上很多资料介绍需要下载mysql-connector-java-xxx.jar(xxx为版本号),并放到Tomcat的lib目录下面才可以

经实验得出结论:无需做此步操作。

配置mysql,创建实验用的库、表以及用户:

# mysql -uroot -p'123456'
mysql> create database java_test;
mysql> use java_test;
mysql> grant all on java_test.* to 'java'@'127.0.0.1' identified by 'aminglinux';
mysql> create table aminglinux (`id` int(4), `name` char(40));
mysql> insert into aminglinux values (1, 'abc');
mysql> insert into aminglinux values (2, 'aaa');
mysql> insert into aminglinux values (3, 'ccc');

验证用户是否可用

# mysql -ujava -paminglinux -h127.0.0.1
mysql>

配置Tomcat相关的配置文件

/usr/local/tomcat/conf/context.xml

# vim /usr/local/tomcat/conf/context.xml        //在</Context>上面增加以下内容
<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>

name定义jdbc/mytest,后面的mytest可以自定义,后面用到

username为mysql的用户,password为密·码

url定义MySQL的IP、端口、库名。

 

另一配置文件:

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

# vim /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>

 

每一个应用(上文提到的webapps/ROOT、webapps/aming等)目录下都应该有一个WEB-INF目录,它里面都会有的配置文件,比如web.xml就是用来定义JDBC相关资源的,其中的res-ref-name和前面定义的Resource name保持一致

既然选择了webapps/ROOT作为实验应用对象,就需要在ROOT目录下面创建测试JSP文件(用浏览器访问的文件):

JSP脚本

# vim /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();
%>

上面代码为JSP脚本,不会不用深究,知道是用于连接MySQL,并且查询一个库、表的数据即可。

重启Tomcat
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh

浏览器访问http://192.168.188.128:8080/t.jsp,他会查询java_test库的aminglinux表,并列出具体数据,

image-20210101131247471

这和直接用MySQL命令行得到的结果是一致的:

# mysql -ujava -paminglinux -h127.0.0.1 java_test -e "select * from aminglinux"
id name
1 abc
2 aaa
3 ccc

出处:《跟阿铭学Linux》

posted @ 2021-02-21 20:21  破碎的屋檐  阅读(101)  评论(0编辑  收藏  举报