jsp教案7范文_第1页
jsp教案7范文_第2页
jsp教案7范文_第3页
jsp教案7范文_第4页
jsp教案7范文_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

jsp教案7范文 湖南城市学院教师备课纸第7次课题JAVA服务器小程序(ServLet)之定义、方法及编程目的要求掌握ServLet的定义、方法及编程教学重点ServLet的含义、步曙、方法与编程教学难点ServLet编程教学课时4(含2课时上机)教学方法讲解、示例与启发式教学相结合教学内容和步骤7.1ServLet概述Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。 Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。 7.1.1Java Servlet与Applet的比较:相似之处它们不是独立的应用程序,没有main()方法。 它们不是由用户或程序员调用,而是由另外一个应用程序(容器)调用。 它们都有一个生存周期,包含init()和destroy()方法。 不同之处Applet具有很好的图形界面(AWT),与浏览器一起,在客户端运行。 Servlet则没有图形界面,运行在服务器端。 Java Servlet与CGI(Common GatewayInterface)的比较:与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。 在未来的技术发展过程中,Servlet有可能彻底取代CGI。 高效在传统的CGI中,每个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。 而在Servlet中,每个请求由一个轻量级的Java线程处理(而不是重量级的操作系统进程)。 在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet类代码。 在性能优化方面,Servlet也比CGI有着更多的选择。 方便Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置头、处理Cookie、跟踪会话状态等。 功能强大在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。 例如,Servlet能够直接和Web服务器交互,而普通的CGI程序不能。 Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。 可移植性好Servlet用Java编写,Servlet API具有完善的标准。 因此,为IPla EnterpriseServer写的Servlet无需任何实质上的改动即可移植到Apache、Microsoft IIS或者WebStar。 几乎所有的主流服务器都直接或通过插件支持Servlet。 节省投资不仅有许多廉价甚至的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是的(或只需要极少的投资)。 7.1.2Java Servlet与JSP(JavaServer Pages)的比较:JavaServer Pages(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术,JSP并没有增加任何本质上不能用Servlet实现的功能。 但是,在JSP中编写静态HTML更加方便,不必再用println语句来输出每一行HTML代码。 更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开比如,由页面设计者进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。 从网络三层结构的角度看,一个网络项目最少分三层数据层、应用层和表示层。 Servlet用来写应用层是很强大的,但是对于写表示层就很不方便。 JSP则主要是为了方便写表示层而设计的,当然也可以写应用层。 写惯了ASP、PHP、CGI的朋友,经常会不自觉地把表示层和应用层混在一起。 比如把数据库处理信息放到JSP中,其实,它应该放在应用层中。 JSP中应该仅仅存放与表示层有关的部分,也就是说,只放输出HTML网页的部分。 而所有的数据计算、数据分析、数据库连接处理,统统是属于应用层,应该放在Java Beans中。 通过JSP调用Java Beans,实现两层的整合。 综上所述,Servlet是一个不完善的产品,写应用层很好,写表示层就逊色许多了,并且两层混杂。 7.2Java Servlet API2.2简介Java ServletAPI2.2的类和接口组成两个Java包,即javax.servlet和javax.servlet.(还包括javax.servlet.jsp包,不在本篇文章讨论范围之内)。 javax.servlet包提供了控制Servlet生命周期所必需的Servlet接口,是编写Servlet时必须要实现的。 javax.servlet.包提供了从Servlet接口派生出的专门用于处理请求的抽象类和一般的工具类。 所有的Servlet对象都要实现Servlet接口,大多数情况下是作为已经实现了Servlet接口的javax.servlet.GenericServlet和javax.servlet.HttpServlet这两个抽象类的子类来间接实现Servlet接口。 7.2.1javax.servlet包定义的类和接口interface RequestDispatcher/定义一种对象,用于从客户接受请求,并将请求发送到服务器上任何指定的资源,如一个Servlet、JSP或HTML文件。 interface Servlet/定义了所有Servlet必须实现的方法。 interface ServletConfig/定义Servlet config对象,由Servlet引擎用在Servlet初始化时,向Servlet传递信息。 interface ServletContext/定义了一系列方法,以便Servlet与其运行的环境通信。 interface ServletRequest/定义了用于向Servlet传递客户请求信息的对象。 interface ServletResponse/定义了一个对象,由Servlet用于向客户发送响应。 interface SingleThreadModel/用于保证Servlet在任一时刻,只处理一个请求。 class GenericServlet/继承Servlet接口,定义了一个通用的,与协议无关的Servlet。 class ServletInputStream/定义了一个输入流,用于由Servlet从中读取客户请求的二进制数据。 class ServletOutputStream/定义了一个输出流,用于由Servlet向客户发送二进制数据。 class ServletException/定义了一个当Servlet遇到问题时可以抛出的异常。 class UnavailableException/定义了一种异常,用于由Servlet指明它永远或暂时不可用。 7.2.2javax.servlet.包定义的类和接口interface HttpServletRequest/继承了ServletRequest接口,为Servlet提供请求信息。 interface HttpServletResponse/继承了ServletResponse接口,为Servlet输出响应信息提供支持。 interface HttpSession/为维护用户的会话状态提供支持。 interface HttpSessionBindingListener/使得某对象在加入一个会话或从会话中删除时能够得到通知。 interface HttpSessionContext/由Servlet2.1定义,该对象在新版本已不被支持。 class Cookie/用在Servlet中使用Cookie技术class HttpServlet/定义了一个抽象类,继承GenericServlet抽象类,应被Servlet继承。 class HttpSessionBindingEvent/定义了一种对象,当某一个实现了HttpSessionBindingListener接口的对象被加入会话或从会/话中删除时,会收到该类对象的一个句柄class HttpUtils/提供了一系列便于编写Servlet的方法。 7.3Servlet的主要方法 Servlet使用一个HTML表格来发送和接收数据。 要创建一个 Servlet,请扩展HttpServlet类,该类是用专门的方法来处理HTML表格的GenericServlet的一个子类。 HTML表单是由 表单中典型地包含输入字段(如文本输入字段、复选框、单选按钮和选择列表)和用于提交数据的按钮。 当提交信息时,它们还指定服务器应执行哪一个Servlet(或其它的程序)。 HttpServlet类包含init()、destroy()、service()等方法。 其中init()和destroy()方法是继承的。 (1)init()方法在Servlet的生命期中,仅执行一次init()方法。 它是在服务器装入Servlet时执行的。 可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。 无论有多少客户机访问Servlet,都不会重复执行init()。 缺省的init()方法通常是符合要求的,但也可以用定制init()方法来覆盖它,典型的是管理服务器端资源。 例如,可能编写一个定制init()来只用于一次装入GIF图像,改进Servlet返回GIF图像和含有多个客户机请求的性能。 另一个示例是初始化数据库连接。 缺省的init()方法设置了Servlet的初始化参数,并用它的ServletConfig对象参数来启动配置,因此所有覆盖init()方法的Servlet应调用super.init()以确保仍然执行这些任务。 在调用service()方法之前,应确保已完成了init()方法。 (2)service()方法语法格式public voidservice(HttpServletRequest request,HttpServletResponse response)throws servletException,IOException例1serviceDemo.java import javax.servlet.*;import javax.servlet.*;import java.io.*;import java.util.*;public classserviceDemo extendsHttpServletstatic finalprivate StringCONTENT_TYPE=text/html;charset=GBK;public voidinit()throws ServletExceptionpublic voidservice(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletExceptionresponse.setContentType(CONTENT_TYPE);request.setCharacterEncoding(GBK);PrintWriter out=response.getWriter();String name=request.getParameter(name);String gender=request.getParameter(gender);String age=request.getParameter(age);String method=request.getMethod();out.println( 名字=+name+ );out.println( 性别=+gender+ );out.println( 年龄=+age+ );public voiddestroy()System.out.println(servlet的生命结束);service()方法是Servlet的核心。 每当一个客户请求一个HttpServlet对象,该对象的service()方法就要被调用,而且传递给这个方法一个请求(ServletRequest)对象和一个响应(ServletResponse)对象作为参数。 在HttpServlet中已存在service()方法。 缺省的服务功能是调用与请求的方法相应的do功能。 例如,如果请求方法为GET,则缺省情况下就调用doGet()。 Servlet应该为Servlet支持的方法覆盖do功能。 因为HttpServlet.service()方法会检查请求方法是否调用了适当的处理方法,不必要覆盖service()方法。 只需覆盖相应的do方法就可以了。 当一个客户通过HTML表单发出一个 POST请求时,doPost()方法被调用。 与POST请求相关的参数作为一个单独的请求从浏览器发送到服务器。 当需要修改服务器端的数据时,应该使用doPost()方法。 一个客户通过HTML表单发出一个 GET请求或直接请求一个URL时,doGet()方法被调用。 与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。 当不会修改服务器端的数据时,应该使用doGet()方法。 Servlet的响应可以是下列几种类型一个输出流,浏览器根据它的内容类型(如text/HTML)进行解释。 一个错误响应,重定向到另一个URL、servlet、JSP。 destroy()方法destroy()方法仅执行一次,即在服务器停止且卸装Servlet时执行该方法。 典型的,将Servlet作为服务器进程的一部分来关闭。 缺省的destroy()方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。 例如,如果Servlet在运行时会累计统计数据,则可以编写一个destroy()方法,该方法用于在未装入Servlet时将统计数字保存在文件中。 另一个示例是关闭数据库连接。 当服务器卸装Servlet时,将在所有service()方法调用完成后,或在指定的时间间隔过后调用destroy()方法。 一个Servlet在运行service()方法时可能会产生其它的线程,因此请确认在调用destroy()方法时,这些线程已终止或完成。 GetServletConfig()方法GetServletConfig()方法返回一个ServletConfig对象,该对象用来返回初始化参数和ServletContext。 ServletContext接口提供有关servlet的环境信息。 GetServletInfo()方法GetServletInfo()方法是一个可选的方法,它提供有关servlet的信息,如作者、版本、版权。 doPost方法doPost()只可以接受浏览器和Form表单的post方法访问,格式public voiddoPost(HttpServletRequest request,HttpServletResponse response)throws servletException,IOException通过HTML表单提交了 POST请求时,将调用该方法。 与POST请求相关联的参数独立传递给Web服务器。 当在server端需对发来的数据作修改时采用doPost方法。 doGet方法doGet()方法可以接受浏览器直接访问和Form表单的get方法访问,格式public voiddoGet(HttpServletRequest request,HttpServletResponse response)throws servletException,IOException当在游览器中指定了一个URL时, GET是客户端采用的缺省方法。 doGet是Web server对用户端请求的响应方法。 与doPost不同的是,当在server端不需要对发来的数据修改时或是发来的参数非敏感数据时采用doGet方法。 参数数据被附加在URL之后通过一个请求发送给Web server。 doDelete()方法public voiddoDelete(HttpServletRequest request,HttpServletResponse response)throws servletException,IOException该方法删除服务器端的文件。 servlet的输出响应可以是以下几种情况之一,HTML页面、错误代码、重定向到别外的URL、servlet或JSP。 当服务器调用sevlet的Service()、doGet()和doPost()这三个方法时,均需要请求和响应对象作为参数。 请求对象提供有关请求的信息,而响应对象提供了一个将响应信息返回给浏览器的一个通信途径。 javax.servlet软件包中的相关类为ServletResponse和ServletRequest,而javax.servlet.软件包中的相关类为HttpServletRequest和HttpServletResponse。 Servlet通过这些对象与服务器通信并最终与客户机通信。 Servlet能通过调用请求对象的方法获知客户机环境,服务器环境的信息和所有由客户机提供的信息。 Servlet可以调用响应对象的方法发送响应,该响应是准备发回客户机的。 7.4Servlets编程Servlets是生成动态页面的Java解决方案。 它有如下特点移植性好Servlets以Java写成,在服务器端执行,拥有良好的跨平台特性,适应于各种Web服务器。 ServletAPI在Servlet和Web服务器之间定义了标准接口。 良好的一致性和性能:Servlet代码被Web服务器一次装入,为每一个客户端的请求而激活。 不同的请求间可以共享系统资源(如数据库连接)因此不存在为每一个请求初使化新的Servlet程序的额外开销。 Servlet可以动态装入可以在Web服务器启动时装入。 基于Java语言Servlet采用Java书写,它继承了Java语言的所有优点。 通过垃圾内存清理机制而且不使用指针,使得Servlet避免了内存管理的大多数问题。 servlet是运行于Web服务器或应用服务器的服务器端Java程序(注意,这里的应用服务器的是指应用的部署和运行平台软件Application Server)。 servlet和Web服务器的关系就象applet与浏览器的关系一样。 Applet在游览器中装入和执行,而servlet是在Web服务器中装入和执行。 servlet API定义了servlet与Web服务器间的标准接口,这使得servlet的开发独立于Web服务器。 7.4.1servlet的访问方式通过浏览器可以有几种途径访问servlet:HTML表单通常servlet由HTML表单中的Sumbit按钮驱动,用户的输入数据通过POST或GET方法传递给servlet。 超链接servlet也可以超链接的形式指定,通过超链接激活服务或servlet的doGet方法。 SERVLET标记一些Web服务器支持HTML文档的SERVLET标记或者标记。 执行时servlet的doGet方法被激活,输出结果代替SERVLET标记出现在HTML文档中。 在JSP0.92和1.0规范中,支持的include语法是通过servlet访问通过getServletContext().getServlet(servletn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论