版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.1Servlet概述Servlet是服务器端的Java小程序,通常被称为服务器小应用程序,是运行在服务器端的应用程序。Servlet接受来自客户端的请求,并把处理的结果以HTML的形式返回,在客户端形成动态网页。
Servlet可以被认为是服务器端的applet,Servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样。Servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。如图7-1所示,使用Servlet的基本流程如下。下一页返回7.1Servlet概述(1)客户端通过HTTP提出请求.(2)Web服务器接收该请求并将其发给Servlet。如果这个Servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。
(3)Servlet将接收该HTTP请求并执行某种处理。
(4)Servlet将向Web服务器返回应答。
(5)Web服务器将从Servlet收到的应答发送给客户端。上一页下一页返回7.1Servlet概述
由于Servlet在服务器上执行,通常与applet相关的安全性的问题并不需实现。要注意的是Web浏览器并不直接和Servlet通信,Servlet是由Web服务器加载和执行的。而Servlet是用Java编写的,所以它们一开始就是平台无关的。这样,Java编写一次就可以在任何平台运行(writeoncerunanywhere)的承诺就同样可以在服务器上实现了。Servlet还有一些CGI脚本所不具备的独特优点。
(1)Servlet是持久的。Servlet只需Web服务器加载一次,而A可以在不同请求之间保持服务(例如一次数据库连接)。与之相反,CGI脚本是短暂的、瞬态的。每一次对CGI脚本的请求,都会使Web服务器加载并执行该脚本。一旦这个CGI脚本运行结束,它就会被从内存中清除,然后将结果返回到客户端。CGI脚本的每一次使用,都会造成程序初始化过程(例如连接数据库)的重复执行。上一页下一页返回7.1Servlet概述(2)Servlet是与平台无关的。如前所述,Servlet是用Java编写的,它自然也继承了Java的平台无关性。
(3)Servlet是可扩展的。由于Servlet是用Java编写的,它就具备了Java所能带来的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应击求。Servlet自然也具备了这些特征。
(4)Servlet是安全的。从外界调用一个Servlet的唯一方法就是通过Web服务器。这提供了高水平的安全性保障,无其是在Web服务器有防火墙保护的时候。
(5)Servlet可以在多种多样的客户机上使用。由于Servlet是用Java编写的,所以可以很方便地在HTML中使用它们,就像使用Applet一样。上一页返回7.2Servlet与JSP的关系JSP是一种脚本语言,包装了Servlet系统的界面,简化了Servlet的使用难度,同时通过扩展JSP标签(TAG)提供了网页动态执行的能力。尽竹如此,JSP仍没有超出Servlet的范围,实际上执行JSP文件的时候,首先JSP容器会将其转译为ServletC*.java)文件,并自动编译解释执行。JSP中使用到的所有对象都将被转换为Servlet或者非Servlet的Java对象,然后被执行,所以执行JSP实际上与执行Servlet是一样的。从JSP的角度去看的话,Servlet实际上是JSP被解释执行的中间过程,即JSP实际上是为了让Servlet的开发显得相对容易而采取的脚本语言形式。简单来说,Servlet就是运行在服务器端的应用程序,Servlet接收来自客户端的清求,将处理结果返回给客户端。下一页返回7.2Servlet与JSP的关系JSP第一次执行需要花较长的时间,而后JSP执行时,直接运行Java的执行码,从而大大地提高了JSP的执行速度,这正是JSP的优点之一。
JSP与Servlet之间的主要差异在于,JSP提供了一套简单的标签,和HTML融合得比较好,可以使不了解Servlet的人做出动态网页来。对于Java语言不熟悉的人,会觉得JSP开发比较方便。JSP修改后可以立即看到结果,不需要乎工编译,JSP引擎会来做这些工作;而Servlet需要编译,重新启动Servlet引擎等一系列动作。但是在JSP中,HTML与程序代码混杂在一起,而Servlet却不是这样。因此,当编写的页面显示效果比较复杂时,首选是JSP,而在处理业务逻辑时,首选则是Servlet。上一页返回7.3Servlet的常用接口类
在ServletAPI中,最常用的是Servlet接口,所有Servlet都执行这个接口。Servlet可以直接执行Servlet接口,也可以通过扩展类执行。
1.HttpServletHttpServlet这个Servlet接口提供了Servlet与客户端进行通信的联系方法,通常编写的Servlet类,一般从Javax包的HttpServlet类继承而来,在HttpServlet中加入了一些附加的方法,这些方法AJ以陇助处理HTTP基本请求,这些基本请求由HttpServlet类中的方法service()自动地调用。这些方法包括如下儿个。
(1)doGet()用来处理HTTP的get、头部HEAD请求。下一页返回7.3Servlet的常用接口类
这个操作仅允许客户从HTTP服务器上取得(get)资源。重载此方法的用户自动允许支持方法HEAD。这个get操作被认为是安全的,对用户来说是很可靠的。比如,大多数的正规查询都没有副作用。打算改变存储数据的清求必须用其他的HTTP方法。这要求方法也必须是个安全的操作。方法doGet()的默认执行将返回一个HTTP的BAD_REQUEST错误。方法doGet()的格式:protectedvoiddoGet(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;上一页下一页返回7.3Servlet的常用接口类(2)doPost():用来处理HTTP的post清求。这个post操作包含了在必须通过此Servlet执行的清求中的数据。由于它不能立即取得资源,故对于那些涉及安全性的用户来说,通过post清求操作会有一些副作用。方法doPost()的默认执行将返回一个HTTP的BADREQUEST错误。当编写Servlet时,为了支持post操作必富士通须在子类HttpServlet中实现此方法。方法doPost()的格式:protectedvoiddoPost(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;上一页下一页返回7.3Servlet的常用接口类(3)doPut():用来处理HTTP的put请求。此put操作模拟通过FTP发送一个文件。对于那些涉及安全性的用户来说,通过put请求操作也会有一些副作用。方法doPut()的格式:protectedvoiddoPut(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;(4)doDeleteU:用来处理HTTP的DELETE请求。此操作允许客户端请求一个从server移出的URL。对于那些涉及安全性的用户来说,通过DELETE请求操作会有一些副作用。上一页下一页返回7.3Servlet的常用接口类方法doDelete()的默认执行将返回一个HTTP的BAD_REQUEST错误。当编写Servlet时,为了支持DELETE操作,必须在子类HttpServlet中实现此方法。方法doDelete()的格式:protectedvoiddoDelete(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;(5)doHead():用来处理HTTP的head请求。默认的,它会在无条件的get方法执行时期运行,但是不返回任何数据到客户端。只返回包含内容信息的长度的header。由于用到get操作,此方法是很安全的(没有副作用)也是可重复使用的。此方法的默认实现自动地处理了HTTP的head操作并且不需要通过一个子类实现。上一页下一页返回7.3Servlet的常用接口类方法doHead()的格式:protectedvoiddoHead(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;(6)doOptions}用来处理HTTP的OPTIONS清求。此操作自动地决定支持什么HTTP方法。比如说,如果一个Servlet的作者创建HttpServlet的子类并重载方法doGetU,然后方法doOptions()会返回下面的header:Allow:GET,HEADTRACEOPTIONS。方法doOptions()的格式:protectedvoiddoOptions(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;上一页下一页返回7.3Servlet的常用接口类(7)doTrace()用来处理HTTP的TRACE请求。此方法的默认执行产生一个包含所有在TRACE请求中的header的信息的应答(response)。在开发Servlet时,多数情况下需要重载此方法。方法doTrace()的格式:protectedvoiddoTrace(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;
注:在开发以HTTP为基础的Servlet中,Servlet开发者关心方法doGet()和方法doPost()即可。上一页下一页返回7.3Servlet的常用接口类2.HttpServletRequestHttpServletRequest被传到service()方法用来提供客户的请求信息,HttpServletRequest接口可以获取由客户端传送的阐述名称、获取客户端正在使用的通信协议、产生请求并且接收请求的远端主机名和IP地址等信息。
HttpServletRequest接口提供获取数据流Servlet,ServletlnputStream方法,这些数据是客户端引用的使用HTTPpost不IIput方法递交的。一个ServletRequest的子类可以让Servlet获取更多的防议特性数据。上一页下一页返回7.3Servlet的常用接口类3.HttpServletResponseHttpServletResponse用来向客户端发送响应信息。HttpServletResponse接口给出相应客户端的Servlet方法,它允许Servlet设置内容长度和回应的MINE类型,并A提供输出流的ServletOutPutStream。并且HttpServletResponse的子类可以给出更多的与特定协议有关的容量的信息。
4.HttpSessionHttpSession接口被Servlet用来实现在HTTP客户端和HTTP会话两者之间的关联。这种关联可能在多处连接和请求中保持一段给定的时间。session用来在无状态的HTTP协议下越过多个清求页面来维持状态和识别用户。一个session可以通过Cookie或重写URL来维持。上一页返回7.4Servlet的生命周期Servlet的生命周期始于将它装入Web服务器运行时,在终止或重新转入Servlet时结束。一个Servlet在其生命周期中经历3个时期,详细描述如下。
(1)初始化时期。当一个服务器装载Servlet时,它运行Servlet的init()方法。
publicvoidinit(ServletConfigconfig)throwsServletException{super.init();//一些初始化的操作,如数据库的连接}
需要记住的是一定要在initU结束时调用superoinitUonits方法不能反复调用,一旦调用就是重装载Servlet。直到服务器调用destroy()方法卸载Servlet后才*能再调用。下一页返回7.4Servlet的生命周期(2)Servlet的执行时期。在服务器装载初始化Servlet后,Servlet就能够处理客户端的请求了。用service()方法做到这一点。每个客户端请求有它自己的ervice()方法:这些方法接收客户端请求,并且发回相应的响应。Servlet能同时运行多个service。这是很重要的,这样,service()方法可以按一个thread-safe样式编写。如:Service方法更新Servlet()对象中的一个字段field,这个字段可以同时存取的。假如某个服务器不能同时并发运行service()方法,也pJ以用SingleThreadModel接口,这个接口保证不会有两个以上的线程并发运行。在Servlet执行期间其最多的应用是处理客户端的清求并产生一个网页,其代码如下。上一页下一页返回7.4Servlet的生命周期PrrntWrrterout=response.qetWriter();out.println(“”)out.println(“”)out.println(“”)out.println(“HelloWorld");out.println(“”)out.close();上一页下一页返回7.4Servlet的生命周期(3)Servlet结束时期。
Servlet一直运行到它们被服务器卸载为止。在结束时需要收回在initU方法中使用的资源,在Servlet中是通过destory()方法来实现的。
publicvoiddestroy(){//回收在init()中启用的资源,如关闭数据库的连接等。}上一页返回7.5Servlet应用案例Servlet是一个标准的Java类,符合Java类的一般规则。和一般Java类不同之处就在丁Servlet可以处理HTTP清求。7.5.1一个简单的Servlet程序首先创建一个非常简单的Servlet应用,它的功能是在客户端输出“欢迎光临第一个Servlet!”。①基于HTTP1办议的Servlet必须引入javax.servletIIIjavax.servlet.http包。②FirstServlet从类HttpServlet派生,HttpServlet是GenericServlet的一个派生类,通过GenericServlet实现Servlet界面。HttpServlet为基于HTTP}办议的Servlet提供了基本的支持。下一页返回7.5Servlet应用案例③service()方法是Servlet程序的入口点,当用户从浏览器调用Servlet时,Servlet将进入该方法。Service()包含两个参数,HttpServletRequest对象包含了客户端请求的信息,可以通过该参数取得客户端的一些信息(例如IP地址、浏览器类型等)以及HTTP请求类型(例如get,headpost及put等);HttpServletResponse对象用于完成Servlet与客户端的交互,通过调用PrintWriter类的println(),取得向客户端进行输出的输出流,向客户端发送HTML页面。
(2)修改web.xml文件实现路径映射。要在网页中调用Servlet,还需要在web.xml文件中进行配置。
(3)项目的文件结构。文件结构如图7-2所示。
(4)运行Servlet。在浏览器中输入http://localhost:8080/myproject/FirstServlet,运行效果如图7-3所示。上一页下一页返回7.5Servlet应用案例7.5.2Servlet和HTML页面的交互Servlet可以接收HTML表单提交过来的数据,并将其显小在页而中。(2)修改web.xml文件实现路径映射。(3)编写HTML文件调用Seru1et。
(4)运行。配置好文件后,在浏览器中打开login.html输入姓名和密码,如图7-4所示,单击“提交”按钮,清求提交到由Form表单的action指定的LoginServlet中,LoginServlet调用serviceU方法,从Request中读取用户的输入,并输出这些信息到网页中,如图7-5所示。上一页返回7.6Servlet与JSP的交互
在进行Web开发时,由于JSP和Servlet的特点不同,可以在一个Web项目上同时使用JSP不IIServlet,它们之间的信息传递既可以由JSP跳转到Servlet,也可以由Servlet跳转到JSP。7.6.1从JSP到Servlet的信息传递
7.6.2从Servlet到JSP的信息传递
Servlet也可以跳转到JSP页面,一种方法利用response对象的sendRedirect()方法,另一种是利用RequestDispatcher对象的forward()方法来跳转,由于这样跳转后的页面与Servlet同属一个request请求,因此存在request中的数据在forward后的页面中也可以读取。返回7.7JSP开发网站的两种模式
目前,JSP技术正是利用了Java的“一次开发,处处使用”的性能,逐步成为了网站开发技术人员的首选技术。当然,JSP技术的最大优势在于它能够将页面的表现形式和页面的商业逻辑分开。JSP网站开发技术标准给出了两种使用JSP的方式。这些方式可以归纳为模式一和模式_。7.7.1模式介绍
1.模式一:JSP+JavaBean
如图7-6所示,在该模式中,JSP页面独自响应请求并将处理结果返回给客户。下一页返回7.7JSP开发网站的两种模式所有的数据通过bean来处理,JSP实现页面的表现。模式一技术也实现了页面的表现和页面商业逻辑相分离。大量使用该模式形式,正常会导致页面被嵌入大量的脚本语言或者Java代码。当需要处理的商业逻辑很复杂时,这种变的有些严重。综上所述,模式一不能够满足大型应用的要求,无其是大型项目。但是模式一可以很好地满足小型应用的需要,在简单的应用中,可以考虑模式一。2.模式二:JSP+JavaBean+Servlet这种模式结合了JSP和Servlet技术,充分利用了这两种技术的优点。如图7-7所示,它的主要思想是使用一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 豫东、鲁西南地区王油坊类型的分期解析与文化脉络探究
- 谷氨酰胺酶催化谷物蛋白对大米淀粉特性影响的深度剖析与应用展望
- 调质蒸发协同脱除:脱硫废水处理与烟气净化的深度融合
- 调整成本约束下中国经济波动的数量分析与政策启示
- 2026泉州石狮市第二实验小学招聘编外合同教师考试模拟试题及答案详解
- 诺水河至光雾山旅游公路:交通量预测与经济效益评价的深度剖析
- 语音识别中环境噪音抑制技术的深度剖析与创新实践
- 2026重庆电子科技职业大学考核招聘事业单位工作人员23人(第一批)笔试模拟试题及答案详解
- 2026年浙江医科大学附属妇产科医院医护人员招聘笔试备考题库及答案详解
- 2026江苏苏州高新区国有资本控股集团有限公司下属企业招聘5人笔试模拟试题及答案详解
- 2026年建筑施工焊工考试试题及答案
- 2026年上海市初三语文二模试题汇编《综合运用》含答案
- (2026版)《煤矿重大事故隐患判定标准》培训课件
- 2026年无锡小升初语文小升初分班考卷:语文阅读写作与基础积累(冲刺讲评版第2套)含参考答案、逐题解析与评分细则
- 2025年湖北省中考生物、地理合卷试卷真题(含答案)
- GB/T 43232-2023紧固件轴向应力超声测量方法
- 单层厂房抗震设计
- 公路水运工程施工企业(主要负责人和安全生产管理人员)考核大纲及模拟题库
- 仓库收货部文员绩效考核办法
- 中华人民共和国尘肺标准片
- 教育部高中语文新课程标准
评论
0/150
提交评论