1.介绍
下载地址:
http://jakarta.apache.org/site/downloads/index.html
2.安装
2.1 环境配置
JAVA_HOME C:\Program Files\Java\jdk1.6.0_05
JAVA_BIN C:\Program Files\Java\jdk1.6.0_05\bin
TOMCAT_HOME D:\programming\java\apache-tomcat-6.0.18
CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
JAVA_OPTS -Xms64m -Xmx512m
PATH后加 ;%JAVA_HOME%\bin;%TOMCAT_HOME%\bin
ANT_HOME= D:\programming\java\apache-ant-1.7.1
PATH=%PATH%;%ANT_HOME%\bin
2.2 测试java环境
在命令行中输入:
java –version查看版本
javac –help查看path路径是否设置完
2.3 源代码安装Tomcat(不推荐)
下载ANT,地址 http://ant.apache.org/
下载tomcat源码,地址 http://tomcat.apache.org/ apache-tomcat-6.0.18-src.zip,解压后将里面的build.properties.default改成build.properties
2.4 二进制安装
直接解压到某一文件夹下即可,但要更改TOMCAT_HOME变量
直接启动startup.bat即可
2.5 配置
2.5.1 安装名为Tomcat6的Tomcat服务:service install
删除tomcat服务service remove
安装名为MyTomcat的服务:service install MyTomcat
删除名为MyTomcat的服务:service remove MyTomcat
2.5.2 <Context>元素
<Context path="/qqq" reloadable="true" docBase="E:\qqq" workDir="E:\qqq\work" />
path代表网络访问的上下文路径,reloadable表示可以在运行时在classes与lib文件夹下自动加载类包,在开发阶段一般为true有助于调试类源文件,但该参数所产生的操作会增加服务器的运行负荷,所以在部署阶段一般都设置成false,docBase表示应用程序的路径,workDir表示缓存文件的放置地点
-
conf/tomcat-users.xml中添加
<role rolename="manager"/>
<user username="qq" password="qq" roles="manager"/>
2.6 测试运行
新建一页面hello.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<HTML>
<HEAD>
<title>hello</title>
</HEAD>
<BODY>
<%="<h1>Hello!<br>你好!</h1>"%>
</BODY>
</HTML>
3 tomcat 的安全管理
提供Realm支持,即将不同的应用赋给不同的用户,没有权限的用户则不能访问这个应用。Tomcat提供三种Realm:
JDBCRealm:用户信息存在数据库里,通过JDBC获得用户信息。
JNDIRealm:用户信息存在LDAP的服务器里,通过JNDI获取用户信息。
MemoryRealm:用户信息存在一个xml里,通过xml进行验证。
4 tomcat 与 apache 的集成
tomcat处理静态HTML不如apache,所以用apache处理静态HTML,用tomcat处理JSP、Servlet。
5 Tomcat 工作原理 -Servlet 容器
Servlet容器的作用就是负责处理客户请求。客户请求到来时,Servlet容器获取请求,然后调用某个Servlet,并把Servlet的执行结果返回给客户。
-ServletRequest ――> 客户端 -ServletResponse――> |
-
独立的Servlet容器-基于java的web服务器
-
进程内的Servlet容器-作为进程内的Servlet容器,Servlet容器作为web服务器的插件和java容器(JVM)的实现。
-
进程外的Servlet容器-作为进程外的Servlet容器,Servlet容器运行于Web服务器之外的地址空间,并且作为Web服务器的插件和java容器(JVM)的实现。插件和JVM使用IPC机制进行通信。
6 Tomcat 组织结构 -Server.xml
Tomcat是一个基于组件的服务器,最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式配置在这个顶层容器中。其配置在conf/server.xml文件中:
<Server> 一个xml文件只能有一个Server,代表一个服务器 <Service> 有一个Engine组件和多个Connector <Connector/> 通信接口,通过此接口接收客户的请求,然后发送给其他组件,最后把服务器的响应传递给客户 <Connector/> ........ <Connector/> <Engine>处理用户请求并生成响应,可以有多个Host <Host>虚拟主机,可以有多个Context <Context />web应用 </Host> </Engine> </Service> </Server> |
7 Tomcat web 应用
一个java web应用包含Servlet、JSP页面、java类、静态资源(HTML文档、图片等)、描述Web应用的描述文件。
图 多个Web应用时Tomcat服务的过程
如果不加任何修改,在一台服务器上同时运行两个Tomcat服务显然会发生端口冲突。假设现在 已经按照正常的方式安装配置好了第一个Tomcat,第二个如何设置呢? 以下是使用Tomcat6.0.16 解压版本 所做的实验。
解决办法:
1.解压Tomcat到一个新的目录,比如d:\TomcatServer2;
2.新建一个环境变量CATALINA_HOME2,路径为d:\TomcatServer2;
3.编辑Tomcat/bin/startup.bat和catalina.bat,把CATALINA_HOME全部替换成CATALINA_HOME2;
4.编辑Tomcat/conf/server.xml,将端口号8开头都改为9开头(其他端口只要不冲突即可),并修改默认编码为utf-8(以支持中文链接)
示例:
<Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="9443" URIEncoding='UTF-8'/>
=====================
<Connector port="9009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="9443" URIEncoding='UTF-8'/>
5.运行测试。
8 war 文件格式
ROOT
|――/ html文件、jsp文件、图片、样式表等
|____WEB-INF该目录下的所有文件都是不可访问的
|――classes
|――lib
|____web.xml
为了部署方便,src存放java源代码,js存放脚本文件,images存放图片文件,css存放样式表文件,web存放JSP和HTML文件
WEB-INF下的各种资源文件分开存放,properties存放属性文件等。
9 web.xml
9.1 web应用图标
<icon>
<small-icon>/images/app small.gif</small-icon>
<large-icon>/images/app large.gif</large-icon>
</icon>
9.2 web应用名称
<display-name>Tomcat Manager Application</display-name>
9.3 web应用描述
<description>
A scriptable management web application for the Tomcat Web Server;
Manager lets you view, load/unload/etc particular web applications.
</description>
分布式属性:Tomcat集群参数
<distributable/>
9.4 指定欢迎文件页
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
9.5 网上摘录部分
web.xml首先是肯定要包含它的schema.
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
</web-app>
其它的元素都放在<web-app></web-app>之中。
<discription></discription> 是对站台的描述
<display-name></display-name> 定义站台的名称
<distributable/> 是指定该站台是否可分布式处理
<context-param></context-param> 用来设定web站台的环境参数,它包含两个子元素:
<param-name></param-name> 用来指定参数的名称
<param-value></param-value> 用来设定参数值
比如:
<context-param>
<param-name>my_param</param-name>
<param-value>hello</param-value>
</context-param>
在此设定的参数,可以在servlet中用 getServletContext().getInitParameter("my_param") 来取得
<filter></filter> 是用来声明filter的相关设定,它包含以下子元素:
<filter-name></filter-name> 这当然就是指定filter的名字
<filter-class></filter-class> 这是用来定义filter的类的名称
<init-param></init-param> 用来定义参数,它有两个子元素:
<param-name></param-name> 用来指定参数的名称
<param-value></param-value> 用来设定参数值
比如:
<filter>
<filter-name>setCharacterEncoding</filter-name>
<filter-class>com.myTest.setCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
与
<filter></filter>同时使用的是<filter-mapping></filter-mapping> 用来定义filter所对应的URL,它有两个子元素:
<filter-name></filter-name> 指定filter的名字
<url-pattern></url-pattern> 指定filter所对应的URL
比如:
<filter-mapping>
<filter-name>setCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener></listener> 用来设定Listener接口,它的主要子元素为
<listener-class></listener-class> 定义Listener的类名称
比如:
<listener>
<listener-class>com.myTest.ContextListener</listener-class>
</listener>
<servlet></servlet> 用来声明一个servlet的数据,主要有以下子元素:
<servlet-name></servlet-name>
指定servlet的名称
<servlet-class></servlet-class>
指定servlet的类名称
<jsp-file></jsp-file> 指定web站台中的某个JSP网页的完整路径
<init-param></init-param> 用来定义参数,和前面的<init-param>差不多
同样,与
<servlet></servlet>一起使用的是<servlet-mapping></servlet-mapping> 用来定义servlet所对应的URL,包含两个子元素:
<servlet-name></servlet-name>
指定servlet的名称
<url-pattern></url-pattern> 指定servlet所对应的URL
比如:
<servlet>
<servlet-name>ShoppingServlet</servlet-name>
<servlet-class>com.myTest.ShoppingServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShoppingServlet</servlet-name>
<url-pattern>/shop/ShoppingServlet</url-pattern>
</servlet-mapping>
<session-config></session-config> 用来定义web站台中的session参数,包含一个子元素:
<session-timeout></session-timeout> 用来定义这个web站台所有session的有效期限,单位为 分钟
<mime-mapping></mime-mapping> 定义某一个扩展名和某一个MIME Type做对映,包含两个子元素:
<extension></extension> 扩展名的名称
<mime-type></mime-type> MIME格式
比如:
<mime-mapping>
<extension>doc</extension>
<mime-type>application/vnd.ms-word</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xls</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<welcome-file-list></welcom-file-list> 用来定义首页的列单,包含一个子元素:
<welcome-file></welcome-file> 指定首页的文件名称
比如:
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcom-file-list>
<error-page></error-page> 用来处理错误代码或异常的页面,有三个子元素:
<error-code></error-code> 指定错误代码
<exception-type></exception-type> 指定一个JAVA异常类型
<location></location> 指定在web站台内的相关资源路径
比如:
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/exception.jsp</location>
</error-page>
<taglib></taglib> 用来设定JSP网页所用到的Tag Library路径,有两个子元素:
<taglib-uri></taglib-uri> 定义TLD文件的URI,在JSP网页中用taglib指令便可取得该URI的 TLD文件
<taglib-location></taglib-location> 指定TLD文件相对于web站台的存放位置
比如:
<taglib>
<taglib-uri>myTaglib</taglib-uri>
<taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location>
</taglib>
此时JSP页面可通过下面的形式使用标签库
<%@ taglib uri="/struts-html" prefix="html" %>
<html:text name="name" value="tomcat" />
<resource-ref></resource-ref> 定义利用JNDI取得站台可利用的资源,有五个子元素:
<description></description> 资源说明
<rec-ref-name></rec-ref-name> 资源名称
<res-type></res-type> 资源种类
<res-auth></res-auth> 资源经由Application或Container来许可
<res-sharing-scope></res-sharing-scope> 资源是否可以共享,有Shareable和Unshareable两个 值,默认为Shareable
比如,配置数据库连接池就可在此配置:
<resource-ref>
<description>JNDI JDBC DataSource of shop</description>
<res-ref-name>jdbc/sample_db</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
10 中文编码
-
<meta http-equiv="content-type" context="text/html;charset=gb2312">
-
<%@page language="java" contentType="text/html;charset=gb2312"%>
-
response.setCharacterEncoding("gb2312")
-
str=new String(username.getBytes("ISO-8859-1"),"gb2312")