概述Java Web基础

 概述Java Web基础

   

1.Java WebServlet概述

     Java Web应用程序的开发,是Java网络环境应用的重要部分。1996年,人们发现利用Java语言的优点来开发服务器端的应用程序非常有利。于是,许多软件厂商开始发展一些技术来帮助Java开发出更高效的服务端程序。但这些技术都必须搭配特殊的服务器或者专门设计。1997年,JavaSoft提出了Java Servlet概念,它是一个单一、标准、通用的机制,因而很快在服务器端的应用程序开发方面表现出明显优势。

     Servlet是用Java编写的Server端程序,与协议和平台无关,运行于某个支持Java语言的服务器组件之上,且可以访问服务器上的资源。Java Servlet是一种可以动态加载模块,是Java Web应用的一个组件。因此,可以动态地扩展服务器能力,并采用请求-响应模式提供Web服务。Servlet响应客户请求的过程:

 

                                                                    

                     客户                      服务器组件            Servlet

 

     最早用来产生动态网页的方法是CGI(公共网关接口)。它是透过服务器把客户端的请求发送给服务器上的一个程序,这个程序处理完后再将结果传回客户端。CGI程序的缺点就是非常耗费系统资源,每个请求都会让CGI产生一个新进程来处理。

     而在Servlet中不同请求是由同一个进程下的独立线程来处理,而且相同的请求会由同一个线程来执行。并且,还解决了CGI程序开发困难、不可移植等问题。因此,Servlet由于可移植、稳健、易开发等优势,Servlet成为了很好的CGI替代品。

     Servlet主要功能如下:

     ·创建并返回基于客户请求的动态HTML页面。

     ·创建可嵌入到现有HTML页面中的HTML片段。

     ·与其他服务器资源通信,如连接数据库或基于Java的应用程序。

     ·创接受多个客户机数据,并可以广播数据到多个客户机,如用Servlet实现多人游戏服务器。

     ·根据客户请求的特定MIME类型进行数据过滤,如图像格式的转换。

 

2.Servlet开发环境

     使用Servlet编程,需要安装JSDKJava Servlet Development Kit),包含了编译Servlet应用程序所需的Java类库及相关文档。开发Servlet首先需要把servlet.jar包复制到JDK的扩展目录(%JAVA_HOME%/jre/lib/ext)中。

     除了开发工具外,还需要一个支持Java ServletWeb服务器,或在现有的服务器上安装Servlet软件包。我们把支持Java ServletWeb服务器称为Servlet容器(Servlet Container)。可以在Sun网站上查看到所有支持Servlet的服务器软件清单。目前支持ServletJava Web应用服务器有TomcatResinWebspherWeblogic等。

 

3.Servlet程序的结构

     Java Servlet API是一个标准的Java扩展程序包,由javax.servletjavax.servlet.http两个包组成:

 

     ·javax.servlet包;定义了所有Servlet类都必须实现或扩展的通用接口和类。

     ·Javax.servlet.http包:定义了采用HTTP通信协议的HttpServlet类。

 

     Servlet的框架核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这个接口。这个接口中定义了5个方法,其中init()service()destroy()3个方法将在Servlet生命周期的3个不同阶段调用。

     Servlet程序通常要继承两个包中的javax.servlet.GenericServletjavax.servlet.http.HttpServlet这两个类中的其中之一,且HttpServlet继承自GenericServlet抽象类。继承GenericServlet的程序通常用于编写基于客户自定义协议的程序,但通常我们编写的是HTTP通信协议的程序,所以要继承自HttpServlet类。HttpServlet类专门用于处理HTTP请求,并提供了实现此功能的方法doGet()doPost()

     注意,GenericServlet类已经实现了Servlet的部分接口方法。用户开发自己Servlet类时必须扩展这两个类中的一个。因为,HttpServle继承自GenericServlet抽象类, 而且扩展了GnercicServlet类,所以客户Servlet类则必须实现 

 

                public abstract void service ( ServletRequest request , ServletResponse response ) throws ServletException , IOException;   

 

     抽象方法。而扩展HttpServlet类则通常不必实现service方法,因为HttpServlet类中已经实现了该方法:

                protected void service ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException;   

 

 

                                                   1.1  Servlet API 类框图

 

     需要特别注意,实现HttpServletRequestHttpServletResponse接口的类是在HTTP服务器Servlet容器)的程序中定义的,它们继承自ServletRequestServletResponse接口,分别代表客户的请求和服务器的响应。因为,只有实现了它们,Servlet容器才能创建并将封装有客户请求信息且实现了HttpServletRequest接口的客户类实例传递给service()方法进行处理。实现ServletRequestHttpServletRequest这两个接口的不同之处在于,后者封装了HTTP请求信息,并且提供了提取这些信息的方法,如getCookies()getHeader()等。ServletResponseHttpServletResponse差别也类似。我们也可以把它们称为HttpRequestHttpResponse

 

