ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:192.82KB ,
资源ID:8433852      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8433852.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(28 第二十八章 Servlet.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

28 第二十八章 Servlet.docx

1、28 第二十八章 Servlet第二十八章: Servlet学习目标 Java Servlet概述 Java Servlet API HTTP协议简介 Servlet过滤器 Servlet监听器Java Servlet概述 Web刚刚开始用于提供服务,服务供应商们就意识到动态内容的需求。最早朝这个方向发展的技术之一Applet,专注于利用客户平台提供动态的用户体验。与此同时,开发人员也开始研究使用服务器平台达到同样的目的。最初,通用网关接口(CGI)脚本是产生动态内容的主要技术。尽管CGI脚本技术被广泛使用,它却存在着许多缺陷,包括平台相关和缺少控制性。为了解决这些缺陷,出现了Java Ser

2、vlet技术。它以可移植的方式提供了动态的,基于用户的网页内容。Java Servlet是用Java编程语言实现的类。它扩展了通过请求一一响应模式访问的应用程序的服务器端的性能。尽管Servlet可以响应任何类型的请求,但通常它们用来扩展Web服务器端的应用程序。对于这样的应用,Java Servlet技术定义了专用于HTTP协议的Servlet类。类包javax.servlet和javax.servlet.http提供了编写Servlet的接口和类。所有的Servlet必须实现定义了生命周期方法的Servlet接口。当实现通用服务时,可以使用或扩展由Java Servlet API提供的Ge

3、nericServlet类。HttpServlet类提供了像doGet和doPost这样专门用于处理HTTP服务的方法。Servlet能够做什么?Servlet是用Java代码编写的服务器方软件程序,用于处理客户机和服务器之间的消息传递。Java Servlet API为请求和响应消息定义了一个标准接口,这样Servlet就可以跨平台和跨不同的Web应用服务器间移植。Servlet可以通过动态构造一个发回客户机的响应来响应客户机请求。例如:下面是一个响应HTTP请求的Servlet.源代码如下: package com.servlet; import java.io.IOException;

4、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 HelloServlet extends HttpServlet public HelloServlet() super(); public void destroy() su

5、per.destroy(); / Just puts destroy string in log / Put your code here public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html); PrintWriter out = response.getWriter(); out .println(); out.println(); out.printl

