Tomcat的下载和安装

1 安装Tomcat服务器

  Tomcat完全是纯Java实现,与平台无关,在任何平台上运行完全相同。在Windows和Linux平台上的安装和配置基本相同。这里以Windows平台为示范,介绍Tomcat的下载和安装。

Step 1: 登录Tomcat官网站点,下载Tomcat合适的版本(因为我需要使用Servlet3.1规范,因此必须使用Tomcat 8.0.X或更新的版本系列,所以我选择的是Tomcat 9.0.X版本)。Windows平台下载ZIP包,Linux平台下载TAR包。建议不要下载安装文件,因为安装文件的Tomcat看不到启动、运行时控制台的输出,不利于开发者使用。

Step 2: 解压缩刚下载的压缩包,解压缩后应有如下文件结构:

  • bin:存放启动和关闭Tomcat的命令的路径。
  • conf:存放Tomcat的配置,所有的Tomcat的配置都在改路径下设置
  • lib:存放Tomcat服务器的核心类库(JAR文件),如果需要扩展Tomcat功能,也可将第三方类库复制到该路径下
  • logs:这是一个空路径,该路径用于保存Tomcat每次运行后产生的日志
  • temp:保存Web应用运行过程中生成的临时文件
  • webapps:该路径用于自动部署Web应用,将Web应用复制在该路径下,Tomcat会将该应用自动部署在容器中。
  • work:保存Web应用在运行过程中,编译生成的class文件。该文件夹可以删除,但每次启动Tomcat服务器时,系统将再次建立该路径
  • LICENSE等相关文档

将解压缩后的文件夹放在任意路径下
运行Tomcat只需要一个环境变量:JAVA_HOME。不管是Windows还是Linux,只需要增加该环境变量即可,该环境变量的值指向JDK路径

注意:此处JAVA_HOME环境变量应该指向JDK安装路径,不是JRE安装路径。JDK安装路径下应该包含bin目录,该目录下应该还有javac.exe、native2ascii.exe等程序;JDK安装路径下还含有一个lib目录,该目录下应该有dt.jar和tools.jar两个文件;JDK安装路径下还应该包含jre目录,这个jre目录就是JDK自带的JRE

Step 3:启动Tomcat,对于Windows平台,只需要双击Tomcat安装路径下bin目录种的startup.bat文件即可。启动Tomcat之后,打开浏览器,在地址栏输入http://localhost:8080,然后回车,浏览器种出现如图所示界面,即表示Tomcat安装成功。

  Tomcat安装成功后,必须对其进行简单的配置,这些配置包括Tomcat的端口、控制台等。虽然Tomcat是一个免费的Web服务器,但也提供了图形界面控制台,通过控制台,用户可以方便的部署Web应用、监控Web应用的状态等。但对于一个开发者而言,通常建议通过修改配置文件来管理Tomcat配置,而不是通过图形界面。

2 配置Tomcat的服务器

  Tomcat的默认服务端口是8080,可以通过管理Tomcat配置文件来改变该服务端口,甚至可以通过修改配置文件让Tomcat同时在多个端口提供服务。

  Tomcat的配置文件都放在conf目录下,控制端口的配置文件也放在该路径下。打开conf下的server.xml文件,务必使用记事本或vi等无格式的编辑器,不要使用如写字板等有格式的编辑器。定位server.xml文件的68行处,看到如下代码:

1
2
3
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

  其中,port=”8080”就是Tomcat提供Web服务的端口,将8080修改成任意的端口,建议使用1024以上的端口,避免与公用端口冲突。此处修改位8888,即Tomcat的Web服务的提供端口为8888.

  修改成功后,重新启动Tomcat后,在浏览器地址栏输入http://localhost:8888,回车,将再次看到Tomcat安装成功时的页面,即显示Tomcat端口修改成功

提示:如果需要让Tomcat运行多个服务,只需要复制server.xml文件中的<Service>元素,并修改相应的参数,便可以实现一个Tomcat运行多个服务,当然必须在不同的端口提供服务

  在Web应用的开发阶段,通常希望Tomcat能列出Web应用根路径下的所有页面,这样能更方便地选择需要调试的JSP页面。在默认情况下,处于安全考虑,Tomcat并不会列出Web应用根路径下的所有页面,为了让Tomcat列出Web应用根路径下的所有页面,可以打开Tomcat的conf目录下的web.xml文件,在该文件的121、122两行,看到一个listings参数,该参数的值默认是false,将该参数改为true,即可让Tomcat列出Web应用根路径下的所有页面,即:

1
2
3
4
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>

