




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面试资料总结范文 Struts工作流程:struts1:发布Struts Web服务时,根据web.xml初始化ActionServlet,ActionContext等内容.在接到一个HttpRequest请求后,ActionServlet根据struts-config.xml中的配置内容,将请求的参数传到对应的Formbean中,并设置session.然后根据请求中的Action参数,在struts-config.xml中查找指定的Action,并调用此Action来处理请求.根据Action的处理结果,会返回一个forward变量,此时通过mapping.findForward()查找出对应的forward所标示的Action或者JSP页面,将请求转到下一个处理.如果是forward指向JSP页面,则输出到前台.Struts2工作流程: (1)客户端提交一个HttpServletRequest请求(.action或JSP页面) (2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等 (3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器 (4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个Request(一般根据URL后缀是否为.action来判断) (5)如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActioProxy,由其进行处理. (6)ActionProxy通过Configuration Manager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action类. (7)ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调用之前会根据配置文件加载相关的所有Interceptor拦截器) (8)Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器. (9)最后ActionInvocation负责根据struts.xml中配置的result元素,找到与返回值对应的result,决定进行下一步输出. 1、Servlet的基本架构。 【基础】答public classServletName extendsHttpServletpublic voiddoPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOExceptionpublic voiddoGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException 2、WEB SERVICE名词解释。 JSWDL开发包的介绍。 JAXP、JAXM的解释。 SOAP、UDDI,WSDL解释。 Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得WebService能与其他兼容的组件进行互操作。 JAXP(Java APIfor XMLParsing)定义了在Java中使用DOM,SAX,XSLT的通用的接口。 这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。 JAXM(Java APIfor XMLMessaging)是为SOAP通信提供访问方法和传输机制的API。 WSDL是一种XML格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。 这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。 相关的具体端点即组合成为抽象端点(服务)。 SOAP即简单对象访问协议(Simple ObjectAess Protocol),它是用于交换XML编码信息的轻量级协议。 UDDI的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。 soap是web service最关键的技术,是web service中数据和方法调传输的介质。 WSDL(web servicedefinition language)描述了web service的接口和功能。 3、内部类可以引用他包含类的成员吗?有没有什么限制?一个内部类对象可以访问创建它的外部类对象的内容,内部类如果不是static的,那么它可以访问创建它的外部类对象的所有属性内部类如果是sattic的,即为nested class,那么它只可以访问创建它的外部类对象的所有static属性一般普通类只有public或package的访问修饰,而内部类可以实现static,protected,private等访问修饰。 当从外部类继承的时候,内部类是不会被覆盖的,它们是完全独立的实体,每个都在自己的命名空间内,如果从内部类中明确地继承,就可以覆盖原来内部类的方法。 4、Jdo是什么?JDO是Java对象持久化的新的规范,为java dataobject的简称,也是一个用于存取某种数据仓库中的对象的标准化API。 JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。 这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。 另外,JDO很灵活,因为它可以在任何数据底层上运行。 JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。 5、STRUTS的应用(如STRUTS架构)Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。 二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。 三.提供了一系列实用对象XML处理、通过Java reflectionAPIs自动处理JavaBeans属性、国际化的提示和消息。 6、LINUX下线程,GDI类的解释。 LINUX实现的就是基于核心轻量级进程的”一对一”线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。 GDI类为图像设备编程接口类库。 7、BS与CS的联系与区别。 C/S是Client/Server的缩写。 服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQL Server。 客户端需要安装专用的客户端软件。 B/是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Inter Explorer,服务器安装Oracle、Sybase、Informix或SQL Server等数据库。 在这种结构下,用户界面完全通过浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。 浏览器通过eb Server同数据库进行数据交互。 8、C/S与B/S区别硬件环境不同:C/S一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务.B/S建立在广域网之上的,不必是专门的网络硬件环境,例与电话上网,租用设备.信息自己管理.有比C/S更强的适应范围,一般只要有操作系统和浏览器就行对安全要求不同C/S一般面向相对固定的用户群,对信息安全的控制能力很强.一般高度机密的信息系统采用C/S结构适宜.可以通过B/S发布部分可公开信息.B/S建立在广域网之上,对安全的控制能力相对弱,可能面向不可知的用户。 对程序架构不同C/S程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑.B/S对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上.比C/S有更高的要求B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk2000Exchange2000等,全面支持网络的构件搭建的系统.SUN和IBM推的JavaBean构件技术等,使B/S更加成熟.软件重用不同C/S程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好.B/S对的多重结构,要求构件相对独立的功能.能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子系统维护不同C/S程序由于整体性,必须整体考察,处理出现的问题以及系统升级.升级难.可能是再做一个全新的系统B/S构件组成,方面构件个别的更换,实现系统的无缝升级.系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.处理问题不同C/S程序可以处理用户面固定,并且在相同区域,安全要求高需求,与操作系统相关.应该都是相同的系统B/S建立在广域网上,面向不同的用户群,分散地域,这是C/S无法作到的.与操作系统平台关系最小.用户接口不同C/S多是建立的Window平台上,表现方法有限,对程序员普遍要求较高B/S建立在浏览器上,有更加丰富和生动的表现方式与用户交流.并且大部分难度减低,减低开发成本.信息流不同C/S程序一般是典型的中央集权的机械式处理,交互性相对低B/S信息流向可变化,B-B B-C B-G等信息、流向的变化,更像交易中心。 9、应用服务器与WEB SERVER的区别?应用服务器Weblogic、Tomcat、Jboss WEBSERVER IIS、Apache 10、jsp有哪些动作?作用分别是什么?JSP共有以下6种基本动作jsp:include在页面被请求的时候引入一个文件。 jsp:useBean寻找或者实例化一个JavaBean。 jsp:setProperty设置JavaBean的属性。 jsp:getProperty输出某个JavaBean的属性。 jsp:forward把请求转到一个新的页面。 jsp:plugin根据浏览器类型为Java插件生成OBJECT或EMBED标记。 11、开发中都用到了那些设计模式?用在什么场合?每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。 通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。 主要用到了MVC的设计模式。 用来开发JSP/Servlet或者J2EE的相关应用。 简单工厂模式等 12、UML方面标准建模语言UML。 用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。 110、J2EE是什么?J2EE是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(ponent-base)的企业级应用模型(enterprise applicationmodel).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。 所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。 13、java中会存在内存泄漏吗,请简单描述。 的确存在Java的内存泄漏,并且事态可以变得相当严重Java garbagecollector自动释放哪些内存里面程序不在需要的对象,以此避免大多数的其他程序上下文的内存泄漏.但是Java应用程序依旧会有相当的内存泄漏.查找原因会十分困难.有两类主要的Java内存泄漏:*不再需要的对象引用*未释放的系统资源2.2非必要的对象引用Java代码常常保留对于不再需要的对象引用,并且这组织了内存的垃圾收集器的工作.Java对象通常被其他对象包含引用,为此一个单一对象可以保持整个对象树在内存中,于是导致了如下问题:*在向数组添加对象以后遗漏了对于他们的处理*直到你再次使用对象的时候都不释放引用.比如一个菜单指令可以插件一个对象实例引用并且不释放便于以后再次调用的时候使用,但是也许永远不会发生.*在其他引用依然需要旧有状态的时候贸然修改对象状态.比如当你为了在一个文本文件里面保存一些属性而使用一个数组,诸如”字符个数”等字段在不再需要的时候依然保留在内存当中.*允许一个长久执行的线程所引用的对象.设置引用为NULL也无济于事,在线程退出和空闲之前,对象不会被收集释放2.3未释放的系统资源Java方法可以定位Java实例意外的堆内存,诸如针对视窗和位图的内存资源.Java常常通过JNI(Java NativeInterface)调用C/C+子程序定位这些资源. 14、jsp有哪些内置对象?作用分别是什么?【基础】答JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应)request用户端请求,此请求会包含GET/POST请求的参数;response网页传回用户端的回应;pageContext网页的属性是在这里管理;session与请求有关的会话期;application servlet正在执行的内容;out用来传送回应的输出;config servlet的构架部件;page JSP网页本身;exception针对错误网页,未捕捉的例外。 15、JSP标签的作用?如何定义?【中等难度】答作用分离jsp页面的内容和逻辑;业务逻辑开发者可以创建自定义标签;封装业务逻辑;可重用并且易维护;易于手工修改、易于工具维护;提供简洁的语法;定义:写标签处理器;写tld文件;讲标签处理器和tld文件放到同一个包里面;把jsp页面和标签库配置部署在一起。 16、简述HttpSession的作用、使用方法,可用代码说明。 (3分钟)【基础】答HttpSession中可以跟踪并储存用户信息,把值设置到属性中,有2个方法setAttribute(),getAttrribute();例如在一个方法中用session.setAttribute(“student”,student);在session中设置一个属性名为student,值为一个名为student的对象。 而后可在同一session范围内用getAttribute(“student”)取出该属性,得到student对象。 17、struts的入口类?【基础】答是ActionServlet,所有的struts请求都经由该类转发处理。 18、几种会话跟踪技术?【基础】答cookie、URL重写、设置表单隐藏域。 19、过滤器有哪些作用?【基础】答可以验证客户是否可信的网络,可以对客户提交的数据进行重新编码,可以从系统里获得配置的信息,可以过滤掉客户的某些不应该出现的词汇,可以验证用户是否登录,可以验证客户的浏览器是否支持当前的应用,可以记录系统的日志等等。 20、过滤器的用法?(对客户端的请求统一编码和对客户端进行认证)【基础】答首先要实现(implements)Filter接口,同时覆盖Filter接口的三个方法init(FilterConfig config)/用于获得FilterConfig对象;doFilter(ServletRequest request,ServletResponse response,FilterChain chain)/进行过滤处理一些业务;destroy()/销毁Filter。 21、介绍在JSP中如何使用JavaBeans?【基础】答在JSP中使用JavaBean常用的动作有1)用来创建和查找bean对象;2)用来设置bean的属性,即调用其setXxx()方法;3)用来获得bean的属性,即调用其getXxx()方法。 22、JSP和Servlet中的请求转发分别如何实现?【基础】答JSP中的请求转发可利用forward动作实现;Serlvet中实现请求转发的方式为getServletContext().getRequestDispatcher(path).forward(req,res)。 23、Web.Xml的作用?【基础】答用于配置web应用的信息;如listener、filter及servlet的配置信息等。 24、写出熟悉的JSTL标签。 【基础】答、。 25、说出struts中的标签。 【基础】答 26、javascript的优缺点和内置对象;【中等难度】答1)优点简单易用,与Java有类似的语法,可以使用任何文本工具编写,只需要浏览器就可执行程序,并且事先不用编译,逐行执行,无需进行严格的变量声明,而且内置大量现成对象,编写少量程序可以完成目标;2)缺点不适合开发大型应用程序;3)Javascript有11种内置对象Array、String、Date、Math、Boolean、Number、Function、Global、Error、RegExp、Object。 27、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?有两种实现方法,分别是继承Thread类与实现Runnable接口用synchronized关键字修饰同步方法反对使用stop(),是因为它不安全。 它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。 结果很难检查出真正的问题所在。 suspend()方法容易发生死锁。 调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。 此时,其他任何线程都不能访问锁定的资源,除非被”挂起”的线程恢复运行。 对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。 所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。 若标志指出线程应该挂起,便用wait()命其进入等待状态。 若标志指出线程应当恢复,则用一个notify()重新启动线程 28、什么情况下调用doGet()和doPost()?【基础】答Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。 29、如何从form表单中得取checkbox的值;【基础】答可在页面把checkbox的name属性取同一个,value属性取每个条目的id,后台用getParamter(“name”)能取到checkbox的一组值。 30、页面中有一个命名为bank No的下拉列表,写脚本获取当前选项的索引值。 【基础】答用java或javaScript的处理方式分别如下Java request.getParameter(“bank No”);javaScript varselectItems=document.getElementsByName(“bank No”);selectItems0.value; 31、javascript常用的方面;【基础】答常用于数据输入校验和页面特殊效果等。 32、常用的web容器和开发工具;【基础】答最常用的容器包括tomcat、weblogic;开发工具有eclipse,jbuilder。 33、get和post的区别?【基础】答Form中的get和post方法,在数据传输过程中分别对应了协议中的GET和POST方法。 二者主要区别如下1)Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据;2)Get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL;3)Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的;4)Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post;5)Get限制Form表单的数据集必须为ASCII字符,而Post支持整个ISO10646字符集;6)Get是Form的默认方法。 34、MVC的各个部分都有那些技术来实现?如何实现?MVC是ModelViewController的简写。 Model”代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View”是应用的表示面,用于与用户的交互(由JSP页面产生),”Controller”是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。 这些组件可以进行交互和重用。 model层实现系统中的业务逻辑,view层用于与用户的交互,controller层是model与view之间沟通的桥梁,可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。 35、请对以下在J2EE中常用的名词进行解释(或简单描述)web容器给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接和容器中的环境变量接接口互,不必关注其它系统问题。 主要有WEB服务器来实现。 例如TOMCAT,WEBLOGIC,WEBSPHERE等。 该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION标准。 我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。 Web container实现J2EE体系结构中Web组件协议的容器。 这个协议规定了一个Web组件运行时的环境,包括安全,一致性,生命周期管理,事务,配置和其它的服务。 一个提供和JSP和J2EE平台APIs界面相同服务的容器。 一个Web container由Web服务器或者J2EE服务器提供。 EJB容器Enterprise javabean容器。 更具有行业领域特色。 他提供给运行在其中的组件EJB各种管理功能。 只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。 并且可以通过现成的接口来获得系统级别的服务。 例如邮件服务、事务管理。 一个实现了J2EE体系结构中EJB组件规范的容器。 这个规范指定了一个Enterprise bean的运行时环境,包括安全,一致性,生命周期,事务,配置,和其他的服务。 JNDI(Java Naming&Directory Interface)JAVA命名目录服务。 主要提供的功能是提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。 JMS(Java MessageService)JAVA消息服务。 主要实现各个应用程序之间的通讯。 包括点对点和广播。 JTA(Java TransactionAPI)JAVA事务服务。 提供各种分布式事务服务。 应用程序只需调用其提供的接口即可。 JAF(Java ActionFrameWork)JAVA安全认证框架。 提供一些安全控制方面的框架。 让开发者通过各种部署和自定义实现自己的个性安全控制策略。 RMI/IIOP:(Remote MethodInvocation/inter对象请求中介协议)他们主要用于通过远程调用服务。 例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。 当然这是要通过一定的规范才能在异构的系统之间进行通信。 RMI是JAVA特有的。 36、j2ee常用的设计模式?说明工厂模式。 Java中的23种设计模式Factory(工厂模式),Builder(建造模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),Adapter(适配器模式),Bridge(桥梁模式),Composite(合成模式),Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式),Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),Iterator(迭代子模式),Mediator(调停者模式),Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式),Chain OfResponsibleity(责任链模式)工厂模式工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。 首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。 然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。 当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。 37、EJB需直接实现它的业务接口或Home接口吗,请简述理由。 远程接口和Home接口不需要直接实现,他们的实现代码是由服务器产生的,程序运行中对应实现类会作为对应接口类型的实例被使用。 其实一直都不是很明白EJB的remote接口,home接口,Bean类究竟是如何使用的,或许应该进一步了解EJB的原理吧,查到了一个原创文章,那就说说EJB调用的原理吧。 其实在这个问题上,最需要理解的是RMI机制原理。 一个远程对象至少要包括4个class文件远程对象、远程对象接口、实现远程接口的对象的stub、对象的skeleton。 而在EJB中则至少要包括10个class:Bean类,特定App Server的Bean实现类Bean的remote接口,特定App Server的remote接口实现类,特定App Server的remote接口的实现类的stub类和skeleton类。 Bean的home接口,特定App Server的home接口实现类,特定App Server的home接口的实现类的stub类和skeleton类。 和RMI不同的是,EJB中这10个class真正需要用户写的只有3个,Bean类,remote接口,home接口,其它的7个究竟怎么生成,被打包在哪里,是否需要更多的类文件,否根据不同的App Server表现出较大的差异。 Weblogic home接口和remote接口的weblogic的实现类的stub类和skeleton类是在EJB被部署到weblogic的时候,由weblogic动态生成stub类和skeleton类的字节码,所以看不到这4个类文件。 对于一次客户端远程调用EJB,要经过两个远程对象的多次RMI循环。 首先是通过JNDI查找Home接口,获得Home接口的实现类,这个过程其实相当复杂,首先是找到Home接口的Weblogic实现类,然后创建一个Home接口的Weblogic实现类的stub类的对象实例,将它序列化传送给客户端(注意stub类的实例是在第1次RMI循环中,由服务器动态发送给客户端的,因此不需要客户端保存Home接口的Weblogic实现类的stub类),最后客户端获得该stub类的对象实例(普通的RMI需要在客户端保存stub类,而EJB不需要,因为服务器会把stub类的对象实例发送给客户端)。 客户端拿到服务器给它的Home接口的Weblogic实现类的stub类对象实例以后,调用stub类的create方法,(在代码上就是home.create(),但是后台要做很多事情),于是经过第2次RMI循环,在服务器端,Home接口的Weblogic实现类的skeleton类收到stub类的调用信息后,由它再去调用Home接口的Weblogic实现类的create方法。 在服务端,Home接口的Weblogic实现类的create方法再去调用Bean类的Weblogic实现类的ejbCreate方法,在服务端创建或者分配一个EJB实例,然后将这个EJB实例的远程接口的Weblogic实现类的stub类对象实例序列化发送给客户端。 客户端收到remote接口的Weblogic实现类的stub类的对象实例,对该对象实例的方法调用(在客户端代码中实际上就是对remote接口的调用),将传送给服务器端remote接口的Weblogic实现类的skeleton类对象,而skeleton类对象再调用相应的remote接口的Weblogic实现类,然后remote接口的Weblogic实现类再去调用Bean类的Weblogic实现类,如此就完成一次EJB对象的远程调用。 先拿普通RMI来说,有4个class,分别是远程对象,对象的接口,对象的stub类和skeleton类。 而对象本身和对象的stub类同时都实现了接口类。 而我们在客户端代码调用远程对象的时候,虽然在代码中操纵接口,实质上是在操纵stub类,例如接口类Hello远程对象Hello_Server stub类Hello_Stub skeleton类Hello_Skeleton客户端代码要这样写Hello h=new Hello_Stub();h.getString();我们不会这些写Hello_Stub h=new Hello_Stub();h.getString();因为使用接口适用性更广,就算更换了接口实现类,也不需要更改代码。 因此客户端需要Hello.class和Hello_Stub.class这两个文件。 但是对于EJB来说,就不需要Hello_Stub.class,因为服务器会发送给它,但是Hello.class文件客户端是省不了的,必须有。 表面上我们的客户端代码在操纵Hello,但别忘记了Hello只是一个接口,抽象的,实质上是在操纵Hello_Stub。 拿Weblogic上的EJB举例子,10个class分别是Bean类HelloBean(用户编写)Bean类的Weblogic实现类HelloBean_Impl(EJBC生成)Home接口HelloHome(用户编写)Home接口的Weblogic实现类HelloBean_HomeImpl(EJBC生成)Home接口的Weblogic实现类的stub类HelloBean_HomeImpl_WLStub(部署的时候动态生成字节码)Home接口的Weblogic实现类的skeleton类HelloBean_HomeImpl_WLSkeleton(部署的时候动态生成字节码)Remote接口Hello(用户编写)Remote接口的Weblogic实现类HelloBean_EOImpl(EJBC生成)Remote接口的Weblogic实现类的stub类HelloBean_EOImpl_WLStub(部署的时候动态生成字节码)Remote接口的Weblogic实现类的skeleton类HelloBean_EOImpl_WLSkeleton(部署的时候动态生成字节码)客户端只需要Hello.class和HelloHome.class这两个文件HelloHome home=(Home)PortableRemoteObjectnarrow(ctx.loolup(“Hello”),HelloHome.class);这一行代码是从JNDI获得Home接口,但是请记住!接口是抽象的,那么home这个对象到底是什么类的对象实例呢?很简单,用toString()输出看一下就明白了,下面一行是输出结果HelloBean_HomeImpl_WLStub18c458这表明home这个通过从服务器的JNDI树上查找获得的对象实际上是HelloBean_HomeImpl_WLStub类的一个实例。 接下来客户端代码Hello h=home create()同样Hello只是一个抽象的接口,那么h对象是什么东西呢?打印一下HelloBean_EOImpl_WLStub8fa0d1原来是HelloBean_EOImpl_WLStub的一个对象实例。 用这个例子来简述一遍EJB调用过程首先客户端JNDI查询,服务端JNDI树上Hello这个名字实际上绑定的对象是HelloBean_HomeImpl_WLStub,所以服务端将创建HelloBean_HomeImpl_WLStub的一个对象实例,序列化返回给客户端。 于是客户端得到home对象,表面上是得到HelloHome接口的实例,实际上是进行了一次远程调用得到了HelloBean_HomeImpl_WLStub类的对象实例,别忘记了HelloBean_HomeImpl_WLStub也实现了HelloHome接口。 然后home.create()实质上就是HelloBean_HomeImpl_WLStub.create(),该方法将发送信息给HelloBean_HomeImpl_WLSkeleton,而HelloBean_HomeImpl_WLSkeleton接受到信息后,再去调用HelloBean_HomeImpl的create方法,至此完成第1次完整的RMI循环。 注意在这次RMI循环过程中,远程对象是HelloBean_HomeImpl,远程对象的接口是HelloHome,对象的stub是HelloBean_HomeImpl_WLStub,对象的skeleton是HelloBean_HomeImpl_WLSkeleton。 然后HelloBean_HomeImpl再去调用HelloBean_Impl的ejbCreate方法,而HelloBean_Impl的ejbCreate方法将负责创建或者分配一个Bean实例,并且创建一个HelloBean_EOImpl_WLStub的对象实例。 这一步比较有趣的是,在前一步RMI循环中,远程对象HelloBean_HomeImpl在客户端有一个代理类HelloBean_HomeImpl_WLStub,但在这一步,HelloBean_HomeImpl自己却充当了HelloBean_Impl的代理类,只不过HelloBean_HomeImpl不在客户端,而是在服务端,因此不进行RMI。 然后HelloBean_EOImpl_WLStub的对象实例序列化返回给客户端,这一步也很有趣,上次RMI过程,主角是HelloBean_HomeImpl和它的代理类HelloBean_HomeImpl_WLStub,但这这一次换成了HelloBean_EOImpl和它的代理类HelloBean_EOImpl_WLStub来玩了。 Hello h=home.create();h.helloWorld();假设Hello接口有一个helloWorld远程方法,那么表面上是在调用Hello接口的helloWorld方法,实际上是在调用HelloBean_EOImpl_WLStub的helloWorld方法。 然后HelloBean_EOImpl_WLStub的helloWorld方法将发送信息给服务器上的HelloBean_EOImpl_WLSkeleton,而HelloBean_EOImpl_WLSkeleton收到信息以后,再去调用HelloBean_EOImpl的helloWorld方法。 至此,完成第2次完整的RMI循环过程在刚才HelloBean_EOImpl是作为远程对象被调用的,它的代理类是HelloBean_EOImpl_WLStub,但现在HelloBean_EOImpl要作为HelloBean_Impl的代理类了。 现在HelloBean_EOImpl去调用HelloBean_Impl的helloWorld方法。 注意!HelloBean_Impl继承了HelloBean,而HelloBean中的helloWorld方法是我们亲自编写的代码,现在终于调用到了我们编写的代码了!至此,一次EJB调用过程终于完成。 在整个过程中,服务端主要要调用的类是HelloBean_Impl,HelloBean_HomeImpl,HelloBean_HomeImpl_WLSkeleton,HelloBean_EOImpl,HelloBean_EOImpl_WLSkeleton。 客户端主要调用的类是HelloBean_HomeImpl_WLStub,HelloBean_EOImpl_WLStub,这两个类在客户端代码中并不会直接出现,出现在代码中的类是他们的接口HelloHome和Hello,因此客户端需要这两个接口文件,而Stub是服务器传送给他们的 38、说说在weblogic中开发消息Bean时的persistent与non-persisten的差别persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来,而nonpersistent方式的消息将被丢弃。 既然没有标准答案,就根据自己的所了解的,补充修正一下好了 39、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法Session Facade Pattern使用SessionBean访问EntityBean MessageFacadePattern实现异步调用EJB CommandPattern使用Command JavaBeans取代SessionBean,实现轻量级访问Data TransferObject Factory通过DTO Factory简化EntityBean数据提供特性Generic AttributeAess通过AttibuteAess接口简化EntityBean数据提供特性Business Interface通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致性架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。 项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。 40、Servlet执行时一般实现哪几个方法?public voidinit(ServletConfig config)public ServletConfiggetServletConfig()public StringgetServletInfo()public voidservice(ServletRequest request,ServletResponse response)public voiddestroy()init()方法在servlet的生命周期中仅执行一次,在服务器装载servlet时执行。 缺省的init()方法通常是符合要求的,不过也可以根据需要进行override,比如管理服务器端资源,一次性装入GIF图像,初始化数据库连接等,缺省的inti()方法设置了servlet的初始化参数,并用它的ServeltConfig对象参数来启动配置,所以覆盖init()方法时,应调用super.init()以确保仍然执行这些任务。 service()方法是servlet的核心,在调用service()方法之前,应确保已完成init()方法。 对于HttpServlet,每当客户请求一个HttpServlet对象,该对象的service()方法就要被调用,HttpServlet缺省的service()方法的服务功能就是调用与请求的方法相应的do功能,doPost()和doGet(),所以对于HttpServlet,一般都是重写doPost()和doGet()方法。 destroy()方法在servlet的生命周期中也仅执行一次,即在服务器停止卸载servlet时执行,把servlet作为服务器进程的一部分关闭。 缺省的destroy()方法通常是符合要求的,但也可以override,比如在卸载servlet时将统计数字保存在文件中,或是关闭数据库连接。 getServletConfig()方法返回一个servletConfig对象,该对象用来返回初始化参数和servletContext。 serv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB62-T 4393-2021 城镇生活污泥治理风蚀沙地技术规程
- 2025年icu专科试题及答案
- (2025年)急危重症护理学试题库+答案
- 2025年电气技能鉴定试题及答案
- 2025年院感技能大赛试题及答案
- 基层医疗面试题目及答案
- 农学专业相关试题及答案
- 2025年预科直升考试题目及答案
- 人员借用三方协议书范本5篇
- 2024年托育服务职业技能竞赛笔试题库资料及答案
- 2025年工地安全员培训考试试题及答案
- 文明有礼+课件-2025-2026学年统编版道德与法治八年级上册
- 供水设备运行维护与保养技术方案
- 木雕工艺课件
- 2025年2个清单28个问题查摆整改措施
- 摩擦力影响因素实验报告范本
- 教育系统应急知识培训课件
- 基坑防护课件
- 2025年黑龙江省龙东地区中考英语真题含答案
- 医疗器械生产质量管理规范2025版
- 2025年医护人员法律法规知识考试题库及答案(一)
评论
0/150
提交评论