4.TomcatServlet容器

     Jakarta Tomcat服务器是SUN公司的JSWDKJavaServer Web DevelopmentKit)的基础上发展起来的Servlet/JSP容器,是Apache-Jakarta组织的一个子项目。因为是开源软件,所以得到开源社区的广泛支持,可以与多数主流HTTP服务器(如ApacheIIS)一起工作。同时,Tomcat作为Java Web服务器,还具有如Tomcat管理、平台控制、安全域管理、Tomcat阀等一些服务器特有功能。如今,Tomcat已成为开发企业Java Web应用的最佳选择之一。下载地址:http://tomcat.apache.org,最新版本是Tomcat 6.0

     Tomcat作为Servlet容器,负责把客户请求传送给Servlet后并返回处理结果,Servlet容器(Tomcat)与Servlet之间的接口是由Java Servlet API定义。这个API中定义了使用Servlet的各种方法,在Servlet生命周期的不同阶段被Servlet容器(Tomcat)调用;另外,Servlet API中还定义了可由Servlet容器(Tomcat)创建,且传递到Servlet的对象类,如请求对象ServletRequest和相应对象ServletResponse

   

    

 

                              1.2  Servlet容器响应客户请求的过程

 

5.Tomcat的工作模式

     Tomcat作为Servlet容器,实际上有着好几种工作模式:

     独立的Servlet容器:

          在这种模式下,Tomcat作为独立的Java Web服务器,Servlet容器则作为构成Web服务器的一部分而存在。这是Tomcat的默认模式。

     ②进程内的Servlet容器:

          Servlet容器实际分为Web服务器插件和Java容器两部分。先由Web服务器插件,在其他的服务器内部地址空间打开一个Java虚拟机(JVM)。然后,再由Java容器在此JVM上运行Servlet。如果有客户端发出调用Servlet请求,也是先由插件获得对此请求的控制,再使用JNI通信机制将请求传递给Java容器。因此,进程内的Servlet则可以创建单进程、多线程的服务器,可以提供较高的运行速度。但是,这种工作模式,缺乏伸缩性。

     进程外的Servlet容器:

          进程外Servlet容器有别于进程内Servlet的地方就是Web服务器插件是在服务器外部地址空间打开一个JVM。因此,插件与Java容器之间采用的是IPC通信机制传递客户端Servlet调用请求。虽然,进程外Servlet容器对客户请求的响应速度不如进程内容器,但它具有更高的伸缩性和稳定性。

     因此,Tomcat可以与其他的Web服务器集成(如ApacheIISNetscape等),工作在后两种工作模式下。

 

6.Servlet的生命周期

     Servlet的生命周期开始于Servlet类对象实例被装载入Servlet容器中,结束于被终止或重新装入时。

     Servlet的生命周期可以分为初始化、响应客户请求和终止三个阶段,各阶段各自先后调用javax.servlet.Servlet接口中的init()service()destroy()3个方法。

     初始化阶段。在下列情形Servlet容器装入Servlet

          ·Servlet容器启动时。此时将自动载入某些Servlet。一个Servlet是否在启动时装载,由Tomcat中的网站配置文件web.xml中的有关Servlet设置的<load-on-startup>属性来设定。

          ·Servlet容器启动后,客户首次向Servlet发出请求时。此时,容器会新创建一个Servlet线程处理客户请求。

          ·Servlet的类文件更新后。此时是重装如Servlet

     Servlet被装入后,Servlet容器首先创建该Servlet对象的实例,并调用init()方法初始化。在Servlet生命周期中,init()方法只调用一次。init有被重载为2种带参形式:

            public void init ( ServletConfig config ) throws ServletException;   //ServletConfig对象是Servlet容器用Servlet初始化信息来组装的类对象

            public void init () throws ServletExcepton;

     因此需要注意,如果客户定义的Servlet类需要覆盖重写Servlet中的init(config)方法,则应该调用super.init(config)方法,确保初始化配置信息。如果是重写init(),则不需要调用super.init()。如果需要访问ServletConfig对象,也可以调用Servlet接口中的getServletConfig()方法。

     响应客户请求阶段。

     在这个阶段,Servlet接受到的客户请求,并创建特定于该请求的ServletRequest对象和ServletResponse对象,然后传递给在此阶段调用的service()方法。Service()则负责根据获取的ServletRequest对象中的客户信息进行请求的处理,最后通过Servlet对象将响应处理的结构返给客户。

     终止阶段。当Web应用程序被终止,或者Servlet容器终止运行,或Servlet容器重载Servlet的新实例时,Servlet容器会先调用该Servlet实例的destroy()方法,释放占用的资源。

 

 

 

索引:

CGICommon Gateway Interface):公共网关接口

MIMEMutilpurpose Internet Mail Extensions):多功能网际邮件扩充协议

JSDKJava Servlet Development Kit):Java Servlet开发工具包

JSWDKJavaServer Web DevelopmentKit):Java服务器Web开发工具包。SUN公司推出的小型Servlet/JSP调试工具

Servlet ContainerServlet容器

JVMJava Virtual Machine):Java虚拟机

JNIJava Native Interface):Java本地调用接口。通过此接口,Java程序可以和采用其他语言编写的本地程序进行通信。

IPC(Internet Process Connection):进程之间通过开放命名管道来通信的一种机制

参考:

孙卫琴、李洪城:《TomcatJava Web开发技术详解》,2005年版。

张曜、张青、郭立山:《Java程序设计教程》,冶金工业出版社2002年版。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值