tomcat的结构

tomcat的结构

<Server>                                    顶层类元素:可包含多个Service

       <Service>                            顶层类元素:可包含一个Engine,多个Connector

              <Connector/>               连接器类元素:代表通信接口

              <Engine>                      容器类元素:为特定的Service组件处理所有客户请求,

                                                 可包含多个Host。

                     <Host>                  容器类元素:为特定的虚拟主机处理所有客户请求

                                                 可包含多个Context。

                            <Context>      容器类元素:为特定的Web应用处理所有客户请求

                            </Context>

                     </Host>

              </Engine>

       </Service>

</Server>

Tomcat的工作模式

独立的Servelet容器:

进程内的Servlet容器:JNI通信机制

进程外的Servlet容器:IPC通信机制

Tomcat的环境变量

Windows环境:

JAVA_HOME:Java安装根目录(如:c:\j2sdk1.4.2)。

CATALINA_HOME:Tomcat安装的根目录(如:c:\tomcat 5.0)。

Linux环境:(假设Java安装在/home/java/j2sdk1.4.2,Tomcat安装在/home/tomcat下)

SHELL类型

设置JAVA_HOME环境变量的命令

bash

JAVA_HOME=/home/java/j2sdk1.4.2;export JAVA_HOME

tsh

Setenv JAVA_HOME /home/java/j2sdk1.4.2

SHELL类型

设置CATALINA_HOME环境变量的命令

bash

CATALINA_HOME=/home/tomcat;export CATALINA_HOME

tsh

Setenv CATALINA_HOME /home/tomcat

Tomcat运行脚本(catalina.bat的使用方法)

命令行参数

描述

start

在新的DOS窗口启动TOMCAT服务器

run

在当前DOS窗口启动TOMCAT服务器

debug

在跟踪模式下启动TOMCAT服务器

stop

关闭TOMCAT服务器

                                 创建和发布Web应用

Tomcat的目录结构

目录

描述

/bin

存放Windows平台以及Linux平台上启动和关闭Tomcat的脚本文件

/conf

存放Tomcat服务器的各种配置文件,其中最重要的配置文件是server.xml

/server

包含3个子目录:classes、lib和、webapps

/server/lib

存放Tomcat服务器所需的各种Jar文件(其它应用不可访问)

/server/webapps

存放Tomcat自带的两个Web应用:admin应用和manager应用

/common/lib

存放Tomcat服务器以及所有Web应用都可以访问的Jar文件

/shared/lib

存放所有Web应用都可以访问的Jar文件(Tomcat不可访问)

/logs

存放Tomcat日志文件

/webapps

当发布Web应用时,默认情况下把Web应用文件放于此目录下

/work

Tomcat把由JSP生成的Servlet放于此目录下

可以在Java Web应用下的WEB-INF目录中建立lib子目录,存放各种Jar文件,这些Jar文件只能被当前Web应用访问。

在运行过程中,Tomcat类装载器先装载classes目录下的类,再装载lib目录下的类。如果两个目录下存在同名的类,classes目录下的类具有优先权。

Web应用的目录结构

目录

描述

/helloapp

根目录,所有的JSP和HTML文件都存放于此目录下

/helloapp/WEB-INF

存放Web应用的发布描述文件web.xml

/helloapp/WEB-INF/classes

存放各种class文件,Servlet类文件也放于此目录下

/helloapp/WEB-INF/lib

存放Web应用所需的各种Jar文件。例如:JDBC驱动Jar

关于Context的一点体会

Context 可以直接加在Server.xml的Host中,可是据我的观察,如果我们通过Tomcat的可视化管理界面(Tomcat Administration)来产生Context,就会发现,Tomcat5.0会自动在..\Tomcat 5.0\conf\Catalina\localhost下面添加一个以Context名为文件名的Xml文件(如:你的Context叫做 "/Hello",那它就会产生一个"Hello.xml"的文件)。并且,如果你是第一次使用Tomcat Administration,它会把它的Server.xml及其它现存的所有Context都进行一次重写(表现为:原来Server.xml中的注释全部没有了)。对于Server.xml的改写,它还会产生一个备份文件。而且我发现,只要更改过Context,就会重写一次Server.xml。

