2023年Java框架面试题总结_第1页
2023年Java框架面试题总结_第2页
2023年Java框架面试题总结_第3页
2023年Java框架面试题总结_第4页
2023年Java框架面试题总结_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录 Struts篇 41.Struts的工作流程 42.Struts的工作流程分解 43.Struts控制器组件的组成.和控制器的重要功能 44.Struts中的几个关键对象的作用(说说几个关键对象的作用) 45.Struts工作流程图(用例图) 56.说说MVC设计模式和它的优点 57.说说struts是如何实现MVC的? 68.Struts优点与缺陷 69.strust的Action是不是线程安全的?假如不是有什么方式可以保证Action的线程安 610.Tiles框架是什么? 611.struts1.x和struts2的区别 612.Struts的常用标签库及用法 8Strutshtml标签库 8Strutsbean标签库 12StrutsLogic标签库 1313、JSP中动态INCLUDE与静态INCLUDE的区别? 15 Ajax篇 151. ajax是什么 152. ajax实现的原理 163. ajax框架的基本流程 164. dwr的实现原理. 165. ajax开发环节. 16 Spring篇 16一. 基础知识 161. 对IOC的理解. 162. 依赖注入的三种实现形式? 173. Setter注入和构造方法注入比较 184. 对AOP的理解,以及AOP在项目中是如何使用的? 185. AOP的概念和术语 196. Spring中有五中不同的告知: 197. Springbean的生命周期: 198. Bean的作用域 199. Spring自动代理 2010. Spring事务特点 2011. 谈谈Spring事务的理解 2012. 编程式事务和声明式事务如何选择? 21二. Spring应用 2113. spring中的BeanFactory与ApplicationContext的作用和区别? 2114. Spring里面applicationContext.xml文献能不能改成其他文献名? 2215. spring中commons-logging.jar的作用 2216. spring中读取xml配置文献、获取bean的几种方式 2217. Spring启动参数contextConfigLocation和ContextLoaderListener理解 2318. Spring框架在web容器是如何启动的? 25 Hibernate篇 251. Hibernate优缺陷? 252. Hibernate工作原理及为什么要用? 263. Hibernate是如何延迟加载? 264. Hibernate中如何实现类之间的关系?(如:一对多、多对多的关系) 275. 说下Hibernate的缓存机制 276. 什么样的数据适合放到二级缓存中? 277. Hibernate的查询方式 288. 如何优化Hibernate? 289. 说说Hibernate中的update()和saveOrUpdate()的区别 2810. 说说Hibernate中的session的load()和get()的区别。 2811. 谈谈Hibernate中inverse的作用 2812. hibernate中对象的三种状态 2913. 在数据库中条件查询速度很慢的时候,如何优化? 2914. 在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之相应,如何解决这个问题? 29 iBatis篇 301. iBatis的优缺陷? 302. iBatis与Hibernate区别(比较)? 303. iBatis与传统JDBC比较 314. Hibernate和iBatis的映射关系 315. iBatis动态标签有哪些? 316. iBatis中使用like‘%#filedName#%’时,有什么问题? 327. iBatis中#与$的区别? 32 框架问题 321.SSH框架的配置文献加载顺序. 322.Spring框架在web容器是如何启动的? 333.Webservice+spring2.0+iBatis项目的加载顺序. 334. appfuse框架机制. 335. iBatis与Hibernate如何选择? 33参考:iBatis与Hibernate比较。 33Struts篇1.Struts的工作流程当客户端向浏览器发送HTTP请求时,所有浏览器请求都被提交给ActionServlet解决。假如用户提交表单,则会将表单中的数据放入到ActionForm中。ActionServlet根据struts_config.xml文献中预先配置好的设立选择将请求转发到哪个action对象,action对象从actionForm对象中获取数据,但后调用业务逻辑组件,完毕业务功能。2.Struts的工作流程分解Web应用假如采用struts框架,在web应用启动时就会加载并初始化ActionServlet,ActionServlet从struts_config.xml文献中读取配置信息,基本执行环节如下:所有浏览器请求都被提交给ActionServlet解决ActionServlet根据struts_config.xml文献中预先配置好的设立,选择应当将请求转发到哪个action对象.当用户提交表单时,一个配置好的ActionForm对象将被创建,并被填入表单中的相称数据.Action对象从ActionForm对象中获取数据.Action对象调用业务逻辑组件完毕业务功能.3.Struts控制器组件的组成.和控制器的重要功能 Struts控制器组件重要涉及:ActionServlet组件:充当Struts框架的中央控制器.RequestRrocessor组件:充当每个子应用模块的请求解决器.Action组件:负责解决一项具体的业务.Struts控制器组件重要完毕以下任务:接受用户请求.根据用户请求,调用合适的模型组件来执行相应的业务逻辑.获取业务逻辑执行结果.根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户.4.Struts中的几个关键对象的作用(说说几个关键对象的作用)ActionServlet类控制导航流.ActionServlet根据URI来决定哪个Action类被用于解决请求,Action可以校验输入,并访问业务层以便从数据库检索信息.Action需要知道页面提交了哪些内容,所以由ActionServlet根据请求URI来决定将请求参数绑定到哪个ActionForm中并传入Action.Action在完毕业务逻辑后,返回一个ActionForward对象,ActionServlet根据ActionForward对象中的途径来调用页面完毕响应.Struts将这些信息绑定在一个ActionMapping对象中,一个ActionMapping相应一个请求URI,当请求途径到达的时候,ActionServlet就会查询ActionMapping对象,ActionMapping对象将告诉ActionServlet哪个Action类会被调用,哪个ActionForm类被用于传递页面数据以及哪些ActionForward将被用于转向.有关Action,ActionForm,ActionForward等信息,通过struts-config.xml配置文献来定义.5.Struts工作流程图(用例图)注:Servlet容器在启动时,或者用户初次请求ActionServlet时加载ActionServlet类.6.说说MVC设计模式和它的优点MVC是一种设计模式,.它强制性的把应用程序的输入,解决和输出分开.MVC把应用程序提成三个核心模块:模型(Model),视图(View)和控制器(Controller).他们分别解决不同的任务.视图是用户看到并与之交互的界面.视图向用户显示相关的数据,并能接受用户的输入数据,但是它不进行任何实际的业务解决.模型是应用程序的主体部分.模型表达业务数据和业务逻辑.一个模型能为多个视图提供数据.由于同一个模型可以被多个视图重用,所以提高了应用的重用性.控制器接受用户的输入并调用模型和视图去完毕任务.MVC的解决逻辑如下:一方面控制器接受用户请求,并决定应当调用哪个模型来进行解决,然后模型根据用户请求进行相应的业务逻辑解决,并返回数据.最后控制器调用相应的视图来格式化模型返回的诗句,并通过视图呈现给用户.MVC的优点:在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表达层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性.MVC的三个模块互相独立,改变其中的一个不会影响其他两个,所以根据这种设计思想能构造良好的松耦合的构件.控制器可以用来连接不同的模型和视图去完毕用户的需求,也可认为构造应用程序提供强有力的手段.给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行解决,然后选择适当的视图将结果显示给用户.7.说说struts是如何实现MVC的?Struts采用JSP作为MVC的视图,控制器由ActionServlet和Action类来实现.控制器负责视图和模型之间的交互.模型由实现业务逻辑的JavaBean或EJB组件构成,然后说说Struts的工作流程.8.Struts优点与缺陷

