2022年JSP教程_JavaServlet开发 .pdf
《2022年JSP教程_JavaServlet开发 .pdf》由会员分享,可在线阅读,更多相关《2022年JSP教程_JavaServlet开发 .pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 19 章 Java Servlet开发 有关 Servlet 的介绍在第1 章就已经有所涉及,它是使用Java技术的核心企业Web 支持方法之一,即可以使用来实现网站的动态。应用程序的开发人员可以创建J2EE 兼容 Java Servlet 组件,然后可以通过 HTTP 来处理 Web 业务特定请求和生成响应。Java Servlet 除了可以用来建立Web 支持 Java企业系统,还可以用来实现过滤器和监听器等功能,后面的功能将在下一章节重点介绍。这一章将重点介绍Java Servlet 的体系结构以及基于Web 的创建过程。本章要点包括以下内容:Servlet 的介绍Servlet 的
2、体系结构Servlet 的实现步骤Servlet 类的声明Servlet 的实例介绍19.1 什么是 Servlet Servlet 是一种Java 编程语言类,用来扩展通过响应请求编程模型服务应用程序访问的服务器功能。尽管Servlet 能够响应任何类型的请求,但是它们一般用来扩展由Web 服务器支持的应用程序。对这样的应用程序,Java Servlet 技术定义了HTTP 专用的 Servlet 类。Javax.Servlet 和 Javax.servlet.http 包为编写Servlet 提供了接口和类。所有的Servlet 必须执行定义了生命周期方法的Servlet 接口。 执行一般
3、服务时, 可以使用或者扩展Java Servlet API 提供的 GenericServlet类。为了处理HTTP 专有的服务, HttpServlet 类提供了一些方法,例如:doGet 和 doPost。这一章将重点放在对HTTP 请求生成响应而如何编写Servlet 类上面,以及对Servlet 的部署。下一章将对 Serlvet 的一些高级应用作重点介绍。19.2 Servlet 体系结构Java Servlet API提供的标准接口使开发人员可以处理客户端应用程序请求和生成这些请求的相应响应。因此,它提供了服务器端应用程序开发的基本建筑块。Java Servlet API 定义了一
4、般请求与响应框架,但最常用于通过Web 处理 HTTP 请求和生成HTTP 响应。 本小节将介绍这种J2EE 兼容 Java Servlet的逻辑、物理与动态体系结构。19.2.1 Servlet逻辑与物理体系结构由下面的图19.1 可以看出, HTTP 请求与响应建立在一个更加一般的Servlet 请求和响应之上。企业 Web 应用程序开发人员建立定制Java Servlet,将 HTTP Servlet 抽象具体化,其又将通用的Servlet 框名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
5、 - - 第 1 页,共 10 页 - - - - - - - - - 第 18 章常用插件扩展点301架具体化。通过HTTP 会话管理和cookie 还可以抽象同一用户多个请求间的数据管理。此外,可以用特殊 Servlet 过滤器截获和转换请求与响应(这部分内容将在下面章节介绍),在请求、 响应与 Java Servlet交互前后进行。框图 19-1 的核心是 J2EE 兼容 Java Servlet 容器。容器通常由第三方厂家提供,像本书使用的Tomcat服务器一般都已经提供了对Servlet 的兼容,这些服务器实现部署企业应用程序所需的许多核心服务。配置服务管理服务图 19.1 Serv
6、let体系结构19.2.2 Servlet生命周期Servlet 声明周期是由部署Servlet 的容器控制。当请求被映射至Servlet,容器执行下面步骤:(1)Web 客户机请求Servlet 服务时或者启动Web 服务器时,容器将装载Java.Servlet 类。(2)容器根据客户机请求生成Servlet 对象实例或者生成多个Servlet 对象实例并将其加进Servlet实例池中。(3)容器在Servlet 实例化时调用Servlet 初始化方法HttpServlet.init() 。(4)容器构造HttpServletRequest 与 HttpServletResponse 对象,
7、包装 Web 客户机的待定HTTP 请求和 Servlet 生成的响应。(5) 容器将 HttpServletRequest 与 HttpServletResponse 对象传入HttpServlet.service() 方法。定制 Java Servlet 可以访问这种HTTP 请求与响应接口。(6)定制 Java Servlet 从 HttpServletRequest 对象读取HTTP 请求数据,从HttpSession 或者 Cookie对象访问任何状态信息,进行任何应用程序特定处理,并用HttpServletResponse 对象生成HTTP 响应数据返回客户端。(7)Web 服务器
8、关闭时,用HttpServlet.destroy() 方法关闭任何打开的资源。19.3 Servlet 实现在编写Servlet 程序时一般需要继承Servlet 类接口(一般继承它的子类GenericServlet,用来进行名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - Eclipse 从入门到精通302Servlet 的初始化和关闭)和HttpServlet 接口(用于处理HTTP 请求和生成响应)。所以讲解Servlet
9、 编写,首先要了解Servlet 和 HttpServlet 两接口,下面就从这个接口开始讲起。19.3.1 Serlvet接口Javax.servlet 包中的类与接口包装了一个抽象框架,建立接收请求和产生响应的组件(即Servlet)。其中 Javax.servlet.Servlet 类是所有Java Servlet 的基础接口类。Servlet.init() 方法在Servlet 实例化时由Servlet 组件的容器调用一次。Servlet 容器要从服务器中删除Servlet 时,容器会调用Servlet.destroy()方法,使 Servlet 可以先清理任何资源之后再进入休眠状态。
10、Init() 方法取 javax.servlet.ServletConfig对象作为参数,其中包括容器环境中的初始化信息。然后可以用Servlet.getServletConfig() 方法返回ServletConfig对象的句柄。可以用getServletInfo() 方法从 Servlet 实例取得Servlet 的其他信息,如作者与版本信息。Servlet容 器 用Servlet.service() 方 法 在Servlet 正 常 操 作性 使 用 期 间 处 理请 求 和 生 成 响应 。Javax.servlet.ServletRequest 对象传入serviced() 方法,包
11、含从输入流读取的所有Servlet 请求信息。Javax.servlet.ServletResponse 对象也传入service()方法,通过把信息写入输出流从Servlet 中生成响应信息。另外要注意,Servlet 是线程安全的,Servlet 容器可以同时让多个线程调用同一个Servlet 对象实例的 service()方法。ServletConfig 接口:Servlet 实现 ServletConfig 接口,以便从 Servlet 容器环境中接受初始化信息。GenericServlet 类:抽象javax.servlet. GenericServlet类提供大多数Servlet
12、与 ServletConfig 接口的默认实现。ServletContext 接口:该接口类提供了Servlet 容器情境的句柄。19.3.2 HttpServlet类应用程序特定Servlet 类扩展了HttpServlet 类,处理HTTP 请求和生成HTTP 响应。应用程序特定类需要覆盖掉一个或者几个HttpServlet 方法及其基础GenericServlet 类方法。 GenericServlet 类派生的init() 、destroy()与 getServletInfo() 方法是应用程序特定类通常会实现的方法。HTTP 请求可以有多种形式,这些形式是由HTTP 请求的请求方法字
13、段名定义的。请求方法是所进行 HTTP 请求类型的标识符。容器接收相关HTTP 请求方法类型时,小服务容器环境在HttpServlet 实例中 调 用HTTP定 义 的doXxx() 方 法 之 一 。 每 一 个doXxx() 方 法 接 收 一 个HttpServletRequest与HttpServletResponse 对象作为输入参数,处理HTTP 请求和生成HTTP 响应。指定HTTP 请求方法情形中调用下列HttpServlet 方法类型之一:doGet()方法:在 Web 服务器收到HTTP GET 请求时调用。 GET 请求取得Web 服务器中特定资源的内容,入HTML 页面
14、。doPost()方法: 在 Web 服务器收到HTTP POST 请求时调用。 POST 请求也取得Web 服务器中的数据,但可以向Web 服务器发信息。例如,POST 请求可以取得HTML 表单中发出的数据。doPut()方法:在Web 服务器收到HTTP PUT 请求时调用。 PUT 请求将数据上载到Web 服务器中。doDelete()方法:在Web 服务器收到HTTP DELETE请求时调用。 DELETE 请求从 Web 服务器中删除数据,这个方法在实际开发过程中很少使用,让用户删除服务器中的资源风险太大。doHead()方法:在 Web 服务器收到HTTP HEAD请求时调用。
15、HEAD 请求与 GET 请求相似,但只要求 HTTP 响应中的 HTTP 头。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - 第 18 章常用插件扩展点303doOptions()方法:在Web 服务器收到HTTP OPTIONS请求时调用。OPTIONS 请求取得Web服务器支持的配置选项。doTrace()方法:在 Web 服务器收到HTTP TRACE请求时调用。 TRACE 请求让 Web 服务器返回客户机发送的HT
16、TP 头信息,用于调试。在以上介绍的七个方法中,一般只需要在自己编写的Servlet 类中覆盖其中的doGet()和 doPost()方法即可。19.3.3 初始化 servlet 类将 servlet 生命周期的时候,已经介绍过,在Web 容器加载及实例化servlet 类之后或传送客户端请求之前, Web 容器会初始化servlet 类。要自定义这个过程来使编写的servlet 类读取持久配置数据,初始化资源,执行任何其他一次性活动,需要重载servlet 接口中定义的init() 方法。例如下面的一段代码:Public class CatalogServlet extends HttpS
17、ervlet Private BookDBAO bookDB; Public void init() throws ServletException bookDB = (BookDBAO)getServletContext().getAttribute(“bookDB”); if(bookDB = null) throw new UnavailableException(“couldn t get database.”); 代码说明:在该Servlet 执行之前会先调用其中的init() 方法进行相应资源的初始化。19.3.4 编写服务方法由 servlet 类提供的服务在GenericSer
18、vlet 的服务方法中实现, 即通过覆盖GenericServlet 父类中的相应方法。在HttpServlet 对象的 doXxx() 方法(其中Xxx 可以取值为Get、Post。Options 等)中或者任何其他由实现servlet 接口的类定义的特定于协议的方法中实现。服务方法的通常模式就是从请求中提取信息,访问外部资源,然后根据那些信息填充响应。对于 HTTP Servlet 来说,填充响应的正确过程就是先从响应中获取输出流,然后填入响应标题,最后将任何主体内容写入输出流。响应标题总是必须在响应提交之前设定。任何在响应已经被提交之后设定和添加标题的尝试都会被Web 容器忽略。紧接着下
19、面讲解如何从请求中得到信息和生成响应。19.3.4.1从请求中获取信息 一个请求中包含了客户端和servlet 之间传递的数据。所有的请求都实现ServletRequest 接口,该接口中的方法用来接收数据。例如下面一段获取传递信息的代码:String bookId = request.getParameter(“add”); If(bookId !=null) BookDetails book = bookDB.getBookDetails(bookId); 除了直接获取HTTP 传递信息之后, 还可以从请求中获取输入流并手动解析数据。要读取字符数据,请使用请求的getReader()方法返
20、回的BufferReader 对象。要读取二进制数据,使用getInputStream()方法返回的 ServletInputStream 对象。19.3.4.2构造响应一个响应包括服务器和客户端之间传递的数据。所有的响应都实现ServletResponse接口。这个接口名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - Eclipse 从入门到精通304定义的方法可以实现如下功能:获取输出流来向客户端发送数据。指出由带有SetC
21、ontentType(String)方法的响应返回的内容类型。指出是否缓冲带有setBufferSize(int) 方法的输出。设定本地化信息。用来指出无法满足请求或者请求已经重定向的原因的状态码。用来保存客户端的特定于应用程序的信息的cookie。下面通过覆盖HttpServlet 接口类中的doGet()方法来演示响应处理。详细代码如下:public class BookDetailsServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletReponse response) t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年JSP教程_JavaServlet开发 2022 JSP 教程 _JavaServlet 开发
限制150内