Tomcat服务器
Tomcat是纯Java实现的,具有平台无关性。
◆Tomcat版本的选择:
JDK1.4 建议使用 Tomcat5.0.x系列
JDK1.5 建议使用 Tomcat5.5.x系列
JDK1.6 建议使用 Tomcat6.0.x以上系列
对于Servlet3.0规范,需要使用 Tomcat7.0.x或更新的版本系列。
◆Tomcat工具的选择:
Windows平台下载ZIP包,Linux平台下载TAR包,建议不要下载安装文件,因为安装的Tomcat看不到启动、运行时控制台的输出,不利于开发。
解压缩后的文件主要具有以下结构:
bin:存放启动和关闭Tomcat的命令的路径。
conf:存放Tomcat的配置,所有的Tomcat的配置都在该路径下设置。
lib:存放着Tomcat服务器的核心类库(Jar文件),如果需要扩展Tomcat功能,也可将第三方类库复制到该路径下。
logs:这是一个空路径,该路径用于保存Tomcat每次运行后产生的日志。
temp:保存Web应用运行过程中生成的临时文件。
webapps:该路径用于自动部署Web应用,将Web应用复制在该路径下,Tomcat会将该应用自动部署在容器中。
work:保存Web应用运行过程中,编译生成的class文件。该文件夹可以删除,但每次启动Tomcat服务器时,系统将再次建立该路径。
◆Tomcat使用的前提条件:
运行Tomcat只需要一个环境变量:JAVA_HOME;该环境变量的值指向JDK安装路径;JDK安装路径下有javac.exe、native2ascii.exe等程序;JDK安装路径下还含有一个lib目录,该路径下应该还有dt.jar和tools.jar两个文件。
◆启动Tomcat:
对于Windows平台只需要双击Tomcat安装路径下bin路径中的startup.bat文件即可,启动后的画面如下所示(下图是Tomcat7启动的画面):
![](http://dl.iteye.com/upload/attachment/0078/1213/51fe3727-ac66-3f16-badb-3ecde10901f1.jpg)
◆配置Tomcat的服务端口:
Tomcat的默认服务端口是8080,可以通过管理Tomcat配置文件来改变该服务端口,甚至可以通过修改配置文件让Tomcat同时在多个端口提供服务。Tomcat的配置文件都放在conf目录下,控制端口的server.xml文件也存放在该路径下,其中有以下配置:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
其中,port="8080"就是Tomcat提供Web服务的端口,将8080修改成任意端口,建议使用1024以上的端口,避免与公用端口冲突。
如果需要让Tomcat运行多个服务,只需要复制server.xml文件中的<service>元素,并修改相应的参数即可实现一个Tomcat运行多个服务,当然必须使用不同的端口提供服务。<service>元素如下:
<Service name="Catalina">
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
<Context docBase="E:\iDev\jdev\ide\jee3.7_zh\tomcat\7.0.22\wtpwebapps\servlet2_5" path="/servlet2_5" reloadable="true" source="org.eclipse.jst.jee.server:servlet2_5"/></Host>
</Engine>
</Service>
◆配置Tomcat列出web应用根路径下的所有页面以便选择需要调试的JSP页面:
在默认情况下,Tomcat不会列出web应用根路径下的所有页面,可以打开conf目录下的web.xml文件,找到如下配置,将listings参数的值修改为true即可让Tomcat列出web应用根路径下的所有页面。
<init-param>
<param-name>listings</param-name>
<param-value>
true
</param-value>
</init-param>
◆配置Tomcat的用户及密码:
控制台的用户名和密码是通过Tomcat的JAAS控制的,JAAS的全称是Java Authentication Authorization Service即Java验证和授权API,它用于控制对Java Web应用的授权访问。
webapps路径是Web应用的存放路径,而Manager控制台对应的Web应用也存放在该路径下,进入webapps/manager/WEB-INF路径下,该路径存放了Manager应用的配置文件,使用无格式编辑器打开web.xml文件,可以看到如下片段:
<!-- Define a Security Constraint on this Application -->
<!-- NOTE: None of these roles are present in the default users file -->
<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>
通过以上的配置文件可知:登录Manageer控制台可能需要不同的Manager角色,对于普通开发者,通常需要匹配/text/*、/status/*的资源,因此为该用户分配一个manager-gui角色即可。
Tomcat默认采用文件安全域,即以文件存放用户名和密码,Tomcat的用户由conf路径下的tomcat-users.xml文件控制,打开该文件,配置如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-gui"/>
<user username="admin" password="admin" roles="tomcat"/>
<user username="manager" password="manager" roles="manager-gui"/>
<user password="admin" roles="manager" username="admin"/>
<user password="admin" roles="manager" username="admin"/>
<user password="admin" roles="manager" username="admin"/>
<user password="admin" roles="manager" username="admin"/>
</tomcat-users>
以上配置文件中粗体字代码增加了一个用户,用户名:manager,密码:manager,角色属于manager-gui
◆Tomcat的部署形式(两种):
1)、将整个路径部署成Web应用
2)、将War文件部署成Web应用
◆Tomcat的部署方式:
1)、利用Tomcat自动部署
将Web应用复制到Tomcat的webapps下即可
2)、利用控制台部署
使用Tomcat的用户登录控制台,在Deploy视图中,填写context path(required)和WAR or Directory URL
例如,context path(required):/aaa
WAR or Directory URL: E:\iDev\jdev\prj\meple37zh\webServlet25
则Tomcat的webapps路径下多了一个名为aaa的文件夹,该文件夹的内容与E:\iDev\jdev\prj\meple37zh\webServlet25 路径下文件夹内容一致。
3)、增加自定义的Web部署文件
需要在conf目录下新建Catalina目录,再在Catalina目录下新建localhost目录,最后在该目录下新建一个名字任意的xml文件;该文件就是部署Web应用的配置文件,该文件的主文件名将作为web应用的虚拟url路径。该文件的内容通常是一个Context的标签,指明了web工程所在的绝对路径。
4)、修改server.xml文件部署Web应用
修改server.xml文件,一般不建议使用。
例如:Tomcat的server.xml中的配置
<Context path="" docBase="E:\MyEclipse\Workspaces\PrjCase\WebRoot" reloadable="true"/>
◆Tomcat配置数据源的方式(两种):
1)、全局数据源:该数据源可以让所有的web应用访问
2)、局部数据源:只能让单独的web应用访问
<context docBase="G:/publish/codes/01/aa" 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>