Struts是开源软件,使开发者能更进一步的了解其内部实现机制。

Struts优点:业界"标准"(很多成功案例),学习资源丰富。

Struts的优点重要集中体现在两个方面:Taglib和页面导航。

a、运用Struts提供的taglib可以大大节约开发时间。

b、维护扩展比较方便。通过一个配置文献,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。

c、表现与逻辑分离

d、表单验证解决了请求数据的验证问题,增强了系统健壮性。

e、便于团队开发

Struts缺陷:a、大量的使用标签,对于初学者难度较大。

b、ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)9.strust的Action是不是线程安全的?假如不是有什么方式可以保证Action的线程安全?假如是,说明因素不是.为了保证action的线程安全,最佳的办法就是不要在action里定义实列变量.10.Tiles框架是什么?Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离。11.struts1.x和struts2的区别本文将从Struts1和Struts2的各个方面进行比较特性Struts1Struts2Action类Struts1的action需要去继承一个抽象基类。一个普遍问题就是Struts1是面向抽象类编程来代替接口编程Struts2的action可以实现一个Action接口,也可以同时实现一些其他的接口来添置一些附加的,常用的服务。Struts2提供一个基类ActionSupport实现了一些常用的接口。虽然Action接口不是必须的。任何附带execute方法的POJO对象都可以作为Struts2的action对象。线程模型Struts1的action是单例的并且必须是线程安全的,由于该类会只有唯一一个引用来为action解决所有的请求。单例策略会限制Struts1的action的功能以及需要扩展的额外的功能(ThesingletonstrategyplacesrestrictionsonwhatcanbedonewithStruts1Actionsandrequiresextracaretodevelop)。Struts1的action必须是线程安全的并且是同步的。Struts2的Action对象是针对每一个请求的,所以自然也就不存在线程安全问题了。(事实上,)Servlet的依赖Struts1的Action依赖于ServletAPI,由于当Action被调用的时候HttpServletRequest和HttpServletResponse对象是通过execute方法进行解决的。Struts2的Action和容器的连接并不紧密。通常servlet上下文被描绘成简朴的Map映射,允许Action被单独测试。当然,假如需要的话Struts2的Action也可以通过访问初始的request和response来完毕一些功能。然而,其他的一些架构元素导致减少或者删除了直接访问request和response的需求。易测试性测试Struts1的Action有一个大障碍就是execute方法是直接暴露于servletAPI的。Struts2的Action可以很容易的通过设立属性调用方法来进行测试。当然依赖注入的支持也使得测试变得简朴。输入解决Struts1使用一个ActionForm对象来获取用户的输入。和action同样,所有的ActionForm都必须继承自一个基类。由于其他的javaBean不能被用作ActionForm,开发者通常要写一些多余的类来获取用户输入。DynaBean可以被用做生成ActionForm类的一个选择,但是开发者需要对现有的javaBean进行重写。Struts2使用Action属性作为输入属性,除掉了对于输入对象的需求。输入属性可以是一个拥有他自己的属性的对象。Action属性是通过标签和web页面交互。Struts2也支持ActionForm模型,就是POJO的Form对象和POJO的Action。多数的对象类型,涉及商业逻辑对象和领域对象都可以作为输入/输入对象。模式驱动特性简化了标签和POJO输入对象的关系。表达式语言Struts1和JSTL结合,所以他可以使用JSTL的EL。Struts2也支持JSTL,但是这个框架也支持更加强大的表达式语言OGNL表现层和类型值的绑定Struts1使用标准的JSP机制将对象绑定到pagecontext来进行访问。Struts2使用”ValueStack”技术,所以标签不用将视图和表现的对象结合就可以得到值.ValueStack策略允许通过一系列也许具有相同属性名字但是不同属性类型的的类型来完毕视图的重用,类型转换Struts1的ActionForm通常都是String类型。Struts1通过Commons-Beanutils实现类型转换。Struts2使用OGNL实现类型转换,框架包含了对基础和公共类型的转换器。验证Struts1支持通过ActionForm中的validate方法实现手工验证。也可以通过扩展通用的验证框架进行验证。对于同一个类可以有不同的验证,但是不能关联到子对象的验证。Struts2也支持通过validate方法进行手工验证以及Xwork验证框架进行验证。Xwork验证框架支持将验证链接到子属性,子属性使用了为属性类型和验证上下文定义的验证。Action执行的控制Struts1支持为每一个模块分派请求解决(生命周期),但是一个模块中的所有Action必须分享相同的生命周期。Struts2支持通过拦截器栈为每个Action创建不同的生命周期。通常对于不同的Action根据需要都要有相应的栈被创建和使用。12.Struts的常用标签库及用法 常见的struts标签库有strutshtml标签库,strutsbean标签库,strutsLogic标签库,StrutsTemplate标签库,StrutsNested标签库.HTML标签

