版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、* Struts 几个面试题收集1 说说Struts的优点、缺点Struts是开源软件,使开发者能更深入的了解其内部实现机制。Struts 优点:业界”标准”(很多成功案例),学习资源丰富。Struts的优点主要集中体现在两个方面:Taglib和页面导航。a、利用Struts提供的taglib可以大大节约开发时间。b、维护扩展比较方便。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。c、表现与逻辑分离d、表单验证解决了请求数据的验证问题,增强了系统健壮性。e、便于团队开发Struts缺点:a、大量的使用标签,对于初学者难度较大。b、ActionForms使用
2、不便、无法进行单元测试(StrutsTestCase只能用于集成)Struts提供了几个标签库?都是什么标签库?Struts提供了五个标签库,即:HTML、Bean、Logic、Template和Nested。HTML 标签 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单Bean 标签 在访问JavaBeans 及其属性,以及定义一个新的bean 时使用Logic 标签 管理条件产生的输出和对象集产生的循环Template 标签 随着Tiles框架包的出现,此标记已开始减少使用Nested 标签 增强对其他的Struts标签的嵌套使用的能力2 分析一下str
3、uts是如何实现MVC的。Struts采用jsp作为MVC的视图,由ActionServlet具体指定的action动作类作为控制器即MVC中的C,负责视图与模型之间的交互。控制器的每个入口点都由名为struts-config.xml的配置文件设置。该文件把来自视图的请求映射为特定的JAVA类以进行相应的处理,控制器还指定下一个视图的位置。Struts中的模型主要指的就是javabean,它是模型的代表,主要封装数据和业务逻辑。3 说说Struts的处理流程:控制器进行初始化工作,读取配置文件,为不同的Struts模块初始化相应的ModuleConfig对象。控制器接收Http请求,并从Act
4、ionConfig中找出对应于该请求的Action子类,如果没有对应的Action,控制器直接将请求转发给JSP或者静态页面,否则控制器将请求分发至具体的Action类进行处理。在控制器调用具体的Action的Execute方法之前,ActionForm对象将利用Http请求中的参数来填充自已。还可以在 ActionForm类中调用Validate方法来检查请求参数的合法性,并且可以返回一个包含所有错误信息的ActionErrors对象。执行具体的的Execute的方法,它负责执行相应的业务逻辑。执行完后,返回一个ActionForward对象,控制器通过该 ActionForward对象来进
5、行转发工作。也可以把Action要处理的业务逻辑封装在JavaBean中,如果系统中还有EJB,那么通过 JavaBean调用EJB以完成业务处理;如果没有EJB,那么就直接在JavaBean中连接数据库,进行数据库相关的操作。4 说说Struts几个关键对象的作用:Action、ActionServlet、ActionForm* Struts中DispatchAction和Action类有什么不同DispatchAction是Struts包含的另一个能大量节省开发时间的Action类。与其它Action类仅提供单个execute()方法实现单个业务不同,DispatchAction允许你在单
6、个Action类中编写多个与业务相关的方法。这样可以减少Action类的数量,并且把相关的业务方法集合在一起使得维护起来更容易。要使用DispatchAction的功能,需要自己创建一个类,通过继承抽象的DispatchAction得到。对每个要提供的业务方法必须有特定的方法signature。例如,我们想要提供一个方法来实现对购物车添加商品清单,创建了一个类ShoppingCartDispatchAction提供以下的方法:public ActionForward addItem(ActionMapping mapping, ActionForm form, HttpServletReque
7、st request, HttpServletResponse response)throws Exception;那么,这个类很可能还需要一个deleteItem()方法从客户的购物车中删除商品清单,还有clearCart()方法清除购物车等等。这时我们就可以把这些方法集合在单个Action类,不用为每个方法都提供一个Action类。在调用ShoppingCartDispatchAction里的某个方法时,只需在URL中提供方法名作为参数值。就是说,调用addItem()方法的 URL看起来可能类似于:http:/myhost/storefront/action/cart?method=ad
8、dItem其中method参数指定ShoppingCartDispatchAction中要调用的方法。参数的名称可以任意配置,这里使用的”method”只是一个例子。参数的名称可以在Struts配置文件中自行设定。* struts的控制器如何知道什么样的信息转发到什么样的Action类呢?在struts 中,控制器信息转发的配置映射信息是存储在特定的XML文件(比如struts-config.xml)中的。这些配置信息在系统启动的时候被读入内存,供struts framework在运行期间使用。在内存中,每一个元素都与org.apache.struts.action.ActionMapping
9、类的一个实例对应。当可以通过/logonAction.do(此处假设配置的控制器映射为*.do)提交请求信息的时候,控制器将信息委托com.test.LogonAction处理。调用LogonAction实例的execute()方法。同时将Mapping实例和所对应的LogonForm Bean信息传入。其中name=LogonForm,使用的form-bean元素所声明的ActionForm Bean。* 介绍一下struts的Action类ActionServlet把全部提交的请求都被控制器委托到RequestProcessor对象。RequestProcessor使用struts-con
10、fig.xml文件检查请求URI找到动作Action标示符。一个Action 类的角色,就像客户请求动作和业务逻辑处理之间的一个适配器(Adaptor),其功能就是将请求与业务逻辑分开。这样的分离,使得客户请求和Action类之间可以有多个点对点的映射。而且Action类通常还提供了其它的辅助功能,比如:认证(authorization)、日志(logging)和数据验证(validation)。Action最为常用的是execute()方法当Controller收到客户的请求的时候,在将请求转移到一个Action实例时,如果这个实例不存在,控制器会首先创建,然后会调用这个Action实例的e
11、xecute()方法。Struts Framework为应用系统中的每一个Action类只创建一个实例。因为所有的用户都使用这一个实例,所以你必须确定你的Action 类运行在一个多线程的环境中。* 介绍 一下struts的ActionServlet类ActionServlet继承自javax.servlet.http.HttpServlet类,其在Struts framework中扮演的角色是中心控制器。它提供一个中心位置来处理全部的终端请求。控制器ActionServlet主要负责将HTTP的客户请求信息组装后,根据配置文件的指定描述,转发到适当的处理器。按照Servelt的标准,所有得S
12、ervlet必须在web配置文件(web.xml)声明。同样,ActoinServlet必须在Web Application配置文件(web.xml)中描述,有关配置信息如下。actionorg.apache.struts.action.ActionServlet全部的请求URI以*.do的模式存在并映射到这个servlet,其配置如下:action*.do一个该模式的请求URI符合如下格式:http:/www.my_site_/mycontext/actionName.do中心控制器为所有的表示层请求提供了一个集中的访问点。这个控制器提供的抽象概念减轻了开发者建立公共应用系统
13、服务的困难,如管理视图、会话及表单数据。它也提供一个通用机制如错误及异常处理,导航,国际化,数据验证,数据转换等。当用户向服务器端提交请求的时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器获得了请求,其就会将请求信息传交给一些辅助类(help classes)处理。这些辅助类知道如何去处理与请求信息所对应的业务操作。在Struts中,这个辅助类就是org.apache.struts.action.Action。通常开发者需要自己继承Aciton类,从而实现自己的Action实例。* Struts中最核心的类和包有哪些?1. org.apache.struts.actio
14、n基本上,控制整个struts framework的运行的核心类、组件都在这个包中,比如我们上面提到的控制器ActionServlet。已经Action,ActionForm,ActionMapping等等。struts1.1比1.0多了 DynaActionForm 类。增加了动态扩展生成FormBean功能2. org.apache.struts.actions这个包是主要作用是提供客户的http请求和业务逻辑处理之间的特定适配器转换功能,而1.0版本中的部分动态增删FromBean的类,也在struts1.1中被Action包的DynaActionForm组件所取代3. org.apac
15、he.struts.config提供对配置文件struts-config.xml元素的映射。这也是sturts1.1中新增的功能4. org.apache.struts.utilStrtuts为了更好支持web application的应用,体统了一个些常用服务的支持,比如Connection Pool和Message Source。详细信息请参考/struts/api/org/apache/struts/util/package-summary.html5. org.apache.struts.taglib这不是一个包,而是是一个客户标签类的集
16、合。下面包括Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags这几个用于构建用户界面的标签类。6 . org.apache.struts.validatorStruts1.1 framework中增加了validator framework,用于动态的配置from表单的验证。* 如何配置struts + spring ?在struts-config.xml加入一个插件,通过它加载applicationContext.xml在struts-config.xml修改action-mapping标记,具体action交给了Delegate
17、ActionProxy通过DelegateActionProxy进入一spring的环境。u在spring的applicationContext.xml加入* Spring与struts的区别struts:是一种基于MVC模式的一个web层的处理。Spring:提供了通用的服务,ioc/di aop,关心的不仅仅web层,应当j2ee整体的一个服务,可以很容易融合不同的技术struts hibernate ibatis ejb remote springJDBC springMVC* 如何用struts实现国际化国际化:不用修改代码,就适用于不同的语言国家本地化:如果要适应一个国家,要修改源代
18、码实现过程:在struts-config.xml中用如下标签说明资源文件名,注意其只是文件名,没有语言_国家 在资源文件对应的目录struts中加入适应不同语言、国家的properties文件ApplicationResources_zh_CN.properties 中国ApplicationResources_en_US.properties us如果不是英语要转码native2ascii -encoding gb2312 源 ApplicationResources_zh_CN.properties在jsp页面中用取出信息如何实现struts的validate框架手动:public cla
19、ss myForm extends ActionFormpublic ActionErrors validate()actionErrors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage(”properties中的键名”);struts-config.xml中修改action的标签validate=trueinput=”错误页面”如果validate方法中的ActionErrors不为空且size0时会回到input页面。自动public class myForm extends ValidateForm不能覆盖validate方法。/pu
20、blic void validate()/在struts-config.xml文件中加入插件 修改validation.xml中的内容errors.required=0 is required.errors.minlength=0 can not be less than 1 characters.minlength6struts-config.xml中修改action的标签validate=trueinput=”/错误页面”* 如何在struts中配置数据源,在什么文件?用什么标签?如何取出DataSourceStruts-config.xml DataSource ds=(DataSour
21、ce)this.getServlet().getServletContext().getAttribute(”data”);Connection con=ds.getConnection();* Struts1 和 struts2有什么区别特性Struts1.xStruts2Action类Struts1.x要求Action类要扩展自一个抽象基类。Struts1.x的一个共有的问题是面向抽象类编程而不是面向接口编程。Struts2的Action类实现了一个Action接口,连同其他接口一起来实现可选择 和自定义的服务。Struts2提供一个名叫ActionSupport的基类来实现一般使用的接口
22、。当然,Action接口不是必须的。任何使用 execute方法的POJO对象可以被当作Struts 2的Action对象来使用。线程模型Struts1.x Action类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。Struts2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器给每一个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题)。Servlet 依赖Struts1.x的Action类依赖于servlet API,当Action被调用时,以
23、HttpServletRequest和HttpServletResponse作为参数传给execute方法。Struts2的Action和容器无关。Servlet上下文被表现为简单的Maps,允 许Action被独立的测试。Struts2的Action可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问 HttpServletRequest或HttpServletResponse。易测性测试Struts1.x的主要问题是execute方法暴露了Servlet API这使得测试要依赖于容器)。第三方的扩展,如Struts TestCase,提供了一套Struts1的模拟对象
24、(来进行测试)。Struts2的Action可以通过初始化、设置属性、调用方法来测试。依赖注入的支持也是测试变得更简单。捕获输入Struts1.x使用ActionForm对象来捕获输入。象Action一样,所有的 ActionForm必须扩展基类。因为其他的JavaBean不能作为ActionForm使用,开发者经常创建多余的类来捕获输入。 DynaBeans可以被用来作为替代ActionForm的类来创建。但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有 冗余的javabean)。Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输
25、入 属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm 模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。表达式语言Struts1.x整合JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是对集合和索引属性的支持很弱。Struts2使用JSTL,但是也支持一个更强大和灵活的表达式语言”Object Graph Notation Language” (OGNL)。将值绑定到页面Struts1
26、.x使用标准JSP机制来绑定对象到页面上下文。Struts2使用“ValueStack”技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。类型转换Struts1.x的ActionForm属性经常都是String。Struts 1.x使用Commons-Beanutils来进行类型转换。转换每一个类,而不是为每一个实例配置。Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。验证Struts1.x支持在ActionForm的validate方法中手动校验,或者通过Comm
27、ons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性Action执行控制Struts1.x支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。* Struts如何取得消息资源文件
28、的信息消息资源文件是一些简单的.properties文件,这些文件包含有可以被struts项目使用的消息信息,消息资源文件可以以标签的形式添加到struts-config.xml文件,例如* Struts如何基于validation.xml来启用客户端验证可以使用标签来进行基于validation.xml的客户端验证。 例如代码会按照validation.xml中的定义为logonForm生成客户端javascript代码。* 一组struts选择测试题包含答案(1)(1)在Struts应用的视图中包含哪些组件?(多选)选项:(A) JSP(B) Servlet(C) ActionServle
29、t(D) Action(E) 代表业务逻辑或业务数据的JavaBean(F) EJB(G) 客户化标签(2)在Struts应用的控制器中包含哪些组件?(多选)选项:(A) JSP(B) Servlet(C) ActionServlet(D) Action(E)代表业务逻辑或业务数据的JavaBean(F) EJB(G) 客户化标签(3)在Struts应用的模型中包含哪些组件?(多选)选项:(A) JSP(B) Servlet(C) ActionServlet(D) Action(E)代表业务逻辑或业务数据的JavaBean(F) EJB(G) 客户化标签(4)以下代码定义了一个变量,如何输出这
30、个变量的值?(多选)选项:(A)(B) (C)(D)(5)把静态文本放在Resource Bundle中,而不是直接在JSP文件中包含这些静态文本,有什么优点?(多选)A)提高可维护性B)提高可重用性C)支持国际化D)提高运行速度(6)以下哪些说法是正确的?(单选)选项:(A)每个HTTP请求对应一个单独的ActionServlet实例(B)对于每个请求访问HelloAction的HTTP请求,Struts框架会创建一个单独的HelloAction实例。(C)每个子应用对应一个单独的RequestProcessor实例(D)每个子应用对应一个单独的web.xml文件(7)下面哪些任务是Requ
31、estProcessor完成的?(多选)选项:(A)把Struts配置文件信息加载到内存中(B)把资源文件信息读入到内存中(C)如果需要的话,创建ActionForm实例,组装数据,并进行表单验证(D)找到匹配的Action实例,调用其execute()方法(E)把请求转发到Action的execute()方法返回的ActionForward代表的组件。(8)对于以下代码,HelloAction希望把请求转发给hello.jsp,在HelloAction的execute()方法中如何实现?(多选)选项:(A) return (new ActionForward(mapping.getInput
32、();(B) return (mapping.findForward(”SayHello”);(C) return (mapping.findForward(“hello.jsp”);(9)对于以下这段配置ActionServlet的代码,哪些说法是正确的?(多选)actionorg.apache.struts.action.ActionServletconfig/WEB-INF/myconfig.xml2action*.do选项:(A)Servlet容器在启动Struts应用时,会初始化这个ActionServlet。(B) 对于所有URL中以”.do”结尾的HTTP请求,都由ActionS
33、ervlet处理。(C) 这段代码位于struts-config.xml中。(D)这段代码位于web.xml中。(10) 问答题:MVC是什么含义?答案:(1)A,G (2)B,C,D (3)E,F (4)A,D (5)A,B,C (6)C (7)C,D,E (8)A,B (9)A,B,D(10)M表示Model(模型),V表示View(视图),C表示Controller(控制器)* 一组struts选择测试题包含答案(2)(1)假设在helloapp应用中有一个hello.jsp,它的文件路径如下:%CATALINA_HOME%/webapps/helloapp/hello/hello.js
34、p那么在浏览器端访问hello.jsp的URL是什么? (单选)选项:(A) http:/localhost:8080/hello.jsp(B) http:/localhost:8080/helloapp/hello.jsp(C) http:/localhost:8080/helloapp/hello/hello.jsp(2)假设在helloapp应用中有一个HelloServlet类,它位于org.javathinker包下,那么这个类的class文件应该放在什么目录下? (单选)选项:(A) helloapp/HelloServlet.class(B) helloapp/WEB-INF/H
35、elloServlet.class(C) helloapp/WEB-INF/classes/HelloServlet.class(D) helloapp/WEB-INF/classes/org/javathinker/HelloServlet.class(3)假设在helloapp应用中有一个HelloServlet类,它在web.xml文件中的配置如下: HelloServlet org.javathinker.HelloServlet HelloServlet /hello那么在浏览器端访问HelloServlet的URL是什么? (单选)选项:(A) http:/localhost:80
36、80/HelloServlet(B) http:/localhost:8080/helloapp/HelloServlet(C) http:/localhost:8080/helloapp/org/javathinker/hello(D) http:/localhost:8080/helloapp/hello(4)客户请求访问HTML页面与访问Servlet有什么异同?(多选)选项:(A)相同:都使用HTTP协议(B)区别:前者Web服务器直接返回HTML页面,后者Web服务器调用Servlet的方法,由Servlet动态生成HTML页面(C)相同:前者Web服务器直接返回HTML页面,后者W
37、eb服务器直接返回Servlet的源代码。(D)区别:后者需要在web.xml中配置URL路径。(E)区别:前者使用HTTP协议,后者使用RMI协议。(5)HttpServletRequest对象是由谁创建的?(单选)选项:(A)由Servlet容器负责创建,对于每个HTTP请求, Servlet容器都会创建一个HttpServletRequest对象(B)由JavaWeb应用的Servlet或JSP组件负责创建,当Servlet或JSP组件响应HTTP请求时,先创建HttpServletRequest对象(6)从HTTP请求中,获得请求参数,应该调用哪个方法? (单选)选项:(A)调用Htt
38、pServletRequest对象的getAttribute()方法(B)调用ServletContext对象的getAttribute()方法(C)调用HttpServletRequest对象的getParameter()方法(7)ServletContext对象是由谁创建的?(单选)选项:(A)由Servlet容器负责创建,对于每个HTTP请求, Servlet容器都会创建一个ServletContext对象(B)由JavaWeb应用本身负责为自己创建一个ServletContext对象(C)由Servlet容器负责创建,对于每个JavaWeb应用,在启动时,Servlet容器都会创建一个
39、ServletContext对象(8)jspForward1.jsp要把请求转发给jspForward2.jsp,应该在jspForward1.jsp中如何实现? (单选)选项:(A) jspForward2.jsp (B) (9)当浏览器第二次访问以下JSP网页时的输出结果是什么?(单选)a: b:选项:(A) a=0 b=0(B) a=1 b=1(c) a=2 b=1(10)下面哪个说法是正确的? (单选)选项:(A) 对于每个要求访问maillogin.jsp的HTTP请求,Servlet容器都会创建一个HttpSession对象(B)每个HttpSession对象都有惟一的ID。(C)
40、JavaWeb应用程序必须负责为HttpSession分配惟一的ID(11)如果不希望JSP网页支持Session,应该如何办? (单选)选项:(A) 调用HttpSession的invalidate()方法(B) (12)在标签处理类中,如何访问session范围内的共享数据? (多选)选项:(A)在TagSupport类中定义了session成员变量,直接调用它的getAttribute()方法即可。(B)在标签处理类TagSupport类中定义了pageContext成员变量,先通过它的getSession()方法获得当前的HttpSession对象,再调用HttpSession对象的g
41、etAttribute()方法。(C)pageContext.getAttribute(“attributename”,PageContext.SESSION_SCOPE)(13)在下面的选项中,哪些是TagSupport类的doStartTag()方法的有效返回值? (多选)选项:(A) Tag.SKIP_BODY(B) Tag.SKIY_PAGE(C) Tag.EVAL_BODY_INCLUDE(D) Tag.EVAL_PAGE(14)以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果?(单选)request.setAttribute(”count”,new Integer(0)
42、;Integer count = request.getAttribute(”count”);选项:A)不能编译通过 B)能编译通过,并正常运行C) 编译通过,但运行时抛出ClassCastException答案:(1)C (2)D (3)D (4)A,B,D (5)A (6)C (7)C (8)B (9)C (10)B(11)B (12)B,C (13)A,C (14)A* Struts + spring 面试题1.strutsAction是不是线程安全的?如果不是,有什么方式可以保证Action的线程安全?如果是,说明原因2.MVC,分析一下struts是如何实现MVC的3.struts中
43、的几个关键对象的作用(说说几个关键对象的作用)4.spring说说AOP和IOC的概念以及在spring中是如何应用的5.Hibernate有哪几种查询数据的方式6.load()和get()的区别回答:1.Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问
44、题)2.struts是用一组类,servlet 和jsp规范实现mvc的3.ActionFrom ActionServlet Action struts-config.xml4.spring的核心就是IOC,通过指定对象的创建办法,描述对象与服务之间的关系,而不生成对象5.3种,hql 条件查询() 原生sql6.load()方法认为该数据一定存在,可以放心的使用代理来延时加载 ,如果使用过程中发现了问题,就抛出异常;get()方法一定要获取到真实的数据,否则返回null* 如何提高struts2的性能关闭logging和开发模式(devMode), devMode是在pe
45、rties中设置的, 关闭logging需要修改web.xml文件,加入以下参数debug0detail02. 除非需要,否则不要使用拦截器(interceptor).3. 正确设置页面的Cache-Control 和 Expires4. struts2提供的Ajax theme(Dojo)或者Calendar标签默认情况下保存在struts.jar包里面, 把这些js文件或者css文件拷出来放到另外一个服务器上可以提高性能。5. 如果使用freemarker的话,在WEB-INF下的classes文件夹下创建一个perties并且加入template_update
46、_delay=60000, 这个值是freemarker多久从硬盘重新载入模板,默认情况下是500ms, 因为没有必要检查是不是需要重新载入模板文件,所以最好把它设置为一个很大的数字。6. 启用Freemarker 模板缓存, 这是struts.freemarker.templatesCache为true, 默认情况下这个是false的。7. 节省使用session, 不必要的话不要使用session.* 谈下SSH整合SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层)Struts:Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。在MVC
47、框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。(View:沿用JSP,HTTP,Form,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)Hibernate:Hibernate是一个持久层框架,它只负责与关系数据库的操作。Spring:Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层。* 你对MVC的理解,MVC有什么优缺点?结合一下struts,说明在一个Web应用中如何去使用MVC设计模式(应用观察者模式的框架模式)M: Model(Business proc
48、ess layer),模型,操作数据的业务处理层,并独立于表现层(Independent of presentation)。V: View(Presentation layer),视图,通过客户端数据类型显示数据,并回显模型层的执行结果。C: Controller(Control layer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图MVC框架的一种实现模型模型二(Servlet-centric):JSP+Servlet+JavaBean,以控制为核心,JSP只负责显示和收集数据,Sevlet,连接视图和模型,将视图层数据,发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人求职自荐信模板
- 2026年校园消防知识问答
- 2026年举办金融知识讲座进企业活动
- 2026年工地安全知识问答
- 2026年造价工程师考试重点突破讲义
- 2026年压疮管理规范及预防知识
- 2026年香道认证考试仿真题解析
- 2026年科学知识及文化普及活动
- 2026年高中教师资格证考试模拟题集
- 2026年灯彩维修师考试备考重点集
- 2025初二地理生物会考试卷及答案
- 皮带配料秤巡检知识培训
- 学堂在线 中国传统文化 章节测试答案
- 天津市红桥区2024-2025学年七年级下学期期末语文试题(含答案)
- 北京市朝阳区2024-2025学年高一下学期期末质量检测数学试题【含答案解析】
- DB4401∕T 152-2022 既有建筑幕墙安全检查技术规程
- 江苏省泰州市泰兴市2024-2025学年高一下学期期末调研测试化学试题(含答案)
- 潮汕文化英文介绍课件
- 量化投资方法测试题带答案
- 企业报关管理制度
- 人教版(2024)七年级下册英语Unit 7 A Day to Remember单元集体备课教案(共5课时)
评论
0/150
提交评论