版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 Servlet 编程,本章主要内容,Servlet 基础 Servlet 编程基本技能 Servlet 编程高级技能 Servlet Filter 编程,Servlet 基础 Servlet 编程基本技能 Servlet 编程高级技能 Servlet Filter 编程,Servlet 基础,Servlet定义:一种独立于操作系统平台和网络传输协议的服务器端的Java应用程序,它用来扩展服务器的功能,可以生成动态的Web页面,注意:Servlet不是从命令行启动的,而是由包含Java虚拟机的Web服务器进行加载,Servlet 基础,Servlet 与 Applet 相比较 : 相似之
2、处: (1)它们不是独立的应用程序,没有main()方法。 (2)它们不是由用户调用,而是由另外一个应用程序(容器)调用。 (3)它们都有一个生存周期,包含init()和destroy()方法。 不同之处: (1)Applet运行在客户端,具有丰富的图形界面。 (2)Servlet运行在服务器端,没有图形界面。,Servlet 最大的用途是通过动态响应客户机请求来扩展服务器功能!,Servlet 基础,Servlet 基础,Servlet工作原理 : Servlet运行在Web服务器上的Web容器里。Web容器负责管理Servlet。它装入并初始化Servlet,管理Servlet的多个实例,
3、并充当请求调度器,将客户端的请求传递到Servlet,并将Servlet的响应返回给客户端。Web容器在 Servlet 的使用期限结束时终结该 Servlet。服务器关闭时,Web容器会从内存中卸载和除去 Servlet。,Servlet 基础,Servlet基本工作流程 (1)客户机将请求发送到服务器。 (2)服务器上的Web容器实例化(装入)Servlet。 (3)Web容器将请求信息发送到 Servlet。 (4)Servlet 创建一个响应,并将其返回到Web容器。 (5)Web容器将响应发回客户机。 (6)服务器关闭或Servlet空闲时间超过一定限度时,调用destory()方法
4、退出。,Servlet 基础,注意:Servlet也可以配置为Web应用程序启动时自动装载。,结论: 客户机与Servlet间没有直接的交互。无论客户机对Servlet的请求还是Servlet对客户端的响应,都是通过Web服务器来实现的,这就大大提高了Servlet组件的可移植性。,Servlet 基础,多个请求的处理 :为每个请求创建一个新的线程来处理客户端的请求,必须注意线程的同步问题!,Web,容器,Servlet,实例,线程,A,线程,B,客户,A,客户,B,Web,服务器,图,3,-,1,Servlet,对多个请求的处理,Servlet 编程接口,Servlet 基础,Servlet
5、 基础 Servlet 编程基本技能 Servlet 编程高级技能 Servlet Filter 编程,编写响应HTTP请求的Servlet的步骤: (1)创建一个扩展了 javax.servlet.http.HttpServlet接口的Servlet类。 (2)重写doGet()或doPost()方法实现对HTTP请求信息的动态响应。,Servlet 编程基本技能,程序31:FirstServlet.java package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.se
6、rvlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FirstServlet extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcep
7、tion, IOException /TODO Method stub generated by Lomboz response.setContentType(text/html); PrintWriter out = response.getWriter(); out.println( + + + + First Servlet + + + + + +Hello World! + + + + ); ,利用Eclipse快速修正错误, First com.servlet.FirstServlet First /first index.jsp 404 /error.jsp ,程序32:Web.x
8、ml,处理客户端输入,Servlet 编程基本技能,在Web程序设计中,以表单方式向服务器提交数据是最常见的方法。表单数据的提交方法有两种:Post方法和Get方法, 当使用Post方法时,数据由标准的输入设备读入。 当使用Get方法时,数据由CGI变量QUERY_STRING传递给表单数据处理程序,即附加在请求地址的后面,在浏览器的地址栏中可以看到。 用户只要简单的调用HttpServletRequest的getParameter()方法,给出变量名称即可取得该变量的值。需要注意的是,变量的名称是大小写敏感的。当请求的变量不存在时,将会返回一个空字符串,/login.html 提交表单数据
9、欢迎登录系统 用户名: 密 码: ,package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class getpostdata extends H
10、ttpServlet protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /TODO Method stub generated by Lomboz /为解决编码问题后来添加 response.setContentType(text/html;charset=gb2312); request.setCharacterEncoding(gb2312);/解决编码问题 PrintWriter out = respons
11、e.getWriter(); out.println( /a tools method to show the html code with title n + + get post data + n + n + username: + request.getParameter(username) + n + password: + request.getParameter(password) + n + n + ); ,发送非HTML文档,Servlet 编程基本技能,随着Internet应用的不断扩展,为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识
12、数据类型 Servlets 可以使用 MIME 类型来向浏览器传送非 HTML 文件,比如 Adobe PDF 和 Micorsoft Word。使用正确的 MIME 类型能够保证这些非 HTML 文件被正确的插件或外部程序处理显示。 解决方案:需要将 response 对象中header 的 content 类型设置成 相应的MIME标志 res.setContentType(“application/pdf”),package com.servlet; public class PDFServlet extends HttpServlet protected void doGet(Http
13、ServletRequest request, HttpServletResponse res) throws ServletException, IOException /TODO Method stub generated by Lomboz res.setContentType( application/pdf ); ServletOutputStream out =res.getOutputStream (); File pdf =null; BufferedInputStream buf=null; try pdf=new File(c:sample.pdf); res.setCon
14、tentLength( (int) pdf.length( ) ); FileInputStream input = new FileInputStream(pdf); buf = new BufferedInputStream(input); int readBytes = 0; /read from the file; write to the ServletOutputStream while(readBytes = buf.read( ) != -1) out.write(readBytes); catch(IOException e) System.out.println(file
15、not found!); finally /close the input/output streams if (out != null) out.close( ); if (buf != null) buf.close( ); ,Servlet 编程基本技能,Servlet配置参数由ServletConfig对象表示。在Servlet被实例化后,ServletConfig对象对任何客户端在任何时候访问都有效,但一个Servlet的ServletConfig对象不能被其他Servlet访问。 在Servlet中要得到ServletConfig对象有两种方法: 在init()方法中获取(通过in
16、it的重载方法传递); 通过getServletConfig()方法直接获取。,用途:通过配置信息来初始化Servlet可以有效避免硬编码信息,提高Servlet的可移植性。,Web.xml片段, InitParam com.servlet.InitParamServlet FilePath C: ,方法一: package com.servlet; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import
17、 javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class InitParamServlet extends HttpServlet Servlet
18、Config myconfig; public void init(ServletConfig config) throws ServletException super.init(config); /TODO Method stub generated by Lomboz myconfig=config; protected void doGet(HttpServletRequest request, HttpServletResponse res) throws ServletException, IOException /TODO Method stub generated by Lom
19、boz res.setContentType( application/pdf ); ServletOutputStream out =res.getOutputStream (); File pdf =null; BufferedInputStream buf=null; /获取初始化参数 String pdfDir = myconfig.getInitParameter(FilePath);,if (pdfDir = null | pdfDir.equals() throw new ServletException( Servlet parameters Wrongs); try pdf=
20、new File(pdfDir+sample.pdf); res.setContentLength( (int) pdf.length( ) ); FileInputStream input = new FileInputStream(pdf); buf = new BufferedInputStream(input); int readBytes = 0; /read from the file; write to the ServletOutputStream while(readBytes = buf.read( ) != -1) out.write(readBytes); catch(
21、IOException e) System.out.println(file not found!); finally /close the input/output streams if (out != null) out.close( ); if (buf != null) buf.close( ); ,方法二: package com.servlet; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; im
22、port javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ConfigParamServlet extends HttpServlet protected void doGet(HttpServletReque
23、st request, HttpServletResponse res) throws ServletException, IOException /TODO Method stub generated by Lomboz res.setContentType( application/pdf ); ServletOutputStream out =res.getOutputStream (); File pdf =null; BufferedInputStream buf=null; /获取初始化参数 String pdfDir = getServletConfig( ).getInitPa
24、rameter(FilePath); if (pdfDir = null | pdfDir.equals() throw new ServletException( Servlet parameters Wrongs);,try pdf=new File(pdfDir+sample.pdf); res.setContentLength( (int) pdf.length( ) ); FileInputStream input = new FileInputStream(pdf); buf = new BufferedInputStream(input); int readBytes = 0;
25、/read from the file; write to the ServletOutputStream while(readBytes = buf.read( ) != -1) out.write(readBytes); catch(IOException e) System.out.println(file not found!); finally /close the input/output streams if (out != null) out.close( ); if (buf != null) buf.close( ); ,Servlet 基础 Servlet 编程基本技能
26、Servlet 编程高级技能 Servlet Filter 编程,Servlet 编程高级技能,HTTP特征: HTTP协议是一种无状态的协议,客户端每次打开一个Web 页面,它就会与服务器建立一个新的连接,发送一个新的请求到服务器,服务器处理客户端的请求,返回响应到客户端,并关闭与客户端建立的连接。当客户端发起新的请求,那么它重新与服务器建立连接,因此服务器并不记录关于客户的任何信息。 但是对于许多web应用而言,服务器往往需要记录特定客户端与服务器之间的一系列请求响应之间的特定信息。,Servlet 编程高级技能,从特定客户端到服务器的一系列请求称为会话。 在web服务器看来,一个会话是由
27、在一次浏览过程中所发出的全部HTTP组成的。 常见会话跟踪技术有: Cookie URL重写 隐藏表单域,使用cookie进行会话跟踪,cookie是一小块可以嵌入到HTTP请求和响应的数据。典型情况下,Web服务器将cookie值嵌入到响应的头部,而浏览器则在其以后的请求中都将携带同样的cookie。cookie的信息中可以有一部分用来存储会话ID,这个ID被服务器用来将某些HTTP请求绑定在会话中。cookie由浏览器保存在客户端,通常保存为一个文本文件。 cookie还含有一些其他属性,诸如可选的注释、版本号及最长生命周期。,public class cookieTrackServlet
28、 extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException Cookie cookie = null; /获取请求相关的cookie Cookie cookies = request.getCookies( ); /判断Cookie VisitTimes是否存在 /如果存在,其值加1 if (cookies != null) for (int i = 0; i cookies.len
29、gth; i+) if (cookiesi.getName( ).equals(VisitTimes) String v=cookiesi.getValue(); int value=Integer.parseInt(v)+1; cookiesi.setValue(Integer.toString(value); cookie=cookiesi; /end for /end if,if (cookie = null) int maxAge=10000; cookie = new Cookie(VisitTimes,1); cookie.setPath(request.getContextPat
30、h( ); cookie.setMaxAge(maxAge); response.addCookie(cookie) /end if response.setContentType(text/html;charset=gb2312); java.io.PrintWriter out = response.getWriter( ); out.println(); out.println(); out.println(Cookie跟踪会话 ); out.println(); out.println(); out.println( 您好!); out.println(欢迎您第 +cookie.get
31、Value( )+次访问本页面); out.println(); out.println(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doGet(request,response); ,使用URL重写跟踪会话,由于大部分浏览器允许关闭cookie功能,这使得跟踪会话更得更加困难。如果说不能依赖cookie的支持,那将不得不使用另外一种会话跟踪方法:URL重写。 URL重写通过在URL地址后面增加一个包
32、含会话信息的字符串来记录会话信息。URL地址与会话信息的字符串之间用“?”隔开。如果有多个参数,参数间用“charset=gb2312); java.io.PrintWriter out = response.getWriter( ); String contextPath = request.getContextPath( ); String encodedUrl = response.encodeURL(contextPath + /url2?name=张三 ,public class URLRewrite2 extends HttpServlet protected void doGet
33、(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(gb2312); response.setContentType(text/html;charset=gb2312); java.io.PrintWriter out = response.getWriter( ); out.println(); out.println(); out.println(URL Rewriter); out.print
34、ln(); out.println(); out.println( URL重写演示:接收参数); out.println(下面是接收的参数:); out.println(name=+request.getParameter(name); out.println(age=+request.getParameter(age); out.println(); out.println(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IO
35、Exception doGet(request,response); ,Servlet 编程高级技能,为消除代码中手工管理会话信息的需要,servlet规范定义了一个简单的HttpSession接口以方便servlet容器进行会话跟踪。 HttpSession 接口允许 Servlet查看和管理关于会话的信息,确保信息持续跨越多个用户连接等。 HttpSession高级接口实际上是建立在 Cookie 和 URL重写这两种会话跟踪技术之上的,只不过由Servlet自动实现了关于会话跟踪的一切,不再需要程序员了解具体细节。,Servlet 编程高级技能,使用 HttpSession 接口进行程序
36、开发的基本步骤是: (1)获取会话对象 (2)对会话对象进行读或写 (3)手工终止会话,或者什么也不做,让它自动终止。每个会话对象都有一定的生存周期,超过这个周期,容器将自动将会话对象中止。,package com.servlet; import java.io.IOException; import java.text.DateFormat; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http
37、.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class HitCounter extends HttpServlet static final String COUNTER_KEY = Counter; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IO
38、Exception HttpSession session = request.getSession(true); response.setContentType(text/html;charset=gb2312); java.io.PrintWriter out = response.getWriter(); int count = 1; Integer i = (Integer) session.getAttribute(COUNTER_KEY); if (i != null) count = Value() + 1; session.setAttribute(COUNTER_K
39、EY, new Integer(count);,Date lastAccessed = new Date(session.getLastAccessedTime( ); Date sessionCreated=new Date(session.getCreationTime(); DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); out.println(); out.println(); out.println(会话计数器); out.println(); o
40、ut.println(); out.println(你的会话ID: +session.getId()+ ); out.println(会话创建时间:+formatter.format(sessionCreated) + ); out.println(会话上次访问时间:+formatter.format(lastAccessed) + ); out.println( 会话期间你对页面发起 + count + 次请求); out.println(); out.println(); out.println(); out.println(); out.println(); out.flush(); ,
41、Servlet 编程高级技能,上下文:服务器上的每个Web应用都会有一个背景环境对象。上下文对象提供了一个同一Web应用内的不同资源间共享信息的场所。Javax.Servlet.ServletContext接口提供正在运行的Servlet所处的Web应用程序的上下文对象的视图,可以通过ServletConfig实例的getServletContext()方法得到该Servlet运行的上下文对象。,Servlet 编程高级技能,通过Servlet 上下文可以实现以下功能: (1)访问Web应用程序资源 (2)在Servlet上下文属性中保存Web应用程序信息 (3)获取初始化参数信息 (4)提供
42、日志支持,package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class AdminTemperatureServlet extends Ht
43、tpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=gb2312); PrintWriter out = response.getWriter(); String Temperature=(String)getServletConfig(). getServletContext().getAttribute(“Te
44、mperature”); if(Temperature=null) Temperature=(String)getServletConfig().getInitParameter(Temperature); getServletConfig().getServletContext().setAttribute(Temperature,Temperature); out.println(气温更新 + ); out.println(); out.println(); out.println(当前气温); out.print(FORM ACTION=);,out.println(response.e
45、ncodeURL(adminTemperature); out.println( METHOD=POST); out.println(当前气温(摄氏度)); out.println(); out.println(); out.println(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=gb2312); PrintWri
46、ter out = response.getWriter(); String Temperature=request.getParameter(temperature); getServletConfig().getServletContext().setAttribute(Temperature,Temperature); out.println(气温更新 + ); out.println(); out.println(当前气温:+Temperature+摄氏度); out.println(); ,package com.servlet; import java.io.IOException
47、; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ShowTemperatureServlet extends HttpServlet protected void doGet(HttpServletRequest req
48、uest, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=gb2312); PrintWriter out = response.getWriter(); String Temperature=(String)getServletConfig().getServletContext().getAttribute(Temperature); if(Temperature=null)Temperature=new String(
49、0); String oldTemperature=(String)request.getSession().getAttribute(OldTemperature); out.println(气温信息显示 + ); out.println(); out.println(当前最新气温:+Temperature+摄氏度); if(oldTemperature!=null) out.println(); out.println(更新前气温:+oldTemperature+摄氏度); out.println(); request.getSession().setAttribute(OldTemper
50、ature,Temperature); ,请求指派:在一个Servlet处理完毕后,将客户端的请求传递到另外一个Servlet来处理。 servlet规范定义了一个接口:Requestdispatcher requestdispatcher封装了到同一web应用内的另一个资源的应用。可以通过requestdispatcher的forward()方法将请求传递到其他资源。,Servlet 编程高级技能, 登录 欢迎登录系统 用户名: 密 码: ,package com.servlet; public class Main extends HttpServlet protected void do
51、Get(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doPost(request,response); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String userID=request.getParameter(userID); String passwor
52、d=request.getParameter(password); if(userID.equals(guest) ,package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRes
53、ponse; public class LoginSucess extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doPost(request,response); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, I
54、OException response.setContentType(text/html;charset=gb2312); PrintWriter out = response.getWriter(); out.println(); out.println(); out.println(); out.println(登录成功); out.println(); out.println(); out.println(); out.println(欢迎您! 系统登录成功!); out.println(); out.println(); out.close(); ,package com.servle
55、t; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginFail extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doPost(request,response); protected void doPost(HttpServletRequest request, HttpServletResponse response) t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑参观实习总结(3篇)
- 购房协议书范本电子版(3篇)
- 敬老爱老演讲稿(32篇)
- 幼儿园网络研修培训总结范文(3篇)
- 小学生开学演讲稿
- 2024-2025学年四川省成都市九县区高一(上)期中物理试卷(含答案)
- 四川省高考语文五年试题汇编-文言文阅读
- 2024年家教合同范本
- 2024年贵州省公务员考试《行测》真题及答案解析
- 调研报告:执行信息化建设存在的问题及对策建议
- 设备采购安装工程结算书
- [精品]台湾地区零售药店的现状与发展趋势
- 小学二年级等量代换
- 焙烧炉烟气换热器的设计方案
- 燃气公司安全管理奖罚办法
- 客位大金湖旅游船初步设计
- KCl-NaCl-H2O三元体系相图
- 血浆置换及临床的应用业内特制
- 雨蝶(李翊君)原版正谱钢琴谱五线谱乐谱.docx
- 人教版地理必修一教材解读(2019年版)
- 综合实践活动五年级下册课件-制作木蜻蜓14张ppt课件
评论
0/150
提交评论