用来创建可以和Struts框架和其他相应的HTML标签交互的HTML输入表单

Bean标签

在访问JavaBeans及其属性,以及定义一个新的bean时使用

Logic标签

管理条件产生的输出和对象集产生的循环

Template标签

随着Tiles框架包的出现,此标记已开始减少使用

Nested标签

增强对其他的Struts标签的嵌套使用的能力以下分别讲解struts标签库的用法.Strutshtml标签库<html:form>:生成html<form>标签 用法:<html:formaction=”checkAction.do”></html:form> <html:form>标签的action属性用来指定当前用户提交表单后,解决用户请求的组件.<html:text>生成html<inputtype=”text”>标签 该标签在表单上创建HTML文本框字段. 用法:<html:textproperty=”userName”> property:指定字段的名字<html:hidden>生成html<inputtype=”hidden”>标签 这个标签在表单上生成隐藏字段.隐藏字段用于在表单上存放不希望让用户看到或不允许修改的信息.<html:submit>生成html<inputtype=”submit”>标签 <html:submit>标签生成表单的提交按钮用法:<html:submit>submit<html:submit><html:reset>生成html<formtype=”reset”>标签 <html:reset>标签生成表单复位按钮用法:<html:reset>reset</html:reset><html:cancel>在表单上生成取消按钮 <html:cancel>标签用于生成表单取消按钮 用法:<html:cancel>cancel</html:cancel><html:radio>:生成html<inputtype=”radio”>元素 <html:radio>用于生成单选按钮 用法:<html:radioproperty=”sex”value=”1”>男</html:radio> <html:radioproperty=”sex”value=”0”>女</html:radio> 单选按钮需要保证property同样,只是value值不同样就可以了.<html:multibox>:生成复选框<inputtype=”checkBox”> 用法:<html:multiboxproperty="fav"value="1"></html:multibox>篮球 <html:multiboxproperty="fav"value="2"></html:multibox>足球 <html:multiboxproperty="fav"value="3"></html:multibox>乒乓球 复选框按钮需要保证property同样,value的值不同就可以了.还需要注意的是复选框的值需要写在标签按钮的最后面的. 假如应用中有多个Checkbox,并且希望ActionFromBean中用单个数组表达,都可以采用<html:multibox>.<html:multibox>的使用方法如下:在ActionForm中定义一个数组,用来存放checkBox的值,privateStringstrArray[]=newString[0];publicStringgetStrArray(){ returnthis.strArray;}publicvoidSetStrArray(StringstrArray){ this.StrArray=strArray;}在表单中加入<html:multibox>元素,通过设立property=”strArray”来把它和ActionFromBean关联.对于每个<html:multibox>元素,设立它的初始值.<html:multiboxproperty="strArray"value="1"></html:multibox>value1<html:select>下拉列表用于生成html<select>元素它可以在表单上创建下拉列表和多选列表用法:<html:selectproperty=”colors”size=”7”multibox=”false”> <html:optionvalue=”1”>value1</html:option> <html:optionvalue=”2”>value2</html:option> <html:optionvalue=”3”>value3</html:option> </html:select>属性说明:size:指定每次在网页上显示的可选项的数目.Multibox:指定是否支持多项选择,假如设立为true,就表达多选列表.支持多项选择;否则表达下拉列表.只支持单项选择,默认为falseProperty属性:与actionFrom中的某个属性相相应.这个属性用来存放用户在列表上选中的选项的值.<html:file>标签生成html<inputtype=”file”>元素,提供从html表单中上传文献的功能.<html:file>标签可以方便的实现文献上传的功能.样列代码如下:<html:formaction="/upload.do"method=”post”enctype="multipart/form-data"> <html:fileproperty="file"/></br> <html:submit>提交</html:submit></html:form>使用<html:file>标签要注意以下几点:<html:file>标签必须嵌套在<html:form>标签中<html:form>标签的method属性必须设立为post<html:form>标签的编码类型emctype属性必须设立为”multipart/form-data”<html:file>标签必须设立property属性,这个属性和ActionFromBean中的FormFile类型的属性相应.在ActiomForm中设立FormFile属性:在actionForm中设立一个名为file的属性,这个属性必须为org.apache.struts.upload.FormFile类型.代码如下:privateFormFilefile;publicFormFilegetFile(){ returnthis.file;}publicvoidsetFile(FormFilefile){ this.file=file}上传下载的例子具体参见(My_Java\E实例\小例子\upDownFile)<html:errors>标签:用于输犯错误消息. <html:errors>标签可以放在网页的任何地方,既可以位于HTML标签内,也可以位于HTML标签外,<html:errors>标签输出的错误消息和它在网页上的位置有关.<html:errors>标签具有以下重要的属性:name:指定ActionMessage对象存放在request或sessios范围内的属性key.标签解决类将根据这一属性的key来检索request或session范围的ActionMessage对象.默认值为Globals.ERROR_KEY.Property:指定消息的属性.假如此项没有设立,将显示ActionMessages对象中的所有的ActionMessage.Bundle:指定ResourceBundle(资源包),假如此项没有设立.将从应用默认的ResourceBundle中获取消息文本.[关于<html:errors>标签的用法详见:精通strutsp326_p328].错误消息的来源<html:errors>标签在request或session范围内寻找ActionMessages(或其子类ActionErrors)集合对象.在从ActionMessages集合对象读取ActionMessage对象,把ActionMessage包含的消息文本显示到网页上..在ActionFormBean和Action类中都可以生成ActionMessages对象.ActionFormBean的validate()方法执行表单验证,返回ActionErrors对象,Struts控制器组件RequestProcessor(请求解决器)然后把ActionErrors对象存放在request范围内,存放时的属性key为Globals.ERROR_KEY.以下是HtmlErrorForm的validate()方法:publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest){ ActionErrorserrors=newActionErrors(); //假如复选筐被选中了,显示错误消息 If(this,getCheckBox1()){Errors.add(ActionMessages.Global_MESSAGE,.newActionMessage(“error.global.fromform”));Errors.add(“checkbox1”,newActionMessage(“error.checkbox”));}retrunerrors;}在action类的execute()方法中可以进行数据逻辑验证,假如验证失败,将生成ActionMessages对象.以下是helloapp应用的LogonAction的execute()方法;publicActionForwardexecute( ActionMappingmapping, ActionFormform, HttpServletRequestrequest, HttpServletResponseresponse){ ActionMessageserrors=newActionMessages(); StringuserName=(String)((HelloForm)form).getUserName(); StringbadUserName=”Monster”; If(userName.equalsIgnoreCase(badUserName)){ Errors.add(“userName”,newActionMessage(“hello.don’t.talk.to.monster”,badUserName)); SaveErrors(request,errors); Return(newActionForward(mapping.getInput()));} }以上代码先创建了一个ActionMessages对象,它用来存放ActionMessage对象,最后调用Action基类的saveErrors()方法,saveErrors()方法把ActionMessages对象保存在request范围内.<html:message>标签:用于显示正常消息的代码如下:<html:messagesid=”message”message=”true”> <td><bean:writename=”message”/></td></html:messages><html:messages>标签有以下一些重要属性:name:指定actionMessages对象存放在request或session范围内的key.,标签解决类将根据这一属性key来检索request或session范围的ActionMessages对象.Message属性:指定消息的来源.Id属性:用来命名从消息集合中检索出的每个ActionMessage对象.它和<bean:write>标签的name属性匹配.Strutsbean标签库<bean:message>标签用于输出ResourceBundle种的一条消息.<bean:message>标签的bundle属性指定ResourceBundle它和struts配置文献的<message-resource>元素的key属性匹配.假如没有设立bundle属性,就采用默认的ResourceBundle.<bean:message>标签的key属性直接指定消息key.Bundle属性指明资源文献的struts-config.xml文献种的配置的key值.例如:<bean:messagebundle=”special”key=”hello”>(具体参照:精通strutsp339)<bean:write>标签<bean:write>标签用于在网页上输出某个Bean或它的属性的内容.<bean:write>标签可以输出单个字符串,或责一个对象的某个属性,或责通过迭代器遍历集合的所有值<bean:write>标签的name属性指定已经存在的变量.例如:在action中得到一个字符串的值,然后在页面上显示出来 //得到定单状态(action中) StringorderState=orderService.getOrderState(userOrderId); request.setAttribute("orderState",orderState); //在界面上显示为(界面中) <bean:writename="orderState"/>假如希望输出Bean的某个属性值,应当同时设立<bean:write>标签的name属性和property属性.Property属性指定Bean的属性.例如: //得到当前定单的购货人信息 UserVOuVO=orderService.getUserbyOrderId(userOrderId); request.setAttribute("userVO",uVO); //在页面上显示购货人的信息 <tablewidth="96%"height="80"cellpadding="0"cellspacing="0"><tr><tdalign="right"width="20%">购货人姓名:</td><td><bean:writename="userVO"property="userName"/></td><tdwidth="20%"> </td><tdalign="right"width="20%">联系电话:</td><td><bean:writename="userVO"property="userTelephone"/></td></tr></table>根据迭代器标签显示集合的所有内容 //得到当前定单的所有商品的信息 Listlist=orderService.getWareByOrderId(userOrderId); request.setAttribute("wareList",list); //根据迭代器标签显示所有内容(界面层)<logic:iterateid="ware"name="wareList"><tr><tdwidth="14%"><bean:writename="ware"property="userOrderId"/></td><tdwidth="14%"><bean:writename="ware"property="wareId"/></td><tdwidth="15%"><bean:writename="ware"property="name"/></td><tdwidth="14%"><bean:writename="ware"property="typeName"/></td></tr></logic:iterate>StrutsLogic标签库<logic:match>:判断变量中是否包含指定的常量字符串<logic:notMatch>:判断变量中是否不包含指定变量的类<logic:empty>和<logic:notEmpty>标签<logic:empty>和<logic:notEmpty>标签判断指定变量是否为空字符串.例子:以下代码先定义一个字符串变量emptyString,它是空字符串.接下来<logic:empty>标签判断emptyString变量是否为空字符串.其判断结果为true..因此将执行标签主体的内容.<% request.setAttribute(“emptyString”,””);%><logic:emptyname=”emptyString”> thevariablenamedemptyStringisempty!</logic:empty><logic:iterate>标签是Logic标签中最复杂的标签.也是用途最广的一个标签.它可以在一个循环中遍历数组,Collection,Enumeration,Iterator或Map中的所有元素.一:遍历集合 <logic:iterate>的name属性指定需要进行遍历的集合对象.它每次从集合中检索出一个元素,然后把它存放在page范围内.并以id属性指定的字符串来命名这个元素.例如:<% Vectoranimals=newVertor(); animals.addElement(“Dog”); animals.addElement(“Cat”); animals.addElement(“Bird”); animals.addElement(“Chick”); Request.setAttibute(“Animals”,animals);%> <logic:iterateid=”element”name=”Animals”> <bean:writename=”element”></logic:iterate><logic:iterate>标签的length属性指定需要遍历的元素的数目,假如没有设立length属性,就遍历集合中的所有元素.offset属性指定开始遍历的起始位置,默认值为”0”<logic:iterateid=”ilement”indexId=”index”name=”Animals”offset=”1”length=”2 <bean:writename=”index”>.<bean:writename=”element”></br></logic:iterate>以上代码输出的内容为:CatBird设立被遍历的变量设立name属性,name属性指定需要遍历的集合或map.例如:<logic:iteratename=”Animals”id=”element”> <bean:writename=”element”/><br/></logic>设立name属性和property属性,name属性指定一个javaBean,property属性指定javaBean的一个属性.这个属性为需要遍历的集合或map.例如:<logic:iterateid=”element”name=”Aninals”indexId=”ind”> <bean:writename=”ind”>.<bean:writename=”element”property=”key”><br/> <logic:iterateid=”elementValue”name=”element”property=”value”length=”3”offset=”1 <bean:writename=”elementValue”> </logic:iterate></logic:iterate>设立collection属性,collection属性指定一个运营时表达式,表达式的运算结果为需要遍历的集合或map.例如:<logic:iterateid=”header”collection=”<%=request.getHeaderNames%>”> <bean:writename=”header”/><br/></logic:iterate>13、JSP中动态INCLUDE与静态INCLUDE的区别?动态INCLUDE用jsp:include动作实现<jsp:includepage="included.jsp"flush="true"/>它总是会检查所含文献中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE用include伪码实现,定不会检查所含文献的变化,合用于包含静态页面<%@includefile="included.htm"%>Ajax篇ajax是什么Ajax是AsynchronousJavaScriptandXML(以及DHTML等)的缩写。ajax不是一项新技术,只是多种技术的综合,或者是设计方式.涉及javascript,xhtml和css,dom,xml和XSTL,xmlHttpRequest等技术.ajax实现的原理 ajax采用异步传输方式,用户触发事件和向服务器发起请求是在一个线程上.Ajax重要是通过XMLHTTPRequest对象调用服务端方法,然后将服务端返回的数据显示在客户端.ajax框架的基本流程对象初始化发送请求服务器接受服务器返回--.>客户端接受修改客户端页面内容。dwr的实现原理.Dwr是ajax的开源框架。dwr包含两个重要部分:其一是运营在浏览器客户端的javascript,这部分被用来与服务端通信,并更新页面内容;其二是运营在服务器端的javaservlet,这部分用来解决请求将响应结构发送给浏览器.ajax开发环节.初始化xmlHttpRequest对象.设立xmlHttpRequest对象的onreadystatechange属性,指定服务器返回响应数据时要调用的回调函数.即指定相应解决函数.调用xmlHttpRequest对象的open方法创建http请求.调用xmlHttpRequest对象的setResourceHeader等方法,设立必要的http请求头信息.调用xmlHttpRequest对象的send方法,发送之前创建的http请求.根据xmlHttpRequest对象的open方法参数,决定等待或者不等到服务器返回响应数据,假如服务器返回响应数据,则将控制权交给之前设立的回调函数.Spring篇基础知识对IOC的理解.IOC的全称是:InversionofControl(即:控制反转).理解:在传统的应用程序中,控制权在应用程序自身,程序的控制流程完全由开发者控制。在IOC容器中,控制权发生了反转:从应用程序转移到了IOC容器。组件不再由应用程序负责创建和配置,而是由IOC容器负责,应用程序只需要直接使用已经创建并配置好的组件。为了让组件能在IOC容器中被“装配”出来,需要某种“注入”的机制,才干将一种组件“注入”到另一种组件中。简朴来说,依赖注入解决了最重要的问题:将组件的配置与使用相分离,并且由IoC容器负责管理组件的生命周期。简朴来说:控制反转就是由容器控制程序之间的(依赖)关系.依赖注入的三种实现形式?接口注入(InterfaceInjection)说明:通过实现一个接口来实现对依赖对象的注入.设值方法注入(Setter注入).说明:对象创建之后,将被依赖对象通过set方法设立进去.构造方法注入(Constructorinjection).说明:对象创建时,被依赖对象以构造方法参数的方式注入.说明:Spring两种依赖注入的类型分别是setter注入和构造方法注入。setter注入:一般情况下所有的javabean,我们都会使用setter方法和getter方法去设立和获取属性的值,示例如下:publicclassnamebean{Stringname;publicvoidsetName(Stringa){name=a;}publicStringgetName(){returnname;}}我们会创建一个bean的实例然后设立属性的值,spring的配置文献如下:<beanid=”bean1″><propertyname=”name”><value>tom</value></property></bean>Spring会调用setName方法来只是name熟悉为tom构造方法注入:构造方法注入中,我们使用带参数的构造方法如下:publicclassnamebean{Stringname;publicnamebean(Stringa){name=a;}}我们会在创建bean实例的时候以newnamebean(“tom”)的方式来设立name属性,Spring配置文献如下:<beanid=”bean1″><constructor-arg><value>MyBeanValue</value></constructor-arg></bean>使用constructor-arg标签来设立构造方法的参数。Setter注入和构造方法注入比较Setter注入的优点:(1)与传统的JavaBean的写法更相似,程序员更容易理解、接受,通过setter方式设定依赖关系显得更加直观、明显;(2)对于复杂的依赖关系,假如采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化其依赖的所有实例,因而导致死你功能下降。而使用设立注入,则避免这下问题;特别在某些属性可选的情况下,多参数的构造器更加笨拙。构造注入的优点:(1)构造注入可以再构造器中决定依赖关系的注入顺序,优先依赖的优先注入。(2)对于依赖关系无须变化的Bean,构造注入更有用处;由于没有setter方法,所有的依赖关系所有在构造器内设定,因此,不用紧张后续代码对依赖关系的破坏。(3)依赖关系只能在构造器中设定,则只有组件的创建者才干改变组件的依赖关系。对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则;建议采用以设立注入为主,构造注入为辅的注入策略。对于依赖关系无须变化的注入,尽量采用构造注入;而其他的依赖关系的注入,则考虑采用设立注入。对AOP的理解,以及AOP在项目中是如何使用的?AOP(AspectOrientedProgramming),也就是面向切面编程,也有译作面向方面编程。AOP是一种编程思想.在传统的面向对象(Object-OrientedProgramming,OOP)编程中,对垂直切面关注度很高,横切面关注却很少,也很难关注。也就是说,我们运用OOP思想可以很好的解决业务流程,却不能把系统中的某些特定的反复性行为封装在某个模块中。比如在很多的业务中都需要记录操作日记,结果我们不得不在业务流程种嵌入大量的日记记录代码。无论是对业务代码还是对日记记录代码来说,此后的维护都是非常复杂的。由于系统种嵌入了这种大量的与业务无关的其它反复性代码,系统的复杂性、代码的反复性增长了,从而使bug的发生率也大大的增长。IOC使软件组件松散连接成为也许,AOP让你可以捕获系统中经常使用的功能,把他转化为组件.简朴的说:面向切面编程通过提供此外一种思考程序结构的途径来填补面向对象编程(OOP)的局限性.在OOP中模块化的关键单元是类(classes),而在AOP中模块化的单元则是切面。切面能对关注点进行模块化。AOP将应用系统分为两部分,核心业务逻辑(Corebusinessconcerns)及横向的通用逻辑,也就是所谓的方面Crosscuttingenterpriseconcerns。AOP的应用:例如,所有大中型应用都要涉及到的持久化管理(Persistent)、事务管理(TransactionManagement)、安全管理(Security)、日记管理(Logging)和调试管理(Debugging)等。AOP的概念和术语方面(Aspect):一个关注点的模块化,这个关注点实现也许此外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的Advisor或拦截器实现。连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。告知(Advice):在特定的连接点,AOP框架执行的动作。各种类型的告知涉及“around”、“before”和“throws”告知。告知类型将在下面讨论。许多AOP框架涉及Spring都是以拦截器做告知模型,维护一个“围绕”连接点的拦截器链。切入点(Pointcut):指定一个告知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点,例如,使用正则表达式。引入(Introduction):添加方法或字段到被告知的类。Spring允许引入新的接口到任何被告知的对象。例如,你可以使用一个引入使任何对象实现IsModified接口,来简化缓存。目的对象(TargetObject):包含连接点的对象,也被称作被告知或被代理对象。AOP代理(AOPProxy):AOP框架创建的对象,包含告知。在Spring中,AOP代理可以是JDK动态代理或CGLIB代理。编织(Weaving):组装方面来创建一个被告知对象。这可以在编译时完毕(例如使用AspectJ编译器),也可以在运营时完毕。Spring和其他纯JavaAOP框架同样,在运营时完毕织入。说明:Target和advice的概念:target(目的):假如一个对象的执行过程受到某个AOP的修改,那么它就叫一个目的对象.目的对象也常称为被告知对象.advice(告知):在某一个特定的联接点处运营的代码称为”告知”.告知有很多种,比如在联接点之前执行的前置告知(beforeadvice)和在联接点之后执行的后置告知(afteradvice).Spring中有五中不同的告知:前置告知(Beforeadvise):在某连接点之前执行的告知,但这个告知不能阻止连接点之前的执行流程。(除非它抛出一个异常)后置告知(Afterreturningadvise):在某连接点正常完毕后执行的告知:例如,一个方法没有抛出任何异常,正常返回。异常告知(Afterthrowingadvise):在方法抛出异常退出时执行的告知。最终告知(After(finally)advise):当某连接点退出的时候执行的告知(无论是正常返回还是异常退出)围绕告知(AroundAdvise):包围一个连接点的告知,如方法调用。这是最强大的一种告知类型。围绕告知可以在方法调用前后完毕自定义的行为。它也会选择是否继续执行连接点或直接返回它自己的返回值或抛出异常来结束执行。围绕告知是最常用的告知类型。Springbean的生命周期:定义->初始化->使用->销毁Bean的作用域singleton在每个SpringIoC容器中一个bean定义相应一个对象实例。prototype一个bean定义相应多个对象实例。request在一次HTTP请求中,一个bean定义相应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的SpringApplicationContext情形下有效。session在一个HTTPSession中,一个bean定义相应一个实例。该作用域仅在基于web的SpringApplicationContext情形下有效。globalsession在一个全局的HTTPSession中,一个bean定义相应一个实例。典型情况下,仅在使用portletcontext的时候有效。该作用域仅在基于web的SpringApplicationContext情形下有效。Spring自动代理Spring自动代理重要有三个选择:使用BeanNameAutoProxyCreator(bean名称自动代理生成器)类:该类允许我们指明一组bean名称以及实行在他们上的一组告知和告知者.Spring会自动用指定的告知代理这些Bean.使用DefaultAdvisorAutoProxyCreator(默认告知者自动代理生成器)类:这个自动代理类非常强大,他自动用所有可行的告知者代理ApplicaitonContext中的所有Bean.该类只接受告知者,不接受告知,由于它依赖告知者的切入点来决定该告知者可以告知给定的bean.使用元数据驱动的自动代理Spring事务特点事务是用户定义的一个数据库操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。事务具有四个特性:1.原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列。这些操作要么完整的被所有执行,要么一步也不做。是一个逻辑工作单位。2.一致性:一个事务独立执行的结果将保持一致性,即数据不会由于事务的执行而遭受破坏。3.隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。4.持久性:一个事务一旦提交,它对数据库中数据的改变就应当是永久性的。接下来的其他操作或故障不应当对其执行结果有任何影响。谈谈Spring事务的理解事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,假如插入成功,那么一起成功,假如中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完毕此功能。spring提供了两中方式来实现事务管理:声明式事务和编程式事务。编程式事务:比较灵活,但是代码量大,存在反复的代码比较多;声明式的比编程式的更灵活。11.1编程式事务Spring提供两种方式的编程式事务管理,分别是:使用TransactionTemplate和直接使用PlatformTransactionManager。a.TransactionTempale采用和其他Spring模板,如JdbcTempalte和HibernateTemplate同样的方法。它使用回调方法,把应用程序从解决取得和释放资源中解脱出来。如同其他模板,TransactionTemplate是线程安全的。b.也可以使用PlatformTransactionManager直接管理事务。简朴地通过一个bean引用给你的bean传递一个你使用的PlatformTransaction对象。然后,使用TransactionDefinition和TransactionStatus对象就可以发起、回滚、提交事务。如下片段:DefaultTransactionDefinitiondef=newDefaultTransactionDefinition();//new一个事务//初始化事务,参数定义事务的传播类型;def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);//获得事务状态TransactionStatusstatus=transactionManager.getTransaction(def);try{…………….transactionMmit(status);//提交事务;}catch(…..)...{transactionManager.rollback(status);//回滚事务;}11.2声明式事务声明式事务是通过AOP实现的。大多数Spring用户选择声明式事务管理,这是最少影响应用代码的选择,因而这是和非侵入性的轻量级容器的观念是一致的。声明式事务通常通过TransactionProxyFactoryBean设立Spring事务代理。编程式事务和声明式事务如何选择?当你只有很少的事务操作时,编程式事务管理通常比较合适。例如:假如你只有一个Web应用,其中只有特定的更新操作有事务规定,你也许不乐意使用Spring或其他即使设立事务代理。这种情况下,使用TransactionTemplate也许是个好方法。只有编程式事务管理才干显示的设立事务名称。假如你的应用中存在大量事务操作,那么声明式事务管理通常是值得的。它将事务管理与业务逻辑分离,并且在Spring中配置也不难。使用Spring,而不是EJBCMT,声明式事务管理在配置上的成本极大的减少了。 Spring应用spring中的BeanFactory与ApplicationContext的作用和区别?答:BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。ApplicationContext是BeanFactory的扩展,除了提供上述BeanFactory所能提供的功能之外,功能得到了进一步的增强,比如容易与SpringAOP集成,资源解决(国际化解决),事件传递及各种不同应用层的context实现0.Spring里面applicationContext.xml文献能不能改成其他文献名?答:ContextLoaderListener是一个ServletContextListener,它在你的web应用启动的时候初始化。缺省情况下,它会在WEB-INF/applicationContext.xml文献找Spring的配置。你可以通过定义一个<context-param>元素名字为”contextConfigLocation”来改变Spring配置文献的位置。示例如下:<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/xyz.xml</param-value>

</context-param></listener-class></listener>spring中commons-logging.jar的作用commons-logging.jar包是使用spring的必备包。(位置在spring-framework-2.5.6.SEC01\lib\jakarta-commons)用来记录程序运营时的活动的日记记录。spring中读取xml配置文献、获取bean的几种方式获取Spring框架管理的类实例的方法有多种,如下:方法一:在初始化时保存ApplicationContext对象代码:ApplicationContextac=newFileSystemXmlApplicationContext("applicationContext.xml");ac.getBean("beanId");说明:这种方式合用于采用Spring框架的独立应用程序,需要程序通过配置文献手工初始化Spring的情况。方法二:通过Spring提供的工具类获取ApplicationContext对象代码:importorg.springframework.web.context.support.WebApplicationContextUtils;ApplicationContextac1=WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContextsc)ApplicationContextac2=WebApplicationContextUtils.getWebApplicationContext(ServletContextsc)ac1.getBean("beanId");ac2.getBean("beanId");说明:这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论