J2EE指南中文版.docx

上传人:太** 文档编号:66905705 上传时间:2022-12-23 格式:DOCX 页数:125 大小:331.08KB
返回 下载 相关 举报
J2EE指南中文版.docx_第1页
第1页 / 共125页
J2EE指南中文版.docx_第2页
第2页 / 共125页
点击查看更多>>
资源描述

《J2EE指南中文版.docx》由会员分享,可在线阅读,更多相关《J2EE指南中文版.docx(125页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、文档说明:此文当中涉及到关健字、对象、等专用术语采取英文表达的方式。排版约定:标题均使用加粗斜体字;章标题使用二号字,距行首一个Tab距离;小节标题分别使用三、四、小四号字,位于行 首;内容使用五号字,距行首一个Tab距禽。J2EE指南前言:1993年8月,我加入了太阳公司一一被称之为第一人的小公司。我之所以知道这个公司是 因为我的一些同事跳槽到了太阳公司。我加入太阳公司的主要原因是因为我喜欢他卡通似的用 户界面。太阳公司正在发展,其界面有一个呢称一一Duke。“笫一人”的首次样品演示名日:七星(Star 7),它是一个能让房主通过触摸屏来实现远 程控制的产品。在我到哪儿的时候,他们正在为视频

2、点播做演示。这个妙极的视频点播演示是由加利福尼亚的一个称之为巨大图片工作室做的。演示产品使 川当时称之为Oak的编程语言做的。我的第一个任务就是帮助Oak语言的创造者一一James Gosling写语言规范。然而我真正想做的是对象为普通程序员的面向任务的文档。到了 1994年 7月,“第一人”陷入混乱,失去了向一些有线网络公司说明视频点播方案是消费者需求的说服 力。面向Internet的编程1994年秋天我返回工作时,这个公司的景象已经完全改变。他们决定Oak语言一一跨平台 的、安全的、易传输的代码时理想的面向Internet的语言。同时他们在制作名为WebRunner的浏览器,它具有在Int

3、ernet上传输Oak代码 他们称之为Applet 的能力。我开始写一些指南来帮助程序员使用appleis。1995年,当WebRunner浏览器首次出版时, 指南只是包含浏览器的-小部分,这个指南就是J2EE如torial的前身。该指南时第一次包含 applets的文档,看起来有点像The Java Tutorial。事实上,The Java Tutorial也许仍有些能在最初 出版的指南中找到。由于没有HTML工具,因此不得不手工完成。告诉你,为文档做手工代码 连接是无趣的,哪怕是一份小文档。这个编程语言的名称由Oak变为Java,浏览器的名称由 WebRunner 换为 HotJavaM

4、ary的加盟1995年早些时候,我们招收了一个合同编制员Mary CampioneNew-Application.b.在文件选择中选择 j2eelutorial/examples/src/web/bookstore 1.c.在文件名域中,输入Bookstore 1 App.d.单击 New Applicatione.单击OK.7、创建WAR并将BannerServlet Web组件及所有的Dukes书店内容加入到Bookstore 1 App 程序中a.选择File-New今Web组件b.在应用程序单选按钮中单击创建新的WAR文件并从复选框中选择Bookstore I App.c.单击Edit

5、以增加文件内容d.单击Nexte.选择servlet单选按钮f. 单击Nextg.选择 BannerSen leth.连续单击Next两次1 .在复选框别名栏中,单击Add,接着在别名域中输入/bannerj.单击 Finish.8、增加下表列出的网络组件,对于每个Servlet,单击Add I。Existing WAR File单选按钮并从复选框中选择Bookstore 1 WAR oWeb Component NameServlet ClassComponent AliasBookStoreServletBookStoreServlet/enterCatalogServletCatalog

6、Servlet/catalogBookDetailsServletBookDetailsServlet/bookdetailsShowCartServletShowCartServletZshowCartCashierServletCashierServlet/cashierReceiptServletReceiptServlet/receipt9、Cloudscapc数据库增加资源引用。a.选择 Bookstore WAR.b.选择资源引用标签c. 单击Addd.在代码名称域中输入jdbc/BookDBe.在 JNDI 域中输入 jdbc/Cloudscape.f.选择事件监听标签g.单击A

7、dd10、增加一个错误页面a.选择文件引用标签b.在错误映射栏中,单击Addc.选择 Filter M叩pingd.单击 Edit Filter Liste.单击Addf. tCounterFilterg.单击Addh.单击OK单击Addj.从 Filter 名称栏中选择 HitCountcrFikcrk.从目标类型栏中选择servlet1 .选择 BookStoreSenlet.m.对广OrderFilter也重复上面的步骤,目标类型是Senlci,目标是ReciptSendet 11、 输入上下文的根a.选择 Bookstore lAppb.选择网络上下文标签c.输入 bookstore1

8、12、 部署应用程序a.选择工具部署b.单击完成13、 打开 bookstore 的 URL处理错误这部分介绍常见错误及解决方法(尤指网络客户运行错误),并列出了一些为什么网络客户 连接失败的原因。此外,Duke、Bookstore返回下面的异常:1、BookNotFoundException:如果图书不在书店数据库中将产生这个异常,2、BooksNolFoundExceplion:如果书店数据不能返回将产生这个异常。3、UnavailableException:如果一个servlet不能返回代表书店的网络上下文属性信息。Servlet的生命周期部署了的Servlet的生命周期是由容器控制的。

9、当一个请求映射到相应的servlet Ibj,容器产 生下面的步骤:1 .如果servlet的实例不存在,容器会a.载入servlet类b.创建一个servlet实例c.通过调用init方法初始化servlet实例2 .调用service方法,如果容器需要删除servlet,可以通过调用destroy方法。处理seelet生命周期事件在servlet生命周期中,你可以通过定义一个监听对象来监听它的生命周期,当生命周期事 件发生时,该监听对象就会被调用。要使用这些监听对象,你必须定义监听类并指定监听类。定义监听类定义一个监听类并实现监听接口。下面的表列出了能够被监听并必须实现的相应的接口:Obj

10、ectEventListener Interface and Event ClassWeb contextInitialization and destructionAttribute added,remove,replaceSessionCreation,invalidation.timeoutAttribute added,remove,replace当一个监听方法被调用时,它恰当的传递一个包含信息的事件。例如,在HttpSessionListener接口中的方法传递一个包含HttpSession的HttpSessionEvent.,在 DukeImportPublic final cla

11、ss ContextListener implements ServletContextListener private ScrxdctContext contcxt=nulktry(BookDB bookDB=ncw BookDB();“bookDB”,bookDB);Couldnt create database:Counter countcr=ncw Countcr();hitCounter5,counter);“Created hitCounier”“orderCounter”,counier);“Created ordcrCountcf)public void contextDest

