第8章 JSP与Servlet编程.ppt
《第8章 JSP与Servlet编程.ppt》由会员分享,可在线阅读,更多相关《第8章 JSP与Servlet编程.ppt(61页珍藏版)》请在课桌文档上搜索。
1、第8章 JSP与Servlet编程,主要内容,Servlet概述,编写一个简单的Servlet,处理客户端提交的数据,返回数据到客户端,返回JSP+Servlet编程实例,一、Servlet概述,Servlet是与JSP样在服务器端运行的Java应用程序的一种。Servlet就是运行在服务器端的应用程序,Servlet接收来自客户端的请求,将处理结果返回给客户端。,1、什么是Servlet,(1)功能强大(2)执行效率高(3)开发难度低(4)可移植性好(5)性能更强,2、什么是Servlet,Servlet接受来自客户端的请求,这个请求Servlet是通过Web服务器得到的,然后运行之后得到结
2、果,然后返回结果,返回结果是通过Web服务器。Servlet的用途:(1)一个简单的Servlet可以处理使用HTML FORM在HTTPS上使用POST传递的数据。复杂的Servlet(可能还会使用RMI技术)可以用于实现定单输入和处理系统、生产及库存数据库以及一个可能的联机支付系统。(2)一个Servlet能并发处理多个请求;他们可以使用在诸如在线会议这样的同步请求支持系统。(3)Servlet可以转送请求给其他的服务器和Servlet,(4)Servlet编写者们可以定义彼此之间共同工作的激活代理,每个代理者是一个Servlet,而且代理者能够在他们之间传送数据。,3、Servlet的用
3、途,Servlet是一种在服务器端运行的Java程序,从某种意义上说,它就是服务器端的Applet。所以Servlet可以像Applet一样作为一种插件(Plugin)嵌入到Web Server中去,提供诸如HTTP、FTP等协议服务甚至用户自已定制的协议服务。而JSP是继Servlet后Sun公司推出的新技术,它是以Servlet为基础开发的,Servlet与JSP区别:(1)编程方式不同JSP是为了解决Servlet中相对困难的编程技术而开发的技术,因此,JSP在程序的编写方面比Servlet要容易的多,Servlet严格遵循Java语言的编程标准,而JSP则遵循脚本语言的编制标准。,4、
4、Servlet与JSP的区别,(2)Servlet必须在编译以后才能执行 JSP并不需要另外进行编译,JSP Container会自动完成这一工作,而Servlet在每次修改代码之后都需要编译完才能执行。(3)运行速度不同 由于JSP Container将JSP程序编译成Servlet的时候需要一些时间,所以JSP的运行速度比Servlet要慢一些,不过,如果JSP文件能毫无变化的重复使用,它在第一次以后的调用中运行速度就会和Servlet一样了,这是因为JSP Container接到请求以后会确认传递过来的JSP是否有改动,如果没有改动的话,将直接调用JSP编译过的Servlet类,并提供给
5、客户端解释执行,如果JSP文件有所改变,JSP Container将重新将它编译成Servlet,然后再提交给客户端。,Servlet执行javax.Servlet.Servlet接口。Servlet编写者可以通过直接执行interface开发Servlet,但这样通常没有必要。因为大多数Servlet是针对用HTTP协议的web服务器,这样最通用开发Servlet办法是用javax.Servlet.http.HttpServlet类。HttpServlet类通过extend GenericServlet基类执行Servlet interface,提供了处理HTTP协议的功能。一般地,用Htt
6、pServlet指定的类编写的Servlet可以多线程地并发运行service方法。Servlet一般从Javax包的HttpServlet类扩展而来,在HttpServlet中加入了一些附加的方法,这些方法可以被协助处理HTTP基本请求的HttpServlet类中的方法service自动地调用。,5、Servlet的方法,1doGet doGet用来处理HTTP的GET请求。这个GET操作仅仅允许客户从HTTP server上取得GET资源。重载此方法的用户自动允许支持方法HEAD。这个GET操作被认为是安全的,没有任何的负面影响,对用户来说是很可靠的。比如,大多数的正规查询都没有副作用。打
7、算改变存储数据的请求必须用其他的HTTP方法。这些方法也必须是个安全的操作。方法doGet的缺省实现将返回一个HTTP的BAD_REQUEST错误。doGet方法格式为:protected void doGet(HttpServletResquest request,HttpServletResponse response)throws ServletException,IOException;,下面看一段HTTP Servlet处理GET和HEAD方法的代码:package com.jsp.chap08;23import java.io.IOException;4import java.io
8、.PrintWriter;5import javax.servlet.ServletException;6import javax.servlet.http.HttpServlet;7import javax.servlet.http.HttpServletRequest;8import javax.servlet.http.HttpServletResponse;9public class SimpleServlet extends HttpServlet 10 public void doGet(HttpServletRequest req,HttpServletResponse res)
9、11 throws ServletException,IOException 12/首先设置头部13 res.setContentType(text/html);14/解决显示的中文问题15 res.setCharacterEncoding(gb2312);,16/用writer方法返回响应数据17 PrintWriter out=res.getWriter();18 out.println(新闻发布系统);19 out.println(新闻发布系统);20 out.println();21 out.close();22 2324 public String getServletInfo()2
10、5 return A simple Servlet;26 27,2doPostdoPost用来处理HTTP的POST请求。这个POST操作包含了在必须通过此Servlet执行的请求中的数据。由于它不能立即取得资源,所以对于那些涉及到安全性的用户来说,通过POST请求操作会有一些副作用。doPost的缺省执行将返回一个HTTP的BAD_REQUEST错误。当编写Servlet时,为了支持POST操作必须在子类HttpServlet中实现(implement)此方法。doPost方法格式为:protected void doPost(HttpServletResquest request,Http
11、ServletResponse response)throws ServletException,IOException;,下面看一段HTTP Servlet处理POST方法的代码:11 public void doPost(HttpServletRequest req,HttpServletResponse res)12 throws ServletException,IOException 13/首先设置响应的content type头部14 res.setContentType(text/html);15/得到响应的PrintWriter以返回文本给客户端.16 PrintWriter
12、toClient=res.getWriter();17 try 18/打开一个文件写入Survey的结果19 String surveyName=req.getParameterValues(survey)0;FileWriter resultsFile=new FileWriter(resultsDir+System.getProperty(file.separator)+surveyName+.txt,true);21 PrintWriter toFile=new PrintWriter(resultsFile);,22/从客户端得到表单数据存贮在该文件中23 toFile.println
13、();24 Enumeration values=req.getParameterNames();25 while(values.hasMoreElements()26 String name=(String)values.nextElement();27 String value=req.getParameterValues(name)0;28 if(pareTo(submit)!=0)29 toFile.println(name+:+value);30 31 32 toFile.println();,33/关闭文件。34 resultsFile.close();35/用一个thank yo
14、u返回客户端36 toClient.println();37 toClient.println(Thank you!);38 toClient.println(Thank you for participating);39 toClient.println();40 catch(IOException e)42 e.printStackTrace();43 44/关闭writer;响应完成。45 toClient.close();46 47,3doPutdoPut用来处理HTTP的PUT请求。此PUT操作模拟通过FTP发送一个文件。对于那些涉及到安全性的用户来说,通过PUT请求操作也会有一些副
15、作用。doPut方法格式为:protected void doPut(HttpServletResquest request,HttpServletResponse response)throws ServletException,IOException;,4doDeletedoDelete用来处理HTTP的DELETE请求。此操作允许客户端请求一个从server移出的URL。对于那些涉及到安全性的用户来说,通过DELETE请求操作会有一些副作用。doDelete方法格式为:protected void doDelete(HttpServletResquest request,HttpServ
16、letResponse response)throws ServletException,IOException;,5doHeaddoHead用来处理HTTP的HEAD请求。缺省地,它会在无条件的GET方法执行时运行,但是不返回任何数据到客户端。只返回包含内容信息的长度的header。由于用到GET操作,此方法应该是很安全的(没有副作用)也是可重复使用的。此方法的缺省实现(implement)自动地处理了HTTPDE的HEAD操作并且不需要通过一个子类实现(implement)。doHead方法格式为:protected void doHead(HttpServletResquest requ
17、est,HttpServletResponse response)throws ServletException,IOException;,6doOptionsdoOptions用来处理HTTP的OPTIONS请求。此操作自动地决定支持什么HTTP方法。比如说,如果读者创建HttpServlet的子类并重载方法doGet,然后方法doOptions会返回下面的header:GET、HEAD、TRACE和OPTIONS。doOptions方法格式为:protected void doOptions(HttpServletResquest request,HttpServletResponse r
18、esponse)throws ServletException,IOException;,7doTracedoTrace用来处理HTTP的TRACE请求。此方法的缺省实现产生一个包含所有在trace请求中的header的信息的应答(response)。在开发Servlet时,多数情况下需要重载此方法。doTrace方法格式为:protected void doTrace(HttpServletResquest request,HttpServletResponse response)throws ServletException,IOException;,Servlet的生命周期定义了一个Se
19、rvlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。Servlet的生命周期如图所示。,6、Servlet的生命周期,1Servlet的初始化init方法被调用于初始化JSP/Servlet,其格式为:public void init(ServletConfig config)throws ServletExceptionsuper.init();在初始化过程中,Servlet应当准备好它要安排的一些资源,以便这个Servlet能够接收请求,做到这些可以不用考虑多线程,因为在Servlet初始化时只能是单进程的。一旦初始化方法完成,Servlet就能接收客户端的请求。当然如果
20、初始化不能成功,这个方法会抛出UnavailableException解释的。初始化方法使用ServletConfig对象作为参数,这个方法应该保存这个对象,以便它能有方法getServletConfig()返回。最简单的办法是,创建出一个新类,它的初始化方法数调用super.init()。如果确实这样做,就应当自己保存ServletConfig对象,并且自己重编getServletConfig()方法,以便它能从新的位置得到对象。,例:1public void init(ServletConfig config)throws ServletException23 super.init(con
21、fig);4/获取目录5 resultsDir=getInitParameter(resultsDir);6/如果没有目录,不处理客户端7 if(resultsDir=null)8 9 throw new UnavailableException(this,Not given a directory to write survey results!);10 11,2Servlet的执行 Service方法可以用于实现事务逻辑,是处理请求的地方。在服务器装载初始化Servlet后,Servlet就能够处理客户端的请求,可以用service方法来实现。每个客户端请求有它自己service方法。这些
22、方法接收客户端请求,并且发回相应的响应。Servlet能同时运行多个service。这样,service方法可以按一个thread-safe样式编写。如service方法更新Servlet对象中的一个字段field,这个字段是可以同时存取的。假如某个服务器不能同时并发运行service方法,也可以用SingleThreadModel接口。这个接口保证不会有两个以上的线程(threads)并发运行。在Servlet执行期间其最多的应用是处理客户端的请求并产生一个网页。,3Servlet的结束当服务器卸载一个Servlet,它将调用Servlet的destroy方法。这个destroy方法是与初始
23、化方法相反,同时从内存中释放Servlet。Destroy的格式为:public void destroy(),下面看一段应用destroy方法的代码:public void destroy()Trycon.close();catch(SQLException e)while(e!=null)log(SQLException:+e.getSQLState()+t+e.getMessage()+t+e.getErrorCode()+t);e=e.getNextException();catch(Exception e)e.printStackTrace();,代码中,在初始化时打开的一个数据库连
24、接,destroy方法将该数据库连接关闭。下面看一段service方法、destory方法综合应用的代码:1package com.jsp.chap08;2import java.io.IOException;3import java.io.PrintWriter;4import javax.servlet.ServletException;5import javax.servlet.http.HttpServlet;6import javax.servlet.http.HttpServletRequest;7import javax.servlet.http.HttpServletRespo
25、nse;8public class ShutdownExample extends HttpServlet 9 private int serviceCounter=0;10 private Boolean shuttingDown;11/serviceCounter12 protected synchronized void enteringServiceMethod()13 serviceCounter+;14 15 protected synchronized void leavingServiceMethod()16 serviceCounter-;17 18 protected sy
![第8章 JSP与Servlet编程.ppt_第1页](https://www.desk33.com/fileroot1/2023-11/7/ee3bdae9-b91f-4d20-a40a-d0501839aea6/ee3bdae9-b91f-4d20-a40a-d0501839aea61.gif)
![第8章 JSP与Servlet编程.ppt_第2页](https://www.desk33.com/fileroot1/2023-11/7/ee3bdae9-b91f-4d20-a40a-d0501839aea6/ee3bdae9-b91f-4d20-a40a-d0501839aea62.gif)
![第8章 JSP与Servlet编程.ppt_第3页](https://www.desk33.com/fileroot1/2023-11/7/ee3bdae9-b91f-4d20-a40a-d0501839aea6/ee3bdae9-b91f-4d20-a40a-d0501839aea63.gif)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第8章 JSP与Servlet编程 JSP Servlet 编程
![提示](https://www.desk33.com/images/bang_tan.gif)
链接地址:https://www.desk33.com/p-751201.html