设为首页 收藏本站
查看: 1261|回复: 0

[经验分享] tomcat的结构

[复制链接]

尚未签到

发表于 2015-8-7 11:11:00 | 显示全部楼层 |阅读模式
  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-95133-1-1.html 上篇帖子: Tomcat域名或IP地址访问方式配置方法 下篇帖子: windows下tomcat 发布多个web项目(多个域名,同一ip)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表