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下)
Tomcat运行脚本(catalina.bat的使用方法)
创建和发布Web应用 Tomcat的目录结构
可以在Java Web应用下的WEB-INF目录中建立lib子目录,存放各种Jar文件,这些Jar文件只能被当前Web应用访问。 在运行过程中,Tomcat类装载器先装载classes目录下的类,再装载lib目录下的类。如果两个目录下存在同名的类,classes目录下的类具有优先权。 Web应用的目录结构
关于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元素的属性
开发阶段,将reloadable属性设为true,有助于调试Servlet和其他的class文件。但是由于这一功能会加重服务器的运行负荷,因此建议在Web应用的产品发布阶段,将它改为false。 <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接口的部分方法
l ServletResponse接口 为Servlet提供了返回结果的方法。它允许Servlet设置返回数据的长度和MIME类型,并且提供输出流ServletOutputStream。 ServletResponse接口的部分方法
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的常用方法
HttpServletResponse的常用方法
除了这两张表列出的方法外,在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()方法可以向客户端发送字符串数据流。 |
|