sdfouhdso888 发表于 2015-8-7 11:11:00

tomcat的结构

  tomcat的结构
                                      顶层类元素:可包含多个Service
                                   顶层类元素:可包含一个Engine,多个Connector
                             连接器类元素:代表通信接口
                                      容器类元素:为特定的Service组件处理所有客户请求,
                                                   可包含多个Host。
                                         容器类元素:为特定的虚拟主机处理所有客户请求
                                                   可包含多个Context。
                                    容器类元素:为特定的Web应用处理所有客户请求
                             
                       
              
        
  
  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。
  元素的属性

属性
描述

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

指定实现这个Servlet的类

定义Servlet的初始化参数(包括参数名和参数值),一个可以有多个

指定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设置的属性决定的。
  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
  
  
  HTTP响应示例
  
  
  Hello HTTP!
  
  
  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()方法可以向客户端发送字符串数据流。
页: [1]
查看完整版本: tomcat的结构