12、royed(Servle(ContextEvenl event)“bookDB);“bookDB);“hitCounter);ordcrCountcf);)指定事件监听类处理错误当Servlel执行时任何数量的异常都有可能发生。网络容器将会产生一个默认的页面包含这 样的信息:A Servlet Exception Has Occurred when an exception occurs,你也可以指定容器返回一 个特定的异常到指定的错误页面中。共享信息网络组件像其它的对象一样,通常同其它的对象协调工作。它们通过这样一些方法实现。 可以使用私有帮助对象,可以共享作为公共域属性的对象,可以使用数据

13、库,也可以调用其它 资源。Java Servlet技术机制是的网络组件可以调用其它网络资源。使用域对象共享信息通过做为4类域对象属性的对象来协调网络组件,这些属性通过类的get/set属性 方法来展示域。下表列出了域对象:Scope ObjectClassAccessible FromWeb contextWeb components within a Web contextSessionWeb components handling a request that belongs to the sessionRequestWeb components handling the requestP

14、ageThe JSP page that creates the object控制共享资源的并发入口在一个多线程的服务器中,共享资源并发使用是可能的。除了域对象属性外,共享资源包 括进驻内存的数据,例如实例或类变量,以及外部对象如文件,数据库连接,网络连接。并发 可在下面的一些情况下发生:. 多数网络组件访问对象存储在网络上下文中.多数网络组件访问对象存储在会话中. 网络组件中的多线程访问实例变量。网络容器将产生一个线程来处理每个请求。如果 你想让servlel在某个时刻只处理一个请求,servlei可以实现接口 SingleThreadModelo如果一个 servlet实现了该接口,可以保