Context元素的属性

属性

描述

path

指定访问该Web应用的URL入口(可以随便取名)

docBase

指定Web应用的文件路径,可以给定绝对路径,也可以指定相对于Host的appBase属性的相对路径。如果Web采用开放目录结构,则指定Web应用的根目录;如果Web应用是个WAR文件,则指定WAR文件的路径。

reloadable

如果这个属性设为true,Tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动。如果监测到有class文件被更新,服务器会自动重新加载Web应用。

开发阶段,将reloadable属性设为true,有助于调试Servlet和其他的class文件。但是由于这一功能会加重服务器的运行负荷,因此建议在Web应用的产品发布阶段,将它改为false。

<servlet>元素的属性

属性

描述

<servlet-name>

定义Sevlet的名字(可以随便取)

<servlet-class>

指定实现这个Servlet的类

<init-param>

定义Servlet的初始化参数(包括参数名和参数值),一个<servlet>可以有多个<init-param>

<load-on-startup>

指定Web应用启动时,装载Servlet的次序。当这个值为正数或零,Servlet容器先加载数值小的Servlet,如果这个值为负或者没有设定,那么Servlet容器将在Web客户首次访问Servlet时加载

配置虚拟主机

                                 Servlet技术

Servlet是与平台无关的服务器端组件,它可以运行在Servlet容器中。

Servlet框架是由两个Java包组成:javax.servlet和javax.servlet.http。

Servlet的框架的核心里javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。

有3个方法代表了Servlet的生命周期:

l           init方法,负责初始化Servlet对象。

l           service方法,负责响应客户的请求。

l           destroy方法,当Servlet对象退出生命周期时,负责释放占用的资源。

Servlet类必须扩展以下两个类中的一个。

l           扩展GenericServlet类

必须实现service方法,因为GenericServlet类中的service方法被声明为抽象方法。

Public abstract void service(ServletRequest request,ServletResponse response) thows ServletException,IOException

l           扩展HttpServlet类

HTTP的请求方式包括DELETE、GET、OPTION、POST、PUT、TRACT,在HttpServlet类中分别提供了相应的doXXX()方法,我们只需要重写相应方法即可。

下面,介绍一下ServletRequest和ServletResponse接口。

l           ServletRequest接口

它封装了客户请求信息,如客户请求方式、参数名和参数值、客户端正在使用的协议,以及发出客户请求的远程主机信息等。还为Servlet提供了直接以二进制方式读取客户请求数据流的ServletInputStream。

ServletRequest接口的部分方法

方法名

描述

getAttribute

根据参数给定的属性名返回属性值。

getContentType

返回客户请求数据的MIME类型

getInputStream

返回以二进制数方式直接读取客户请求数据的输入流

getParameter

根据给定的参数名返回参数值

getRemoteAddr

返回远程客户主机的IP地址

getRemoteHost

返回远程客户主机名

getRemotePort

返回远程客房主机端口

setAttribute

在ServletRequest中设置属性(包括属性名和属性值)

l           ServletResponse接口

为Servlet提供了返回结果的方法。它允许Servlet设置返回数据的长度和MIME类型,并且提供输出流ServletOutputStream。

ServletResponse接口的部分方法

方法名

描述

getOutputStream

返回可以向客户端发送二进制数据的输出流对象ServletOutputStream

getWriter

返回可以向客户端发送字符数据的PrintWriter对象

getCharacterEncoding

返回Servlet发送的响应数据的字符编码

getContentType

返回Servlet发送的响应数据的MIME类型

setCharacterEncoding