3 进入控制台

  在该页面的右上角显示有三个控制台:一个是Server Status控制台,另一个是Manager App控制台,还有一个是Host Manager控制台。Status控制台用于监控服务器的状态,而Manager控制台可以部署、监控Web应用,因此通常只需使用Manager控制台即可。

  如图右上角所示的第二个按钮,即是进入Manager控制台的链接,单击该按钮将出现如下图所示的登陆界面

  这个控制台必须输入用户名和密码才可以登录,控制台的用户和密码是通过Tomcat的JAAS控制的。

JAAS的全称是Java Authentication Authorization Service(Java验证和授权API),它用于控制对Java Web应用的授权访问

  webapps路径是Web应用的存放位置,而Manager控制台对应的Web应用也是放在该路径下的。进入webapps/manager/WEB-INF路径下,该路径下存放了Manager应用的配置文件,用无格式编辑器打开web.xml文件。

  在该文件的最后部分,看到日下配置片段:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<security-constraint>
<web-resource-collection>
<web-resource-name>HTML Manager interface (for humans)</web-resource-name>
<url-pattern>/html/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager-gui</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Text Manager interface (for scripts)</web-resource-name>
<url-pattern>/text/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager-script</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>JMX Proxy interface</web-resource-name>
<url-pattern>/jmxproxy/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager-jmx</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Status interface</web-resource-name>
<url-pattern>/status/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager-gui</role-name>
<role-name>manager-script</role-name>
<role-name>manager-jmx</role-name>
<role-name>manager-status</role-name>
</auth-constraint>
</security-constraint>

<!-- Define the Login Configuration for this Application -->
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Tomcat Manager Application</realm-name>
</login-config>

  通过上面的配置文件可以知道,登录Manager控制台可能需要不同的manager角色。对于普通开发者来说,通常需要访问匹配/html/、/status/的资源,因此为用户分配一个manager-gui角色即可。

  Tomcat默认采用文件安全域,即以文件存放用户名和密码,Tomcat的用户由conf路径下的tomcat-users.xml文件控制,打开该文件,发现该文件内有如下内容:

1
2
3
4
5
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
</tomcat-users>

  上面的配置文件显示了Tomcat默认没有配置任何用户,所以无论在上图中的登录对话框中输入任何内容,系统都不能登录成功。为了正常登录Manager控制台,可以通过修改tomcat-users.xml文件来增加用户,并让该用户属于manager角色即可。Tomcat允许在<tomcat-users>元素中增加<user>元素来增加用户,将tomcat-users.xml文件内容修改如下:

1
2
3
4
5
6
7
8
9
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<!-- 增加一个角色,指定角色名即可 -->
<role rolename="manager-gui"/>
<!-- 增加一个用户,指定用户名、密码和角色即可 -->
<user username="manager" password="manager" roles="manager-gui"/>
</tomcat-users>

  上面的配置文件表示增加了一个用户:用户名为manager,密码为manager,角色属于manager-gui。这样即可在登录对话框中输入账号密码来登录Manager控制台,成功登录后可以看到下图所示界面。

  在如上图所示的控制台可监控到所有部署在该服务器下的Web应用,左边列出了所有部署在该Web容器内的Web应用,右边的4个按钮则用于控制,包括启动、停止、重启等。

  控制台下方的Deploy区则用于部署Web应用。Tomcat控制台提供两种方式部署Web应用:一种是将整个路径部署成Web应用;另一种是将WAR文件部署成Web应用(在上图中看不到这种方式,在Deploy区下面,还有一个WAR file to deploy区,用于部署WAR文件)

4 部署Web应用

在Tomcat中部署Web应用的方式主要有如下几种

  • 利用Tomcat的自动部署
  • 利用控制台部署
  • 增加自定义的Web部署文件
  • 利用server.xml文件部署Web应用

  利用Tomcat的自动部署方式是最简单、最常用的方式,只要将一个Web应用复制到Tomcat的webapps下,系统就会把该应用部署到Tomcat中。

  利用控制台部署Web应用也很简单,只要在部署Web应用的控制台按如下图所示方式输入即可。

  按上图所示方式输入后,单击“Deploy”按钮,将会看到Tomcat的webapps目录下多了一个名为aaa的文件夹,该文件夹的内容和G:\publish\codes\02\2.1\路径下webDemo文件夹的内容完全相同——这表明:当利用控制台部署Web应用时,其实质依然是利用Tomcat的自动部署。

  第三种方式则无需将Web应用复制到Tomcat安装路径下,只是部署方式稍稍复杂一点,需要在conf目录下新建Catalina目录,再在Catalina目录下新建localhost目录,最后在该目录下新建一个名字任意的XML文件——该文件就是部署Web应用的配置文件,该文件的主文件名将作为Web应用的虚拟路径。例如在conf/Catalina/localhost下增加一个dd.xml文件,该文件的内容如下:

