《2022年框架面试题总结.doc》由会员分享,可在线阅读,更多相关《2022年框架面试题总结.doc(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Struts 篇1. Struts的工作流程当客户端向浏览器发送HTTP请求时,所有浏览器请求都被提交给ActionServlet处理。如果用户提交表单,则会将表单中的数据放入到ActionForm中。ActionServlet根据struts_config.xml文件中预先配置好的设置选择将请求转发到哪个action对象,action对象从actionForm对象中获取数据,但后调用业务逻辑组件,完成业务功能。2. Struts的工作流程分解 Web应用如果采用struts框架,在web应用启动时就会加载并初始化ActionServlet, ActionServlet从struts_conf
2、ig.xml文件中读取配置信息,基本执行步骤如下: (1) 所有浏览器请求都被提交给ActionServlet处理(2) ActionServlet根据struts_config.xml文件中预先配置好的设置,选择应该将请求转发到哪个action对象. (3) 当用户提交表单时,一个配置好的ActionForm对象将被创建,并被填入表单中的相当数据. (4) Action对象从ActionForm对象中获取数据. (5) Action对象调用业务逻辑组件完成业务功能. 3. Struts控制器组件的组成. 和控制器的主要功能Struts控制器组件主要包括:ActionServlet组件:充当S
3、truts框架的中央控制器. RequestRrocessor组件:充当每个子应用模块的请求处理器. Action组件:负责处理一项具体的业务. Struts控制器组件主要完成以下任务:l 接受用户请求. l 根据用户请求,调用合适的模型组件来执行相应的业务逻辑. l 获取业务逻辑执行结果. l 根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户. 4. Struts中的几个关键对象的作用(说说几个关键对象的作用)ActionServlet类控制导航流. ActionServlet根据URI来决定哪个Action类被用于处理请求,Action可以校验输入,并访问业务层以便从数据库检
4、索信息. Action需要知道页面提交了哪些内容,所以由ActionServlet根据请求URI来决定将请求参数绑定到哪个ActionForm中并传入Action. Action在完成业务逻辑后,返回一个ActionForward对象,ActionServlet根据ActionForward对象中的路径来调用页面完成响应. Struts将这些信息绑定在一个ActionMapping对象中,一个ActionMapping对应一个请求URI,当请求路径到达的时候,ActionServlet就会查询ActionMapping对象,ActionMapping对象将告诉ActionServlet哪个Ac
5、tion类会被调用,哪个ActionForm类被用于传递页面数据以及哪些ActionForward将被用于转向. 有关Action,ActionForm,ActionForward等信息,通过struts-config.xml配置文件来定义.5. Struts工作流程图(用例图) 注: Servlet 容器在启动时,或者用户首次请求ActionServlet时加载ActionServlet类. 6. 说说MVC设计模式和它的优点MVC是一种设计模式,.它强制性的把应用程序的输入,处理和输出分开.MVC把应用程序分成三个核心模块:模型(Model),视图(View)和控制器(Controller
6、).他们分别处理不同的任务. 视图是用户看到并与之交互的界面.视图向用户显示相关的数据,并能接受用户的输入数据,但是它不进行任何实际的业务处理. 模型是应用程序的主体部分.模型表示业务数据和业务逻辑.一个模型能为多个视图提供数据.由于同一个模型可以被多个视图重用,所以提高了应用的重用性. 控制器接受用户的输入并调用模型和视图去完成任务.MVC的处理逻辑如下: 首先控制器接受用户请求,并决定应该调用哪个模型来进行处理,然后模型根据用户请求进行相应的业务逻辑处理,并返回数据. 最后控制器调用相应的视图来格式化模型返回的诗句,并通过视图呈现给用户. MVC的优点:(1) 在MVC设计模式中,模型响应
7、用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性. (2) MVC的三个模块相互独立,改变其中的一个不会影响其他两个,所以根据这种设计思想能构造良好的松耦合的构件. (3) 控制器可以用来连接不同的模型和视图去完成用户的需求,也可以为构造应用程序提供强有力的手段.给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行处理,然后选择适当的视图将结果显示给用户. 7. 说说struts是如何实现MVC的 ?Struts采用JSP作为MVC的视图, 控制器由ActionServlet和Ac
8、tion类来实现. 控制器负责视图和模型之间的交互. 模型由实现业务逻辑的JavaBean或EJB组件构成, 然后说说Struts的工作流程. 8. Struts优点与缺点 Struts是开源软件,使开发者能更深入的了解其内部实现机制。 Struts 优点:业界标准(很多成功案例),学习资源丰富。 Struts的优点主要集中体现在两个方面:Taglib和页面导航。 a、利用Struts提供的taglib可以大大节约开发时间。 b、维护扩展比较方便。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。 c、表现与逻辑分离 d、表单验证解决了请求数据的验证问题,增强
9、了系统健壮性。 e、便于团队开发 Struts缺点:a、大量的使用标签,对于初学者难度较大。 b、ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)9 . strust的Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安全?如果是,说明原因不是. 为了确保action的线程安全, 最好的办法就是不要在action里定义实列变量.10. Tiles框架是什么?Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离。11. struts1.x 和struts 2 的区别本文将从Struts1和Struts2
10、的各个方面进行比较特征Struts 1 Struts 2Action类Struts1的action需要去继承一个抽象基类。一个普遍问题就是Struts1是面向抽象类编程来代替接口编程Struts2的action可以实现一个Action接口,也可以同时实现一些其他的接口来添置一些附加的,常用的服务。Struts2提供一个基类ActionSupport实现了一些常用的接口。虽然Action接口不是必须的。任何附带execute方法的POJO对象都可以作为Struts2的action对象。线程模型Struts1的action是单例的而且必须是线程安全的,因为该类会只有唯一一个引用来为action处理
11、所有的请求。单例策略会限制Struts1的action的功能以及需要扩展的额外的功能(The singleton strategy places restrictions on what can be done with Struts 1 Actions and requires extra care to develop)。Struts1的action必须是线程安全的并且是同步的。Struts2的Action对象是针对每一个请求的,所以自然也就不存在线程安全问题了。(实际上,)Servlet的依赖Struts1的Action依赖于Servlet API,因为当Action被调用的时候Http
12、ServletRequest和HttpServletResponse对象是通过execute方法进行处理的。Struts2的Action和容器的连接并不紧密。通常servlet上下文被描绘成简单的Map映射,允许Action被单独测试。当然,如果需要的话Struts2的Action也可以通过访问初始的request和response来完成一些功能。然而,其他的一些架构元素导致降低或者删除了直接访问request和response的需求。易测试性测试Struts1的Action有一个大障碍就是execute方法是直接暴露于servlet API的。Struts2的Action可以很容易的通过设置
13、属性调用方法来进行测试。当然依赖注入的支持也使得测试变得简单。输入处理Struts1使用一个ActionForm对象来获取用户的输入。和action一样,所有的ActionForm都必须继承自一个基类。因为其他的javaBean不能被用作ActionForm,开发者通常要写一些多余的类来获取用户输入。DynaBean可以被用做生成ActionForm类的一个选择,但是开发者需要对现有的javaBean进行重写。Struts2使用Action属性作为输入属性,除掉了对于输入对象的需求。输入属性可以是一个拥有他自己的属性的对象。Action属性是通过标签和web页面交互。Struts2也支持Act
14、ionForm模型,就是POJO的Form对象和POJO的Action。多数的对象类型,包括商业逻辑对象和领域对象都可以作为输入/输入对象。模式驱动特征简化了标签和POJO输入对象的关系。表达式语言Struts1和JSTL结合,所以他可以使用JSTL的EL。Struts2也支持JSTL,但是这个框架也支持更加强大的表达式语言OGNL表现层和类型值的绑定Struts1使用标准的JSP机制将对象绑定到page context来进行访问。Struts2使用”ValueStack”技术,所以标签不用将视图和表现的对象结合就可以得到值.ValueStack策略允许通过一系列可能具有相同属性名字但是不同属
15、性类型的的类型来完成视图的重用,类型转换Struts1的ActionForm通常都是String类型。Struts1通过Commons-Beanutils实现类型转换。Struts2使用OGNL实现类型转换,框架包含了对基础和公共类型的转换器。验证Struts1支持通过ActionForm中的validate方法实现手工验证。也可以通过扩展通用的验证框架进行验证。对于同一个类可以有不同的验证,但是不能关联到子对象的验证。Struts2也支持通过validate方法进行手工验证以及Xwork验证框架进行验证。Xwork验证框架支持将验证链接到子属性,子属性使用了为属性类型和验证上下文定义的验证。
16、Action执行的控制Struts1支持为每一个模块分配请求处理(生命周期),但是一个模块中的所有Action必须分享相同的生命周期。Struts2支持通过拦截器栈为每个Action创建不同的生命周期。通常对于不同的Action根据需要都要有对应的栈被创建和使用。12 . Struts 的常用标签库及用法常见的struts标签库有struts html 标签库,struts bean标签库, struts Logic标签库,Struts Template 标签库, Struts Nested 标签库.HTML 标签 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入
17、表单 Bean 标签 在访问JavaBeans 及其属性,以及定义一个新的bean 时使用Logic 标签 管理条件产生的输出和对象集产生的循环Template 标签 随着Tiles框架包的出现,此标记已开始减少使用Nested 标签 增强对其他的Struts 标签的嵌套使用的能力以下分别讲解struts标签库的用法.Struts html标签库:生成html 标签用法:标签的action属性用来指定当前用户提交表单后,处理用户请求的组件.生成html 标签该标签在表单上创建HTML文本框字段.用法:property:指定字段的名字生成html 标签这个标签在表单上生成隐藏字段.隐藏字段用于在
18、表单上存放不希望让用户看到或不允许修改的信息.生成html 标签标签生成表单的提交按钮用法:submit生成html 标签标签生成表单复位按钮用法:reset在表单上生成取消按钮标签用于生成表单取消按钮 用法:cancel:生成html 元素用于生成单选按钮用法:男女单选按钮需要确保property一样,只是value值不一样就可以了.:生成复选框 用法: 篮球足球乒乓球复选框按钮需要确保property一样,value的值不同就可以了.还需要注意的是复选框的值需要写在标签按钮的最后面的.如果应用中有多个Checkbox,并且希望ActionFrom Bean 中用单个数组表示,都可以采用.
19、的使用方法如下:(1) 在Action Form 中定义一个数组,用来存放checkBox的值,private String strArray =new String0;public String getStrArray() return this.strArray;public void SetStrArray(String strArray)this. StrArray = strArray;(2) 在表单中加入元素,通过设置property=”strArray” 来把它和ActionFrom Bean 关联.(3) 对于每个元素,设置它的初始值.value1下拉列表 用于生成html 元
20、素它可以在表单上创建下拉列表和多选列表用法:value1value2value3属性说明: size:指定每次在网页上显示的可选项的数目.Multibox:指定是否支持多项选择,如果设置为true,就表示多选列表.支持多项选择;否则表示下拉列表.只支持单项选择,默认为falseProperty属性:与action From中的某个属性相对应.这个属性用来存放用户在列表上选中的选项的值.标签生成html 元素,提供从html表单中上传文件的功能.标签可以方便的实现文件上传的功能.样列代码如下:提交使用标签要注意以下几点:(1) 标签必须嵌套在标签中(2) 标签的method属性必须设置为post
21、(3) 标签的编码类型emctype属性必须设置为” multipart/form-data”(4) 标签必须设置property属性,这个属性和ActionFrom Bean中的FormFile类型的属性对应.在ActiomForm中设置FormFile属性:在actionForm中设置一个名为file的属性,这个属性必须为org.apache.struts.upload.FormFile类型.代码如下:private FormFile file;public FormFile getFile()return this.file;public void setFile(FormFile fi
22、le)this.file=file上传下载的例子详细参见(My_JavaE 实例小例子upDownFile) 标签:用于输出错误消息.标签可以放在网页的任何地方,既可以位于HTML标签内,也可以位于HTML标签外,标签输出的错误消息和它在网页上的位置有关.标签具有以下重要的属性:name:指定ActionMessage对象存放在request或sessios范围内的属性key.标签处理类将根据这一属性的key来检索request或session范围的ActionMessage对象.默认值为Globals.ERROR_KEY.Property:指定消息的属性.如果此项没有设置,将显示Action
23、Messages对象中的所有的ActionMessage.Bundle:指定Resource Bundle(资源包) ,如果此项没有设置.将从应用默认的Resource Bundle 中获取消息文本. 关于标签的用法详见:精通struts p326_p328.错误消息的来源标签在request或session范围内寻找ActionMessages(或其子类ActionErrors)集合对象.在从ActionMessages集合对象读取ActionMessage对象,把ActionMessage包含的消息文本显示到网页上.在ActionForm Bean和Action类中都可以生成ActionM
24、essages对象.ActionForm Bean的validate() 方法执行表单验证,返回ActionErrors对象,Struts控制器组件RequestProcessor(请求处理器)然后把ActionErrors对象存放在request范围内,存放时的属性key为Globals.ERROR_KEY .以下是HtmlErrorForm 的validate() 方法:public ActionErrors validate(ActionMapping mapping ,HttpServletRequest request)ActionErrors errors = new Action
25、Errors();/如果复选筐被选中了,显示错误消息If(this,getCheckBox1()Errors.add(ActionMessages.Global_MESSAGE,.new ActionMessage(“error.global.fromform”);Errors.add(“checkbox1”,new ActionMessage(“error.checkbox”);retrun errors;在action类的execute()方法中可以进行数据逻辑验证,如果验证失败,将生成ActionMessages对象.以下是helloapp应用的LogonAction的execute()
26、方法; public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) ActionMessages errors = new ActionMessages();String userName=(String)(HelloForm)form).getUserName();String badUserName=”Monster”;If(userName.equalsIgnoreCase(badUserName)Er
27、rors.add(“userName”,new ActionMessage(“hello.dont.talk.to.monster”,badUserName);SaveErrors(request,errors);Return (new ActionForward(mapping.getInput();以上代码先创建了一个ActionMessages对象,它用来存放ActionMessage对象,最后调用Action基类的saveErrors()方法,saveErrors()方法把ActionMessages 对象保存在request范围内.标签:用于显示正常消息的代码如下: 标签有以下一些重
28、要属性:name:指定actionMessages对象存放在request或session范围内的key.,标签处理类将根据这一属性key来检索request或session范围的ActionMessages对象.Message属性:指定消息的来源.Id属性: 用来命名从消息集合中检索出的每个ActionMessage对象.它和标签的name属性匹配.Struts bean标签库标签用于输出Resource Bundle 种的一条消息.标签的bundle属性指定Resource Bundle 它和struts配置文件的元素的key属性匹配.如果没有设置bundle 属性,就采用默认的Resou
29、rce Bundle. 标签的key属性直接指定消息key. Bundle属性指明资源文件的struts-config.xml文件种的配置的key值.例如: (详细参照:精通struts p339) 标签标签用于在网页上输出某个Bean 或它的属性的内容.标签可以输出单个字符串,或责一个对象的某个属性,或责通过迭代器遍历集合的所有值 标签的name属性指定已经存在的变量.例如:在action中得到一个字符串的值,然后在页面上显示出来/得到定单状态(action中)String orderState=orderService.getOrderState(userOrderId);request.
30、setAttribute(orderState,orderState);/在界面上显示为(界面中)如果希望输出Bean的某个属性值,应该同时设置标签的name属性和property属性. Property属性指定Bean的属性.例如:/得到当前定单的购货人信息UserVO uVO =orderService.getUserbyOrderId(userOrderId);request.setAttribute(userVO,uVO);/在页面上显示购货人的信息 购货人姓名: 联系电话: 根据迭代器标签显示集合的所有内容/得到当前定单的所有商品的信息List list=orderSe
31、rvice.getWareByOrderId(userOrderId);request.setAttribute(wareList,list);/根据迭代器标签显示所有内容(界面层) Struts Logic标签库:判断变量中是否包含指定的常量字符串:判断变量中是否不包含指定变量的类和 标签 和标签判断指定变量是否为空字符串.例子: 以下代码先定义一个字符串变量emptyString ,它是空字符串.接下来标签判断emptyString变量是否为空 字符串.其判断结果为true.因此将执行标签主体的内容.the variable named emptyString is empty!标签是Lo
32、gic标签中最复杂的标签.也是用途最广的一个标签.它能够在一个循环中遍历数组,Collection,Enumeration,Iterator 或Map中的所有元素.一:遍历集合的name属性指定需要进行遍历的集合对象.它每次从集合中检索出一个元素,然后把它存放在page范围内.并以id属性指定的字符串来命名这个元素.例如:标签的length属性指定需要遍历的元素的数目,如果没有设置length属性,就遍历集合中的所有元素.offset属性指定开始遍历的起始位置,默认值为”0”,表示中集合的第一个元素开始遍历,indexId属性定义一个代表当前别遍历的元素序号的变量.整个变量存放在page范围内
33、.可以被标签主体的标签访问.例如:.以上代码输出的内容为:1. Cat2. Bird设置被遍历的变量设置name属性,name属性指定需要遍历的集合或map.例如:设置name属性和property属性,name属性指定一个javaBean,property属性指定javaBean的一个属性.这个属性为需要遍历的集合或map. 例如:.-设置collection 属性,collection属性指定一个运行时表达式,表达式的运算结果为需要遍历的集合或map.例如:logic:iterate id=”header” collection=”13、JSP中动态INCLUDE与静态INCLUDE的区别?动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 Ajax 篇1. ajax是什么 Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写。ajax不是一项新技术,只是多种技术的综合,或者是设计方式.包括javascript,xhtml和css,dom,xml和XSTL,xmlHttpRequest等技术.2. ajax实现的原理 ajax采用异步传输方式, 用户触发
限制150内