设置Servlet发送的响应数据的字符编码

setContentType

设置Servlet发送的响应数据的MIME类型

Servlet的生命周期

1. 初始化阶段

下列情形下Servlet容器装载Servlet

l           Servlet容器启动时自动装载某些Servlet

l           在Servlet容器启动后,客户首次向Servlet发出请求

l           Servlet的类文件被更新后,重新装载Servlet

Servlet是否在启动时自动装载Servlet,是由在web.xml中为Servlet设置的<load-on-startup>属性决定的。

Init方法有两种形式:

public void init(ServletConfig config) throws ServletException

public void init() throws ServletException

初始化阶段,Servlet容器会为Servlet创建一个ServletConfig对象,用来存放Servlet的初始化配置信息,如Servlet的初始参数。如果Servlet类覆盖了第一种带参数的init方法,应该先调用super.init(config)方法确保参数config引用 ServletConfig对象;如果覆盖的是第二种不带参数的init方法,可以不调用super.init()方法,如果要在init方法中访问 ServletConfig对象,可以调用Servlet类的getServletConfig()方法。

HTTP请求

由3部分组成,分别是:

l           请求方法URI协议/版本

l           请求头(Request Header)

l           请求正文

示例:

GET /sample.jsp HTTP/1.1

Accept:image/gif,image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:locakhost

User-Agent:Mozilla/4.0(compatible;MSIE5.01;Windows NT 5.0)

Accept-Encoding:gzip,deflate

userName=werqin&password=1234

HTTP响应

由3部分组成,分别是:

l           协议 状态代码 描述

l           响应头(Response Header)

l           响应正文

示例:

HTTP/1.1 200 OK

Server:ApacheTomcat/5.0.12

Date:Mon,6 Oct 2003 13:23:42 GMT

Content-Length:112

<html>

<head>

<title>HTTP响应示例</title>

</head>

<body>

Hello HTTP!

</body>

</html>

HttpServlet的功能

它首先必须读取HTTP请求的内容。Servlet容器负责创建HttpRequest对象,并把HTTP请求信息封装到HttpRequest对象中。

HttpServletRequest的常用方法

方法名

描述

getCookies()

返回HTTP请求的Cookies

getHeader(String name)

返回参数指定的HTTP请求的Header数据

getRequestURI()

返回HTTP请求的URI

getQueryString()

返回HTTP请求数据中的查询字符串

getMethod()

返回HTTP请求方法

HttpServletResponse的常用方法

方法名

描述

addCookie(Cookie cookie)

向HTTP响应中加入Cookie

setHeader(String name,String value)

设置HTTP响应的Header,如果参数name对应的Header已经存在,则覆盖原来的Header数据

addHeader(String name,String value)

向HTTP响应中加入Header

除了这两张表列出的方法外,在HttpServletRequest的ServletRequest中提供了读取客户请求的通用方法,在HttpServletResponse的父类ServletResponse中提供了生成服务器响应的通用方法。

创建HttpServlet的步骤

(1)扩展HttpServlet抽象类.

(2)覆盖HttpServlet的部分方法,如覆盖doGet()或doPost()方法。

(3)获取HTTP请求信息,例如通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串。无论是HTML表单数据还是URL上的查询字符串,在HttpServletRequest对象中都以参数名/参数值的形式存放,可以通过以下方法检索参数信息:

l           getParameterNames():返回一个Enumeration对象,它包含了所有的参数名信息。

l           getParameter(String name):返回参数名name对象的参数值。

l           getParameterValue():返回一个Enumeration对象,它包含了所有参数值信息。

(4)生成HTTP响应结果。

通过利用HttpServletResponse对象的getWriter()方法,可以获得一个PrintWriter对象。使用PrintWriter的print()或println()方法可以向客户端发送字符串数据流。

posted @ 2010-04-23 14:53  ForA  阅读(2436)  评论(0编辑  收藏  举报