6、n( A Servlet); out.println( ); out.print( This is ); out.print(this.getClass(); out.println(, using the GET method and say you hello); out.println( ); out.println(); out.flush(); out.close(); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExce

7、ption doGet(request, response); public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException / Put your code here public void init() throws ServletException / Put your code here 在Web.xml配置文件的配置如下: web-app version=2.4 xmlns= xmlns:xsi=http:/www.w3.o

8、rg/2001/XMLSchema-instance xsi:schemaLocation= This is the description of my J2EE component This is the display name of my J2EE component HelloServlet com.servlet.HelloServlet HelloServlet /servlet/HelloServlet 在浏览器里输入:http:/localhost:818/beike/servlet/HelloServlet运行结果如下图由于Servlet是用Java编程语言编写的,它们可以访

9、问整个Java API集合。这就使它们非常适合实现复杂的商业应用逻辑,特别是访问企业中其它位置的数据。Java Database Connection(JDBC) API就是一个示例,它允许Java程序访问关系数据库。一般我们不直接在Servelt里面写JDBC编程,而是通过连接池技术或者Hibernate技术来实现JDBC的连接,后面会有综合的例子。由于没有与Servlet关联的图形,因此它不适合访问GUI Java API(AWT/Swing)可以多次调用一个Servlet来响应来自多个客户机的请求。这是一种多线程的工作方式,该Servlet只有一个实例,多个用户通过多线程的访问,来响应给

10、客户的。因此,一个Servlet可以同时处理多个请求,并且可以使这些请求同步。Servlet可以将请求转发到其它服务器和Servlet.Servlet如何工作?Servlet在J2EE的Web服务器(Web Container)中运行。而应用服务器是一种特殊的Web服务器;它们扩展了Web服务器的功能,还可以处理Enterprise Beans和Web应用程序的请求。Web服务器和应用服务器之间有明显的差异。虽然两者都可以在同一台机器上运行,Web服务器运行的是Servlet代码。服务器自己装入,执行和管理Servlet。服务器使用Java字节码解释器来运行Java程序;这叫做Java虚拟机(

11、JVM)。大型的应用服务器会自带虚拟机,比如:Weblogic。而小型的Web服务器需要使用操作系统里安装好的虚拟机,比如:tomcat。Servlet的生命周期。Servlet执行的步骤如下:1, 客户机将请求发送给服务器。2, 服务器从浏览器的地址栏获得请求的信息。并根据Web.xml配置文件找到响应的Servet执行。如果找不到,会报404错误。3, 如果是第一次请求,那么会实例化该Servlet,调用init()方法进行初始化,该方法在Servlet 的生命周期里只执行一次。然后分配线程进行响应。如果不是第一次访问,那么会直接分配个线程进行客户的响应。4, 在Servlet响应之前,服

12、务器会产生request,response对象,并且把客户请求的信息封装到request对象中,然后把这两个对象传递给Servlet的service()方法执行。5, service()根据请求的方式来调用不同的方法执行。比如get请求,service()方法会request,response对象传递给doGet()方法执行,把执行后的结果保存到response对象里面。返回给客户。6, 服务器关闭后,会调用Servlet的destroy()方法进行销毁。下面是Servetl执行的线程执行图:Servlet与CGI程序的区别:CGI(Common Gateway Interface)公共网关接

13、口程序也是用来创建响应请求的动态Web内容的。但与CGI相比,Servlet还有自己的优势。Servlet能够提供一个基于组件的,独立于平台的方法来创建Web应用,也没有一般CGI程序的性能限制。Servlet具有以下几个特点: 可跨平台,跨不同Web服务器进行移植。Servlet使你能够不用编写指定平台的API就能进行服务器端编程。Java Servlet API是标准Java的延伸。 具有持久性(Persistent)。一个Servlet在装入内存之后,就一直驻留内存,这意味着它能够在请求之间维持系统资源如数据库连接。 高效的(Efficient)。当一个客户对某个Servlet发出多个请

14、求时,服务器只创建并装入该Servlet一次。每一次重复请求只不过完成商业逻辑处理。CGI过程则对每个请求都装入一个过程,这会大大降低性能。而且,JVM使用lightweight java thread来处理对Servlet的请求,而不是像CGI那样使用一个weighty操作系统进程。 能够将表示(presentation)与商业逻辑(business logic)分离。这样一来,将一个项目划分为各个独立部分来进行开发和维护变得容易得多了。 能够获取给定的HTTP的各种调用并且从Java语言本身的继续开发中获益。Java Servlet API什么是Java Servlet API? Java

15、 Servet API 是一组类,用于定义Web客户机和Web Servlet之间的标准接口。其实,API将请求封装成对象,这样服务器可以将它们传递到Servlet;响应也是这样的封装,因此服务器可以将它们传递回客户机。Java Servlet API有两个包。Javax.servlet包含了支持普通协议无关的Servlet的类,javax.servlet.http包括了对HTTP协议的特别支持。本课主要介绍HTTP Servlet。Web上使用的HTTP ServletServlet接口类是Java Servlet API的重要抽象概念。这个类定义了管理Servlet以及它与客户机通信的方法

16、。要编写在Web上使用的HTTP Servlet,使用HttpServlet类: HttpServletRequest对象代表发送到Servlet的客户机请求。这个对象封装了从客户机到服务器的通信。它可以包含关于客户机环境的信息和任何要从Servlet发送到客户机的数据。 HttpServletResponse对象代表从Servlet发回客户机的响应。这通常是动态生成的响应,如HTML页面,并且它是用请求和Servlet访问的其它来源中的数据创建的。处理HTTP Servlet的关键方法HttpServlet的子类必须至少覆盖一个方法。通常,Servlet覆盖doGet或doPost方法。GE

17、T请求是对Web页面的典型浏览器请求,它是在用户输入URL或使用链接时发出的。POST请求是用户提交指定发出的HTML表单时生成的。HTTP POST方法允许客户机一次将无限长度的数据发送到Web服务器,并且可以在发出信息时使用。同一个Servlet可以通过让doGet调用doPost,或者反向调用来处理GET和POST。其它常用方法包括: Servlet的service()方法 Servlet容器激活了Servlet的service()方法,传递HttpServletRequest和HttpServletResponse对象同HTTP请求和响应进行交互,service()方法从请求对象中得到

18、必要的信息处理请求,然后使用响应对象的方法创建客户响应根据 HTTP传输方法,service()方法把请求发送给另一个方法,GET请求发送给doGet()方法,POST请求发送给doPost()方法方法之间可以相互调用,如doPost()可以调用doGet()方法,大多数人直接调用doGet或doPost doPut方法,用于HTTP PUT请求 doDelete方法,用于HTTP DELETE请求 init 和 destroy,用于管理为Servlet的使用期限而保留的资源。 getServletInfo,Servlet用来提供自身信息的方法。其它相关接口的说明:javax.servlet.

19、ServletConfig接口:当Servet第一次被装载时,为了向它传递服务设置信息,容器开发者必须实现该接口。javax.servlet.ServletContext接口:提供给Servlet一些访问它们所运行环境的方法,并允许记录一些重要的事件,由Servlet的编写者来决定记录什么样的数据。下图是servlet UML图HTTP协议简介大部分J2EE Web客户端使用HTTP协议和J2EE服务器通讯。HTTP协议定义了客户端可以发送给服务器的请求和服务器可以作为回答的响应。每个请求包含一个URL,URL是一个字符串,标识了Web组件或者像HTML页面和图象文件这样的静态资源。J2EE服

20、务器将HTTP请求转化为一个HTTP请求(Request)对象,并把这个对象传递给URL标识的Web组件。Web组件填充一个HTTP响应(Response)对象,服务器把这个对象转化为HTTP响应,并发送给客户端。HTTP协议基本概念及其特点HTTP(HyperText Transfer Protocol)是超文本传输协议的简称,是WWW上用于发布信息的主要协议。也可以理解为:在TCP/IP之上的Web的RPC(Remote Process Call远程过程调用)。关于HTTP协议更详细的信息,请登陆www.w3.org访问。HTTP定义了一个客户机/服务器结构的简单事务处理,这里的客户机/服

21、务器也就是浏览器/Web 服务器。简单事务处理由以下几步组成: 客户与服务器建立连接 客户向服务器提交请求如果请求被接受,那么服务器回送一个应答,应答中至少包括状态编码和该文件的内容。 客户或服务器断开连接。HTTP的基本特点是: 简单。服务器迅速作出浏览器的应答。 无状态。一个请求到另一个请求不保留任何有关连接的信息。 灵活。允许传送任意类型的数据对象。 无连接。HTTP是一个无连接协议。HTTP的缺点是每次连接HTTP只完成一次请求。若服务器的一个HTML文件中有许多图象,每传一个图象都要单独建立一次连接。一个HTTP请求包含请求方法(Request Method),请求URL,头字段(H

22、eader Field)和请求体。HTTP1.1定义了下面的请求方法:GET:获取由请求URL标识的资源。HEAD:返回由URL标识的头信息。POST:想Web服务器发送无限制长度的数据。PUT:存储一个资源到请求的URL。DELETE:删除由URL标识的资源。OPTIONS:返回服务器支持的HTTP方法。TRACE:返回TRACE请求附带的头字段。一个HTTP响应包括响应码,头字段和响应体。HTTP协议要求响应码和所有的头字段都在任何响应体之前返回。下面是一些常用的状态码:404:指示请求的资源不可用。401:指示请求需要HTTP验证。500:指示在HTTP服务器内部发生错误,不能执行请求。

23、503:指示HTTP服务器暂时性超载,不能处理当前请求。HTTP请求报头-ResquestHttpServletRequest对象封装了来自客户端的全部信息. Servlet容器得到一个请求的时候,建立了一个该类型的对象,并传递给Servlet获取参数方法.public String getParameter(String name) public Enumeration getParameterNames() public String getParameterValues(String name)获取内容信息getCharacterEncoding()方法返回请求的名称和字符编码风格用法:

24、request.getCharacterEncoding()public int getContentLength()方法可返回以字节记数的内容长度,如果长度未知,则返回-1 用法:request.getContentLength()getContentType()方法返回请求内容的MIME类型,未知返回null 用法:request.getContentType()获取连接信息getProtocol()方法获取传输协议及版本用法:request.getProtocol() (HTTP/1.1)getRemoteAddr()方法返回因特网协议(IP)地址用法:request.getRemote

25、Addr() (122.40.18.09)getRemoteHost()方法返回主机名用法:request.getRemoteHost() (122.40.18.09)getScheme()方法返回模式名用法:request.getScheme() (http)getServerName()方法返回服务器名用法:request.getServerName() (localhost)getServerPort()方法返回服务器端口号用法:request.getServerPort() (80)获取Cookie:以下代码显示了全部可用的Cookie Cookie cookies=request.g

26、etCookies(); int cookiesLen=cookies.length() if(cookiesLen0) for(int i=0 ; icookiesLen; i+) String sName=cookiesi.getName(); String sValue=cookiesi=getValue(); 获取用户请求信息req.getAuthtype()方法返回认证模式req.getMethod()方法返回HTTP方法req.getPathInfo()方法返回路径信息req.getPathTranslated()方法返回真实传输路径req.getQueryString()方法返回

27、请求索引串req.getRequestURI()方法返回请求URIreq.getServletPath()方法返回Servlet路径req.getAttributeNames()方法返回请求属性集req.getAttribute(String name)方法返回属性name的信息 HTTP响应报头-ResponseHttpServletResponse对象封装了同客户的全部通信,并提供了多种方法,能够访问和操作HTTP报头,属性等常见的方法setHeader()方法addCookie()sendError()setContentType()会话管理由于HTTP是无状态协议,服务器无法识别来自相

28、同客户端请求的顺序,因此需要采取专门的方法识别该类用户1.隐藏的表单字段:2.改写URL:向地址栏内URL后追加信息http:/localhost/servlets/srvlt?sql=1009&id=005以上两个信息可以用request.getParameter(“id”)取出持久Cookie:Cookie类 建立Cookie Date dtLogin=new Date(); Cookie coLt=new Cookie(“loginTime”,dtLogin.toString(); response.addCookie(coLt);/ 发送给客户端的响应中包含该Cookie 访问Cook

29、ie,得到用户登录的最后时间 for(int i=0; ireqCookies.length; i+) sName=reqCookiesi.getName(); if(sName!=null & sName.equalsIgnoreCase(“loginTime”) sValue=reqCookiesi.getValue(); 3.会话跟踪API:HttpSession接口HttpSession session=request.getSession();使用HttpSession的setAttribute()和getAttribute()方法把一个属性同会话联系起来发送请求:能够向另一个Servlet发送请求 ServletC

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1