1
2
<Context docBase="G:/public/codes/01/aa" debug="0" privileged="true">
</Context>

  上面的配置文件中的docBase="G:/public/codes/01/aa"指定了Web应用的绝对路径,再次启动Tomcat,Tomcat将会把G:/public/codes/01/aa路径下的webDemo文件夹部署成Web应用。该应用的URL地址为:

http://<server_address>:<port>/dd

  其中URL中的dd就是Web部署文件的主名。

  最后还有一种方式是修改server.xml文件,这种方式需要修改conf目录下的server.xml文件,修改该文件可能破坏Tomcat的系统文件,因此不建议采用。

5 配置Tomcat的数据源

  从Tomcat 5.5开始,Tomcat内置了DBCP的数据源实现,所以可以非常方便的配置DBCP数据源。Tomcat提供了两种配置数据源的方式,这两种方式所配置的数据源的访问范围不同:一种数据源可以让所有的Web应用都访问,被称为全局数据源;另一种只能在单个的Web应用中访问,被称为局部数据源。不管配置那种数据源,都需要提供特定数据库的JDBC驱动。下面将以MySQL为例配置数据源,所以必须先将MySQL的JDBC驱动程序复制到Tomcat的lib路径下。

注意:MySQL数据库驱动可以到MySQL官方站点下载。

  局部数据源无需修改系统的配置文件,只需修改用户自己的Web部署文件,不会造成系统的混乱,而且数据源被封装在一个Web应用之内,防止被其他的Web应用访问,提供了更好的封装性。

  局部数据源只与特定的Web应用相关,因此在该Web应用对应的部署文件中配置。例如,为上面的Web应用增加局部数据源,修改Tomcat下conf/Catalina/localhost下的dd.xml文件即可。为Context元素增加一个Resource子元素,增加局部数据源后的dd.xml文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
<Context docBase="G:/public/codes/01/aa" debug="0" privileged="true">
<!-- 其中name指定数据源在容器中的JNDI名
driverClassName指定连接数据库的驱动
url指定数据库服务的URL
username指定连接数据库的用户名
password指定连接数据库的密码
maxActive指定数据源最大活动连接数
maxIdle指定数据池中最大的空闲连接数
maxWait指定数据池中最大等待获取连接的客户端 -->
<Resource name="jdbc/dstest" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javaee" username="root" password="32147" maxActive="5" maxIdle="2" maxWait="10000" />
</Context>

  上面的配置文件中Resource元素就为该Web应用配置了一个局部数据源,该元素的各属性指定了数据源的各种配置信息。

注意:JNDI的全称是Java Naming Directory Interface,即Java命名和目录接口,听起来非常专业,其实很简单:就是为某个Java对象起一个名字,例如,上面JNDI的用途就是为Tomcat容器中的数据源起一个名字:jdbc/dstest,从而让其他程序可以通过名字来访问该数据源对象

  再次启动Tomcat,该Web应用即可通过JNDI名字来访问数据源。下面是测试访问数据源的JSP页面代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 初始化Cotntext,使用InitialContext初始化Context
Context ctx = new InitialContext();
/*
通过JNDI查询数据源,该JNDI为java:comp/env/jdbc/dstest,分为两个部分
java:comp/env是Tomcat固定的,Tomcat提供的JNDI绑定都必须加该前缀
jdbc/dstest是定义数据源时的数据源名
*/
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/dstest");
// 获取数据库连接
Connection conn = ds.getConnection();
// 获取Statement
Statement stmt = conn.creatStatement();
// 执行查询,返回ResultSet对象
ResultSet rs = stmt.executeQuery("select * from news_inf");
while(rs.next()){
out.println(rs.getString(1)
+ "\t" + rs.getString(2) + "<br/>");
}

  上面的DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/dstest");实现了JNDI查找数据源对象,一旦获取了数据源对象,程序就可以通过该数据源取的数据库连接,从而访问数据库。

  上面的方式是配置局部数据源,如果需要配置全局数据源,则应通过修改server.xml文件来实现,全局数据源的配置与局部数据源的配置基本类似,只是修改的文件不同。局部数据源只需修改Web应用的配置文件,而全局数据源需要修改Tomcat的sercer.xml文件

  上面的代码需要在本机安装MySQL数据库,并提供一个名为javaee的数据库,该数据库下必须有一个名为news_inf的数据表

注意:使用全局数据源需要修改Tomcat原有的server.xml文件,所以可能导致破坏Tomcat系统,因而尽量避免使用全局数据源。

参考资料:《轻量级JavaEE企业应用实战》

文章目录
  1. 1 安装Tomcat服务器
  2. 2 配置Tomcat的服务器
  3. 3 进入控制台
  4. 4 部署Web应用
  5. 5 配置Tomcat的数据源
|