您好,欢迎访问三七文档
2019年8月31日1第9章JavaServlet2019年8月31日2教学目标了解Servlet的优点与用途了解Servlet与JSP的区别掌握Servlet的方法了解Servlet的生命周期了解和掌握Servlet的类和接口2019年8月31日3教学重点Servlet与JSP的区别Servlet的方法Servlet的类和接口2019年8月31日4教学过程Servlet工作原理处理客户端提交的数据JSP+Servlet编程实例2019年8月31日59.1Servlet概述什么是ServletServlet的优点Servlet的用途Servlet与JSP的区别Servlet的方法Servlet的生命周期Servlet的类和接口状态代码2019年8月31日6什么是ServletServlet是与JSP—样在服务器端运行的Java应用程序的一种。Servlet与JSP或者CGI一样,当浏览器端有请求则将其结果传递给浏览器。文际上执行JSP文件的时候,首先JSPContainer会将其转译为Servlet(*.java)文件,并自动编译解释执行。JSP中使用到的所有对象都将被转换为Servlet或者非Servlet的Java对象,然后被执行,所以执行JSP实际上与执行Servlet是一样的。从JSP的角度去看的话,Servlet实际上是JSP被解释执行的中间过程,即JSP实际上是为了让Servlet的开发显得相对容易而采取的脚本语言形式。简单来说,Servlet就是运行在服务器端的应用程序,Servlet接收来自客户端的请求,将处理结果返回给客户端。2019年8月31日7Servlet的优点功能强大。在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。执行效率高。在传统的CGI中,每个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在Servlet中,每个请求由一个次要的Java线程处理。而不需要反复启动。这也叫“一次加载多次使用”。在传统CGI中,如果有N个并发的进程对同一CGI程序发出请求,则该CGI程序的代码在内存中重复装载了N次;而对于Servlet,处理请求的是N个线程,只需加载一次Servlet类代码。从而可以提高处理速度。2019年8月31日8开发难度低。相对于传统的CGI,Servlet有很多例程,可以完成许多功能,如网络缓存、Cookies、还有会话跟踪,自动读取Http表头等功能。开发者在这些功能完备的例程的基础上,轻松地开发功能复杂的Web应用程序。可移植性好。Servlet是使用Java编写的,所以很好地继承了Java的跨平台性特点。由于ServletAPI的规范很完备,所以几乎所有的主流Web服务器,如Apache、MicrosoftIIS或者WebStar等,都直接或者通过插件支持Servlet。性能更强。Servlet比CGI有着更多的选择,比如缓冲以前的计算结果,保持数据库连接的活动等等。2019年8月31日9Servlet的用途一个简单的Servlet可以处理使用HTMLFORM在HTTPS上使用POST传递的数据,复杂的Servlet(可能还会使用RMI技术)可以用于实现定单输入和处理系统、生产及库存数据库以及一个可能的联机支付系统。一个Servlet能并发处理多个请求;他们可以使用在诸如在线会议这样的同步请求支持系统。Servlet可以转送请求给其他的服务器和Servlet,按照任务类型或组织范围,可以允许被用来在几个服务器中划分逻辑上的服务器。Servlet编写者们可以定义彼此之间共同工作的激活代理,每个代理者是一个Servlet,而且代理者能够在它们之间传送数据。2019年8月31日10Servlet与JSP的区别Servlet是一种在服务器端运行的Java程序,从某种意义上说,它就是服务器端的Applet。所以Servlet可以像Applet一样作为一种插件(Plugin)嵌入到WebServer中去,提供诸如HTTP、FTP等协议服务甚至用户自已定制的协议服务。而JSP是继Servlet后Sun公司推出的新技术,它是以Servlet为基础开发的。Servlet与JSP相比有以下几点区别:编程方式不同Servlet必须在编译以后才能执行运行速度不同2019年8月31日11Servlet的生命周期Servlet的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。Servlet的生命周期如图。不存在Servlet实例容器装载Servlet不存在Servlet实例初始化Servlet对应Servlet的init方法调用化service方法对应Servlet的service方法结束Servlet对应Servlet的destroy方法Servlet生命周期2019年8月31日12Servlet的初始化init方法被调用于初始化JSP/Servlet,其格式为:publicvoidinit(ServletConfigconfig)throwsServletException{super.init();}在初始化过程中,Servlet应当准备好它要安排的一些资源,以便这个Servlet能够接收请求,做到这些可以不用考虑多线程,因为在Servlet初始化时只能是单进程的。一旦初始化方法完成,Servlet就能接收客户端的请求。2019年8月31日13Servlet的执行Service方法可以用于实现事务逻辑,是处理请求的地方。在服务器装载初始化Servlet后,Servlet就能够处理客户端的请求,可以用service方法来实现。每个客户端请求有它自己service方法。这些方法接收客户端请求,并且发回相应的响应。Servlet能同时运行多个service。这样,service方法可以按一个thread-safe样式编写。如service方法更新Servlet对象中的一个字段field,这个字段是可以同时存取的。假如某个服务器不能同时并发运行service方法,也可以用SingleThreadModel接口。这个接口保证不会有两个以上的线程(threads)并发运行。在Servlet执行期间其最多的应用是处理客户端的请求并产生一个网页。2019年8月31日14Servlet的结束当服务器卸载一个Servlet,它将调用Servlet的destroy方法。这个destroy方法是与初始化方法相反,同时从内存中释放Servlet。Destroy的格式为:publicvoiddestroy(){……}用户调用destroy实际上不会卸载Servlet,只有Servlet引擎才可以实现此功能。2019年8月31日15Servlet/JSP配置要运行Servlet,则需要JSP/Servletcontainer,可以使用Tomcat5.0来实现,在环境变量CLASSPATH中添加C:\Tomcat5.0\common\lib\servlet-api.jar2019年8月31日16Servlet/JSP配置Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INF这个目录下面的web.xml文件进行注册,打开这个web.xml文件,使用Hello.java文件,在里面加入:<servlet><servlet-name>Hello</servlet-name><servlet-class>Hello</servlet-class></servlet>//表示指定包含的servlet类<servlet-mapping><servlet-name>Hello</servlet-name><url-pattern>/servlet/Hello</url-pattern></servlet-mapping>//指定Hello应当映射到哪一种URL模式2019年8月31日17存放servlet的目录2019年8月31日18Servlet的方法Servlet一般从Javax包的HttpServlet类扩展而来,在HttpServlet中加入了一些附加的方法,这些方法可以被协助处理HTTP基本请求的HttpServlet类中的方法service自动地调用。这些方法有:doGet、doPost、doPut、doDelete、doHead、doOptions、doTrace。2019年8月31日19doGet用来处理HTTP的GET请求。这个GET操作仅仅允许客户从HTTPserver上取得GET资源。重载此方法的用户自动允许支持方法HEAD。这个GET操作被认为是安全的,没有任何的负面影响,对用户来说是很可靠的。doGet方法格式为:protectedvoiddoGet(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;2019年8月31日20doPost用来处理HTTP的POST请求。这个POST操作包含了在必须通过此Servlet执行的请求中的数据。由于它不能立即取得资源,所以对于那些涉及到安全性的用户来说,通过POST请求操作会有一些副作用。doPost方法格式为:protectedvoiddoPost(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;2019年8月31日21doPut用来处理HTTP的PUT请求。此PUT操作模拟通过FTP发送一个文件。对于那些涉及到安全性的用户来说,通过PUT请求操作也会有一些副作用。doPut方法格式为:protectedvoiddoPut(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;2019年8月31日22doDelete用来处理HTTP的DELETE请求。此操作允许客户端请求一个从server移出的URL。对于那些涉及到安全性的用户来说,通过DELETE请求操作会有一些副作用。doDelete方法格式为:protectedvoiddoDelete(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;2019年8月31日23doHead用来处理HTTP的HEAD请求。缺省地,它会在无条件的GET方法执行时运行,但是不返回任何数据到客户端。只返回包含内容信息的长度的header。由于用到GET操作,此方法应该是很安全的(没有副作用)也是可重复使用的。doHead方法格式为:protectedvoiddoHead(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;2019年8月31日24doOptions用来处理HTTP的OPTIONS请求。此操作自动地决定支持什么HTTP方法。比如说,如果读者创建HttpServlet的子类并重载方法doGet,然后方法doOptions会返回下面的header:GET、HEAD、TRACE和OPTIONS。doOptions方法格式为:protectedvoiddoOptions(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOExcepti
本文标题:教学目标-
链接地址:https://www.777doc.com/doc-640057 .html