Servlet详细教程.docx
《Servlet详细教程.docx》由会员分享,可在线阅读,更多相关《Servlet详细教程.docx(82页珍藏版)》请在冰豆网上搜索。
Servlet详细教程
1.0简介
典型的桌面应用程序的示例有记事本,媒体播放器等等。
是本地.exe程序。
用户和桌面程序的交互如图1.1。
图1.1用户和桌面程序的交互
随着Internet的兴起,现在大多数电脑用户更加习惯Internet的Web应用。
用户和Web应用程序的交互如图1.2所示。
图1.2用户访问网站
Web应用程序和桌面程序相比,优点如下。
首先,Web应用程序的访问更加容易,用于访问Web应用的标准协议为HTTP协议,为绝大多数操作系统所支持。
此外,所要求的客户端仅仅是浏览器。
其次,维护和部署成本低,Web应用程序在浏览器中请求运行,不需要在每个客户端系统上安装客户端软件。
Web应用程序代码可以再服务器端进行修改和维护,这将节省更新和部署应用程序所需要的时间和成本。
Web应用运行在服务器上,服务器是一台设备,它为网络上的不同设备,即客户端的请求提供信息。
最初,通过编写CGI(CommonGatewayInterface,通用网关接口)程序来实现数据在Web上的传输,但是,对于客户端作出的每个请求,必须创建CGI程序的一个新实例,这将占用大量内存。
因此,为了解决这个问题,引入了Servlet技术。
Servlet是一个用Java编写的应用程序,在服务器上运行,处理请求的信息并将其发送到客户端。
Servlet的客户端可以提出请求并获得该请求的响应,它可以使任何Java应用程序、浏览器或任何设备。
对于所有的客户端请求,只需要创建Servlet的实例一次,因此节省了大量的内存。
Servlet在初始化后即驻留内存中,因此每次作出请求时无需加载。
1.1C/S和B/S的区别
要想对“C/S”和“B/S”技术发展变化有所了解,首先必须搞清楚三个问题。
1.1.1、什么是C/S结构。
C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配Client端和Server端来实现,降低了系统的通讯开销。
目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。
这也就是目前应用系统的发展方向。
传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。
由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。
而且代价高,效率低。
1.1.2、什么是B/S结构。
B/S(Browser/Server)结构即浏览器和服务器结构。
它是随着
Internet技术的兴起,对C/S结构的一种变化或者改进的结构。
在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端
(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。
这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。
它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。
特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。
1.1.3、管理软件主流技术。
管理软件技术的主流技术与管理思想一样,也经历了三个发展时期。
首先,界面技术从上世纪DOS字符界面到Windows图形界面(或图形用户界面GUI),直至Browser浏览器界面三个不同的发展时期。
其次,今天所有电脑的浏览器界面,不仅直观和易于使用,更主要的是基于浏览器平台的任何应用软件其风格都是一样的,使用人对操作培训的要求不高,而且软件可操作性强,易于识别;再者,平台体系结构也从过去单用户发展到今天的文件/服务器(F/S)体系、客户机/服务器(C/S)体系和浏览器/服务器(B/S)体系。
1.1.4、C/S和B/S之比较
C/S和B/S是当今世界开发模式技术架构的两大主流技术。
C/S是美国Borland公司最早研发,B/S是美国微软公司研发。
目前,这两项技术以被世界各国所掌握,国内公司以C/S和B/S技术开发出产品也很多。
这两种技术都有自己一定的市场份额和客户群
1、C/S架构软件的优势与劣势
(1)、应用服务器运行数据负荷较轻。
最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。
二者可分别称为前台程序与后台程序。
运行数据库服务器程序的机器,也称为应用服务器。
一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。
(2)、数据的储存管理功能较为透明。
在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,例如访问者的权限,编号可以重复、必须有客户才能建立定单这样的规则。
所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)背后的过程,就可以完成自己的一切工作。
在客户服务器架构的应用中,前台程序不是非常“瘦小”,麻烦的事情都交给了服务器和网络。
在C/S体系的下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。
(3)、C/S架构的劣势是高昂的维护成本且投资大。
首先,采用C/S架构,要选择适当的数据库平台来实现数据库数据的真正“统一”,使分布于两地的数据同步完全交由数据库系统去管理,但逻辑上两地的操作者要直接访问同一个数据库才能有效实现,有这样一些问题,如果需要建立“实时”的数据同步,就必须在两地间建立实时的通讯连接,保持两地的数据库服务器在线运行,网络管理工作人员既要对服务器维护管理,又要对客户端维护和管理,这需要高昂的投资和复杂的技术支持,维护成本很高,维护任务量大。
其次,传统的C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,由于产品的更新换代十分快,代价高和低效率已经不适应工作需要。
在JAVA这样的跨平台语言出现之后,B/S架构更是猛烈冲击C/S,并对其形成威胁和挑战。
2、B/S架构软件的优势与劣势
(1)、维护和升级方式简单。
目前,软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性。
对一个稍微大一点单位来说,系统管理人员如果需要在几百甚至上千部电脑之
间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。
无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。
所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向。
今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的。
因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器。
(2)、成本降低,选择更多。
大家都知道windows在桌面电脑上几乎一统天下,浏览器成为了标准配置,但在服务器操作系统上windows并不是处于绝对的统治地位。
现在的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高。
所以服务器操作系统的选择是很多的,不管选用那种操作系统都可以让大部分人使用windows作为桌面操作系统电脑不受影响,这就使的最流行免费的Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择非常盛行。
比如说很多人每天上“网易”(原文为新浪)网,只要安装了浏览器就可以了,并不需要了解“网易”的服务器用的是什么操作系统,而事实上大部分网站确实没有使用windows操作系统,但用户的电脑本身安装的大部分是windows操作系统。
(3)、应用服务器运行数据负荷较重。
由于B/S架构管理软件只安装在服务器端(Server)上,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。
但是,应用服务器运行数据负荷较重,一旦发生服务器“崩溃”等问题,后果不堪设想。
因此,许多单位都备有数据库存储服务器,以防万一。
3,C/S与B/S区别
Client/Server是建立在局域网的基础上的,Browser/Server是建立在广域网的基础上的。
(1)、硬件环境不同:
C/S一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务。
B/S建立在广域网之上的,不必是专门的网络硬件环境,例如电话上网,租用设备,信息自己管理,有比C/S更强的适应范围,一般只要有操作系统和浏览器就行。
(2)、对安全要求不同
C/S一般面向相对固定的用户群,对信息安全的控制能力很强。
一般高度机密的信息系统采用C/S结构适宜,可以通过B/S发布部分可公开信息。
B/S建立在广域网之上,对安全的控制能力相对弱,面向是不可知的用户群。
(3)、对程序架构不同
C/S程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。
B/S对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上。
比C/S有更高的要求,B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk2000Exchange2000等,全面支持网络的构件搭建的系统。
SUN和IBM推的JavaBean构件技术等,使B/S更加成熟。
(4)、软件重用不同
C/S程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好。
B/S对的多重结构,要求构件相对独立的功能。
能够相对较好的重用。
就如买来的餐桌可以再利用,而不是做在墙上的石头桌子。
(5)、系统维护不同
系统维护是软件生存周期中,开销大,相当重要
C/S程序由于整体性,必须整体考察,处理出现的问题以及系统升级难,可能是再做一个全新的系统。
B/S构件组成方面构件个别的更换,实现系统的无缝升级。
系统维护开销减到最小,用户从网上自己下载安装就可以实现升级。
(6)、处理问题不同
C/S程序可以处理用户面固定,并且在相同区域,安全要求高的需求,与操作系统相关,应该都是相同的系统。
B/S建立在广域网上,面向不同的用户群,分散地域,这是C/S无法作到的,与操作系统平台关系最小。
(7)、用户接口不同
C/S多是建立在Window平台上,表现方法有限,对程序员普遍要求较高。
B/S建立在浏览器上,有更加丰富和生动的表现方式与用户交流,并且大部分难度减低,降低开发成本。
1.2HTTP基础知识
用户的请求和Web应用程序的相应需要通过Internet从一台计算机发送到另一台计算机或服务器,使用超文本传输协议HTTP。
HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准。
客户端是终端用户,服务器端是网站。
通过使用Web浏览器等工具,客户端发起一个到服务器上指定端口的HTTP请求。
应答的服务器上存储着一些资源,比如HTML文件和图像。
HTTP协议并没有规定必须使用它和基于它支持的层。
事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。
HTTP只假定其下层协议提供可靠的传输,任何能够提供这种保证的协议都可以被其使用。
1.2.1GET和POST方法区别
HTTP请求消息使用GET或POST方法以便在Web上传输请求。
检索信息时一般用GET方法,如检索文档、图表、或数据库查询结果。
要检索的信息作为字符序列传递,称为查询字符串。
因此,传递的数据对客户端是可见的,即将查询字符串附加到URL中,但是,查询字符串的长度有限制,最多124字节。
GET方法是表单默认的方法。
我们用google检索“java”,可以知道google使用了GET方法对用户输入的搜索字符串检索搜索结果。
如图1.1所示。
图1.1
HTTP定义的另一种请求方法是POST方法。
使用POST发送的数据对客户端是不可见的,且对发送的数据的量没有限制。
下面我们来对比一下GET和POST方法。
ØGET是从服务器上获取数据;POST是向服务器传送数据。
Ø在客户端,GET通过URL提交数据,数据在URL中可见;POST把数据放在form的数据体内提交。
ØGET提交的数据最多只有1024字节;POST提交的数据量无限制。
Ø由于使用GET时,参数会显示在地址栏上,而POST不会,所以,如果这些数据是非敏感数据,那么使用GET;如果包含敏感数据,为了安全,用POST。
1.3Servlet简介和优点
自SunMicrosystems公司所组成的JavaSoft部门将ServletAPI定案以来,推出了ServletAPI1.0,就当时功能来说,Servlet所提供的功能包含了当时的CGI与NetscapeServerAPI(NSAPI)之类产品的功能。
发展至今,它依旧是一个具有跨平台特性、10%PureJava的Server-Side程序,Servlet不只限定于HTTP协议,开发人员可以利用Servlet自定义或延伸任何支持Java的Server,包括WebServer、MailServer、FtpServer、ApplicationServer或任何自定义的Server。
Server有以下优点:
可移植性,Servlet皆是利用Java语言来开发的,因此,延续Java在跨平台上的表现,不论Server的操作系统是什么,Windows、Linux、Solaris、HP-UX等,都能够将我们写好的Servlet程序放在这些操作系统上执行,借助Servlet的优势,就可以真正达到WriteOnce,ServeAnywhere的境界。
Servlet是在Server端执行的,所以,程序员只要专心开发能在实际应用的平台环境下测试无误即可。
除非从事做ServletContainer的公司,否则不须担心写出来的Servlet是否能在所有的JavaServer平台上执行。
强大的功能,Servlet能够完全发挥JavaAPI的威力,包括网络和URL存取、多线程、影像处理、RMI(RemoteMethodInvocation)、分布式服务器组件、对象序列化等。
若想写个网络目录查询程序,则可以利用JNDIAPI,相连接数据库可以用JDBC,偶这些强大功能的API做后盾,相信Servlet更能发挥其优势。
性能,Servlet在加载执行后,其对象实体通常会一直停留在Server的内存中,若有请求发生时,服务器再调用Servlet来服务,假若收到相同服务的请求时,Servlet会利用不同的线程来处理,不像CGI程序必须产生许多进程来处理数据。
在性能表现上,大大超过CGI程序。
Servlet在执行时,不是一直停留在内存中,服务器会自动将停留时间过长一直没有执行的Servlet从内存中移除,不过有时候也可以自行写程序来控制,至于停留时间长短通常和选用的服务器有关。
安全性,Servlet也有类型检查的特性,并且利用Java的垃圾回收与没有指针的设计,使得Servlet避免内存管理的问题。
由于在Java的异常处理机制下,Servlet能够安全地处理各种错误,不会因为发生程序上逻辑错误而导致整体服务器系统的崩溃。
例如,某个Servlet发生除以零或其他不合法的运算时,会抛出一个异常让服务器处理,如记录在Log日志中。
节省投资,不仅有许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。
1.4Tomcat概述
Tomcat简介:
TOMCAT是APACHEJAKARTA软件组织的一个子项目,TOMCAT是一个JSP/SERVLET容器,它是在SUN公司的JSWDK(JAVASERVERWEBDEVELOPMENTKIT)基础上发展起来的一个JSP和SERVLET规范的标准实现,使用TOMCAT可以体验JSP和SERVLET的最新规范。
经过多年的发展,TOMCAT不仅是JSP和SERVLET规范的标准实现,而且具备了很多商业JAVASERVLET容器的特性,并被一些企业用于商业用途。
1.4.1Tomcat
Tomcat在严格意义上并不是一个真正的应用服务器,它只是一个可以支持运行Serlvet/JSP的Web容器,不过Tomcat也扩展了一些应用服务器的功能,如JNDI,数据库连接池,用户事务处理等等。
Tomcat是一种具有JSP环境的Servlet容器。
Servlet容器是代替用户管理和调用Servlet的运行时外壳。
1.1SERVLET容器
负责处理客户请求。
当客户请求来到时,SERVLET容器获取请求,然后调用某个SERVLET,并把SERVLET的执行结果返回给客户。
当客户请求某个资源时,SERVLET容器使用SERVLETREQUEST对象把客户的请求信息封装起来,然后调用JAVASERVLETAPI中定义的SERVLET的一些生命周期方法,完成SERVLET的执行,接着把SERVLET执行的要返回给客户的结果封装到SERVLETRESPONSE对象中,最后SERVLET容器把客户的请求发送给客户,完成为客户的一次服务过程。
1.2TOMCAT的工作模式
1.2.1独立的SERVLET容器
TOMCAT的默认工作模式,作为独立的SERVLET容器,是内置在WEB服务器中的一部分,是指使用基于JAVA的WEB服务器的情形。
其他两种方式是TOMCAT与其他服务器集成的方式:
1.2.2进程内的SERVLET容器
SERVLET容器作为WEB服务器的插件和JAVA容器的实现。
WEB服务器的插件在内部地址空间打开一个JVM(JAVAVIRTUALMACHINE)使JAVA容器得以在内部运行。
如有某个需要调用SERVLET的请求,插件将取得对此请求的控制并将它传递(使用JNI)给JAVA容器。
进程内的容器对于多线程、单进程的服务器非常适合,并且提供了很好的运行速度,只是伸缩性有所不足。
注意:
JNI是JAVANATIVEINTERFACE的缩写,是JAVA本地调用接口,通过JNI,JAVA程序可以和其他语言编写的本地程序进行通信。
1.2.3进程外的SERVLET容器
SERVLET容器运行于WEB服务器之外的地址空间,并且作为WEB服务器的插件和JVM使用IPC(如TCP/IP)进行通信。
进程外容器的反应时间不如进程内的容器,但有较好的伸缩性、稳定性等性能。
IPCINTERPROCESSCOMMUNICATION(进程间通信)的简写,它是实现进程间通信的一种技术。
1.3TOMCAT的组织结构
TOMCAT是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的组件是CATALINASERVLET容器,其他的组件按照一定的格式要求配置在这个顶层容器中。
TOMCAT的各个组件是\conf\server.xml文件中配置的,TOMCAT服务器默认情况下对各种组件都有默认的实现,下面通过分析server.xml文件来理解TOMCAT的各个组件是如何组织的。
顶层元素,代表一个服务器
顶层元素,是Connector的集合,只有一个Engine
连接器类元素,代表通信接口
容器类元素,为特定的Service组件处理所有客户请求,可包含多个Host
为特定的虚拟主机处理所有客户请求
为特定的WEB应用处理所有客户请求
TOMCAT中真正处理客户请求与生成响应的三个组件是Engine、Host、Context
1.4.2Tomcat目录结构
(1)Tomcat的安装
其实对于完全由Java写成的Tomcat,Win32版本和Linux版本没有多大区别,比如Linux版本,在Solaris下也没有问题。
这里,主要以Win32版本作为示例。
注意:
在安装使用Tomcat之前,先安装JDK,最好是Sun的JDK1.2以上版。
(2)Tomcat的目录结构
首先,下载jakarta-tomcat.zip包,解压缩到一个目录下,如:
“c:
\tomcat”。
这时,会得到如下的Tomcat的目录结构:
---jakarta-tomcat
|---binTomcat执行脚本目录
|---Common放置一些通用类(如JDBC的驱动程序等)
|---confTomcat配置文件
|---docTomcat文档
|---libTomcat运行需要的库文件(JARS)
|---logsTomcat执行时的LOG文件
|---srcTomcat的源代码
|---webappsTomcat的主要Web发布目录(存放我们自己的JSP,SERVLET,类)
|---workTomcat的工作目录,Tomcat将翻译JSP文件到的Java文件和class文件放在这里。
目录名
该目录内的文件的一般功能描述
bin
包含有Startup.bat(启动服务器)与shutdown.bat(关闭服务器)文件
conf
包含设置部署在Tomcat上的Web应用的变量的初始值的设置文件,包括server.xml(Tomcat的全局配置文件)和web.xml(为不同的Tomcat配置的web应用设置缺省值的文件)
doc
包含关于Tomcat的各种各样的文档。
common
在其lib目录下,主要存放如JDBC的驱动程序等
lib
包含被Tomcat使用的各种各样的jar文件。
在UNIX上,任何这个目录中的文件将被附加到Tomcat的classpath中。
logs
Tomcat的log文件。
src
servletAPI的源文件。
webapps
包含Web应用的程序(JSP、Servlet和JavaBean等)
work
由T