15、证没有两个线程回并发调用servlet的service方法。网络容器打以 通过同步访问单个sen-let实例以实现这个保证,或者通过维护网络组件实例的池并分发新的请 求到一个闲着的servleto这个接口不阻止由于网络组件访问共享资源(例如静态类变量或外部 对象)产生的同步问题。当资源能并发访问的时候,它们可以以种不一致的方式来使用。为了防止这种情况,你 必须控制通过并发技术实现的访问。在前面的部分里,我们展示了被servlet共享的五种域属性:bookDB,Cart,currency,hilCoun(er 及orderCounter. bookDB将在下一部分讨论。Cart, counter

16、可以被垛线程的servlet设置、读取。public class Counter (private int counter; public counter() (counter=();public synchronized int getCounter() return counter;public synchronized int setCounter(int c) (countcr=c;return counter;)public synchronized int incCountcr() (return (+counter);I)访问数据库数据在各网络组件间共享,Public void

17、buyBooks(ShoppingCart cart) throws OrderExceptionIterator ITry getConnection();BuyBook(id,quantity);)releaseConnection();catch(Exception ex)(tryreleaseConneclion();throw new OrdcrExccption(44Transaction failcd:catch(SQLException sqx) |releaseConneclion();throw new OrderExceptionCRollback failed:“I)初

18、始化Servlet在网络容器载入并实例化Servlei之后,被客户请求之前,网络容器将初始化servlel。你可 以通过改写init方法来自己定制这个过程来允许servlet读取持久配置数据,初始化资源,及处 理其它一次性的事情。一个servlet不能完成其初始化过程将抛出UnavailableException.所有的访问书店数据库的servlet都在init方法中初始化由网络上下文产生的指向数据库帮 助类对象的变量:public class CatalogServlet extends HttpSen let (private BookDB bookDB;public void init(

19、) throws ServletExceptionboolDB=(BookDB)gecServIetConiexi().getAttribule(bookDB);if(bookDB=null) throw new UnavailavlcExccption(44Couldnt get database?);)I编写Service方法servlet 提供的 service 方法实现了 GenericServlct 类的 service 方法。HttpServlet 的 doMcthod 方法,或其它类定义的实现了 Servlet接口的特定协议方法。在本章的卜面几部分,service方法 将在ser

20、vlet中为客户提供服务。一般的service方法模式通过request获取信息,访问外部资源,然后根据信息做出相应的 响应。对于htipServlet,正确的响应过程是首先填写响应头,接着从响应返回输出流,最后向输出 流写上程序体内容。响应头必须在PrintWriter和SeiTletOutputStream之前设置,因为HTTP协 议希望在程序体内容之前接受所有头信息。接着的两部分描述了如何从request获取信息并产生 响应。通过,equest取得信息一个请求包含客户端与servlet之间的数据传递。所有的请求都实现了 ServlelRequest接口。 该接口定义了访问一下信息的方法:

21、.参数,典型的实用它来在客户端与Servlet之间传递信息。.对象属性,主要用来在servlet容器中的servlet间的信息传递。.使用通信协议的信息,以及请求调用中的客户与服务。.本地相关信息。例如,在CatalogServlet中,客户想购买的书籍的标志作为请求参数。在下面的代码中显示 了如何使用方法gelParameter来取得标志:“Add”);If(bookID !=null)你也可以从请求中获得输入流并解析数据。要读取字符数据流,可以使用由请求(request) 方法getReader返网BufferedReader对象,要读取二进制数据,可以使用getlnputStream方法

22、返 回的 ServlellnpulSlream 对象。HTTP sender 传递 HTTP request 对象 HtipScrvlctRcquest,它包含 rcqucstURL.HTTP 头,查询 字符串,等等。一个HTTP请求URL包含以下部分:path?request path由下面的几部分组成:.Context path: J2EE应用程序的servlet的上下文根构成的一连串斜线(/)。.Servlet path:激发请求的组件路径部分,这部分以斜线开头。.Path info :请求路径部分,这部分不是上下文路径,也不是servlet路径。如果上下文路径是/catalog,别名列

23、于卜,表:PatternServlet/lawn/*LawnServlet/*.jspJSPScrvlct下表给出了将URL分解的例子:Request PathServlet PathPath Info/lawn/null查询字符串由一系列参数和其值组成,参数分别从request的方法gelParameter获得其值。 有两种方法产生查询字符串:.查询字符串可以显示的出现在Web页面中。例如,由CatalogServlet产生的HTML页面 可能包含下面的连接:a hrefVbookstore 1 /catalog?Add= 101 Add to CartCatalogSen let通过下面的

24、方法分解出这个参数:String bookId=requesi.getParameler(“Add”);当一个表单通过GET HTTP提交时,查询字符串可以跟在URL后面。在Duke飞Bookstore 应用程序中,CashcrServlct产生一个表单,接着一个输入到表单中用户名跟到U R L后面映射到 ReceiptServlet,最后 ReceiptServlet 通过 getParameter 方法获得用户名。构造 Responses一个响应包含数据在服务器域客户之间的传递。所有的响应都实现了 ServletResponse接口。 该接口的方法允许你做下面的事:.获得输出流用来向客户端

25、输出数据。发送字符型数据可以使用由responses getWriier方 法返回PrintWriter ,要发送二进制数据,可以使用getOutputStream方法返回的 ServletOutputStream要发送二者的混合数据,可以通过ServletOutpulStream人工管理字符部分以 创建一个多部分响应。.指出内容类型(content type,例如 text/html),.指出是否缓冲输出。默认情况下,输出流中的任何内容都是立即送到客户端。在任何数 据实际发送到客户之前,缓冲允许数据写入,这样允许servlet有更多的时间设置正确的状态码、 头信息或定向到期它网络资源。.设置

26、本地信息。HTTP响应对象HttpServletResponse,有属性代表HTTP头,例如:.状态码,用来线时请求失败的原因。.Cookies,用来在客户端存储特定的应用信息。有时cookies也用来作为标志来跟踪用户的 会话。在Dukes书店应用中,BookDetailsSenlet产生HTML页面以显示由servlet从数据库返回 的有关书的信息。Servlet首先设置响应:响应的内容类型,缓冲大小;因为数据库访问可能产 生异常,因此servlet缓存页面内容以重定向到错误页面。通过缓存响应,客户端不会看到连串 的错误页面。DoGet方法由响应返回Print Writer.Servlel

27、首先分发请求到BannerServlel用来产生公用旗帜以代替响应,接着,Servlel从请求 参数获得图书标志,并使用该标志从数据库返回相关信息,最后,servlet产生HTML以描述图 书信息,并通过调用PrintWreter的close方法执行响应。Public class BookDetailsServlet extends HitpServlet public void doGet(HttpServletRequest request,HttpSenletResponse response) throws ServletException.IOException/set header

28、s before accessing the Writer“text/html);/then wrile the response“+”“TiUeBookDescription)+,);/get the dispatcher;it gets the banner to the userRequestDispatcher dispalcher=getServletConlext().getRequestDispalcher(t7bannef,);If(dispatcher!=null)/gel the identifier of the book to display“bookid);If(bo

29、okld!=null)(try/print out the information obtained“v/h2”catch(BookNotFoundException ex); )过滤请求及响应过滤是一个可传送头或内容或者二者的请求及响应的对象。过滤对象不同网络组件之处 在于它不是自己产生响应,它提供了能依附其它网络资源的功能。因此,过滤对象不能独立于 网络资源,它不只可以与一种网络资源组合。它的主要功能是:.查询请求并作相应的处理。.阻止请求响应对进一步通过。.修改请求头及数据。通过提供个自定义的请求修改响应头及数据。通过提供一个自定义的响应。.域外部资源交互。过滤的应用包含授权、日志、图像

30、转换,数据压缩,加密,表示流,及X ML转换。总之,使用过滤的任务包含以下方面:.编写 filler.编写自定义请求及响应.为每个网络资源指定过滤链。编写Filter.检查请求头。.如果希望修改请求头或数据可以自定义请求体.如果希望修改响应头或数据可以自定义响应体.如果当前的filler在链中是最后一个以网络资源或静态资源的filler,可以调用过滤链中的 下一个实体,下一个实体是链尾的资源;另外,它是下一个在WAR中配置的filter。它通过调 用链体中的doFilter来调用下一个实体。如果要做山选择,可以选择不通过调用下一实体来阻 止请求。在下面的例子中,filler负责响应。.在调用链

31、中的下一个filter之后检查响应头。.抛出异常以说明正在处理错误。除了 doFiller,你必须实现init, destroy方法。当filter实例化后,Init方法由容器自己调用。表2-1环境变量设置环境变量值JAVA_HOMEJ2SE SDK的安装目录J2EE_HOMEJ2EE SDK的安装目录ANT_HOMEANT的安装目录(或解压缩目录)PATH包括上面三个工具的安装目录的bin子目录启动J2EE服务器在终端窗口中执行如卜.命令启动J2EE服务器:j2ee -verbose虽然verbose不是必需的,但是它对调试很有用。停止服务器用如下命令:j2ee -stop启动deployt

32、ool部署工具dcploytool部署工具有两种运行模式:命令模式和GUI图形用户接I I模式。本章介绍的是 指GUI模式。在终端窗口中执行下面的命令启动deploytool的GUI模式:deploytool要查看部署工具的上下文帮助,按F1键。二,创建J2EE应用程序1 .在deploylool部署.I:具中,选择菜单FileNewApplicdon新建应用程序2 .再出现的对话框中点击Browse3 .在选择文件对话框中定位到路径:j2eetutor ial/examples/src/ejb/converter4 . 在File Name域中输入5 . 点击 New Application

33、 按钮6 . 点击OK三,创建企业Bean企业Bean是包含应用程序商业逻辑的服务器端组件。运行时,客户端调用企业Bean的方 法来处理商业逻辑。本例的企业Bean是个叫做ConverterEJB的无状态会话Bean,(企业 Bean的分类将在下一章讨论。)它的源文件放在J2eetutor ial/examples/src/ejb/converter 目录下。编写企业Bean代码本例的企业Bean需要以下三类代码: Remote 接 口 Home 接 口 企业Bean类编写Remote接口Remote接口定义客户端可以访问的商业方法。这些商业方法都在企业Bean类里实现。本 如果你希望传递初始

34、参数到filter,你可以通过FilterConfig对象传递到init方法。在Dukes Bookstore程序中使用了 HitCounterFilter及Orderfilter来增加,日志计数值。在doFiker方法中,两个filter都从filter配置体中获得servlet context.所以它们可以访问作 为context属性的计数值。在filter完成特定应用处理后,它们调用filter chain中的doFiltcr方法 传递到原来的doFilter方法。Public final class HitCounterFilter implements Filter private

35、FilterConfig filtefConfig=null;public void ini(FilterConfig IllterConfig)public void destroy() nfig=null;Ipublic void doFiltcr(ScrvlctRcqucst request,ScrvlctRcsponsc rcsponsc,FiltcrChain chain) throws lOException.ServletExceptionif(filterConfig=null)return;StringWriter sw=new StringWriter();PrintWri

36、ter writer=new PrintWriter(sw);“hilCounter);-=-);“The number of hits is:“=);/log the resulting string编写自定义的请求与响应filter有很多种方法修改请求及响应。例如,filter可以可以增加一个属性到请求中,或插入 数据到响应中。在Dukes Bookstore这个例子中,HitCounterFilter插入counter的值到响应中。Filler在修改响应必须在它返回到客户端时捕获响应,方法就是传递替代流到产生响应的 servlet,替代流防止servlet关闭源响应。为传递这替代流到se

37、rvlet, filter创建一个响应包取代getWritengctOutputStream方法以返回 这替代流。这个替代流传递到filter链的doFilter方法。下面的部分描述了 hit counter filter是如 何描述早期及其它类型filter使用包的。为重载请求方法,你可以包装请求到一个扩展ScrvlctRcquestWrappcr或DtipScrvlelWrapper 对象。要重载响应方法,可以包装响应到扩展了 ServletResponseWrapper或 HttpServletResponseWrapper.CharResponseWrapper wrapper=new

38、 CharResponseWrapper( (HttpServletResponse)response);CharArrayWritcr caw=ncw CharResponse Wrappcr();“v/body)-l);“vp/nVcenlerVisitor)+“vfonlcolor=redyfontv/center);t7nM);Public class CharRcsponscWrappcr extendsHttpSeivletResponseWrapperPrivate CharArrayWriter output;Public String toString()StringO;Public CharResponseWrapper(HttpServletResponse response)(S ii p

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