Struts2面试文档.doc_第1页
Struts2面试文档.doc_第2页
Struts2面试文档.doc_第3页
Struts2面试文档.doc_第4页
Struts2面试文档.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

Struts2面试问答1. Q:Struts2都有哪几个核心部分,分别介绍一下。 A:Struts2有五个核心,分别是,核心控制器StrtusPrepareAndExecuteFilter,Action类(继承自ActionSupport,是开发人员主要编码的部分),result(xml中的结果节点,常用的有dispatcher,redirect,actionRedirect.以及自定义result,默认的为dispatcher),拦截器Interceptor(内置常用的拦截器有param拦截器,fileUpload拦截器,validation拦截器,workflow拦截器,exception拦截器等等),还有ognl表达式(一种帮助前端与后台数据交互的脚本语言)2. Q:你认为的Struts1和Struts2都有哪些主要区别吧? A:我认为2代和1代的最大区别是核心控制器的转变,1代的核心控制器是一个servlet, 而2代的核心控制器是filter(前期是DispatcherFilter,后期是StrtusPrepareAndExecuteFilter)。1代在action的execute调用时要将HttpRequest和HttpResponse传入方法中去,因此与ServletAPI强耦合在一起,运行更加依赖web容器,一旦脱离web容器,程序在测试或者其他方面将变得举步维艰。而且在表示层方面,struts1代只支持jsp,但随着网络发展,前端表示层更加多样化,struts1代的能力捉襟见肘。3. Q:你刚说普通Action继承自ActionSupport类,那你说说你了解的ActionSupport类吧。 A:ActionSupport类中内置了常用的字符串常量,类似success,input,error,以及execute方法,这些都来自于ActionSupport实现的Action接口。除此之外,还实现了Validateable,ValiedateAware,Serializable等七个接口,主要用于数据校验,本地化等功能。4. Q:Struts2的拦截器的执行过程是什么?你认为可以抽象为什么逻辑结构?A:拦截器围绕action和result的执行而执行,和servletFilter的实现原理差不多,以链式执行,对真正要执行的方法进行拦截。首先执行action配置的拦截器,在action和result执行之后,拦截器再一次执行(和上一次执行的顺序恰好相反),在此链式的执行过程中,任何一个拦截器都可以直接返回,从而终止余下的拦截器,action和result的执行。(见书上91页)5. Q:嗯,那你在开发过程中都实现哪些拦截功能? A:我在项目中负责登陆模块,所以会经常自定义拦截未登陆操作的行为,一般自定义Inteceptor来实现,主要步骤主要实现内置Interceptor接口,之后重写init,destroy,和最重要的intercept方法,或者直接继承AbstractInteceptor类,只重写intetceptor方法。6. Q:Struts2与ServletAPI对象产生互动有几种方式,分别介绍一下 A:有解耦和耦合两种方式。解耦:为了避免action类与servletAPI对象耦合在一起,方便action类的测试,struts2提供了普通的map对象来代替传统的request,session,servletcontext。通过调用actioncontext来获取到request,session等对象。耦合:虽然直接访问servletAPI会使action类与之强耦合在一起,但是有时候确实需要直接访问这些对象。通过调用ServletActionContext类。此类是ActionContext类的子类,通过调用这个类来实现直接访问ServletAPI对象。7. Q:Struts2怎样实现数据的校验? A:上面说了,由于ActionSupport类实现了Validateable接口,所以可以直接在Action 类中重写此接口的validate方法,用于进行简单的数据校验。也可以根据struts.xml中定义的action的名称来定义不同的validateXxx()。执行顺序是先执行自定义的validateXxx(),最后执行validate方法。而这两种方法适用于简单的数据校验,但当验证规则比较复杂时,需要编写大量繁琐的代码实现,容易导致Action类的臃肿,所以,struts2向开发人员提供了丰富的验证框架。常用的数据校验器有required,requiredstring,int,stringlength,regex,date,double等等。使用这些验证框架时,要编写验证文件和校验规则。编写时注意验证文件要和Action放在用一个包下,采用ClassName-validation.xml的命名形式。如果项目中同时使用验证框架和validate方法进行校验,那么按照struts2默认的调用拦截器顺序,将首先执行验证框架,再执行代码验证。8. Q:实际开发中你会选择脚本验证还是使用Struts2内置的验证方法,为什么? A:我经手的项目中由于服务器承受压力有限,所以我们的需求是将所有的验证操作放在前端脚本执行。这样的好处是减轻服务器后台压力,不过缺点也显而易见,前端文件容易被蓄意篡改,执行安全性减低。9. Q:你在开发过程中在前端使用的标签库是什么? A:为了后台和前端数据产生更好的交互。我们有一部分前端页面使用struts标签和ognl表达式。Ognl表达式主要在程序中负责两件事,表达式语言和类型转换器。10. Q:那通过ognl表达式读取后台action中的数据时是通过什么读取的?A:通过ValueStack(值栈)。值栈就是框架创建的一个存储区域,用来保存Model对象。框架在创建每个请求时,都会创建该请求对应的运行环境,这时会创建值栈和请求对应的Action实例,并将Action实例压入值栈中。11. Q:你有没有注意过在使用iterator标签迭代一个集合时值栈中大体是怎么变化的?A:iterator标签在迭代过程中,会把迭代的每一个对象暂时压入值栈的栈顶,这样在该标签内部可以直接访问元素对象的属性和方法,在iterator标签整体执行完毕后,位于栈顶的对象即被删除。然后再次重复该过程。12. Q:你在开发中自定义过类型转换器吗?如何实现的? A: 编写类,继承自StrutsTypeConveter抽象类,重写convertFromString和convertToString方法。之后进行配置,转换器和类之间通过properties文件建立关联。有两种配置方式,一种是应用于全局范围的类型转换器,一种是应用与特定类型的类型转换器。13. Q:描述一下Struts2每次请求的大体执行过程? A:当web容器收到一个请求时,经过核心控制器,它调用ActionMapper确定请求调用哪个Action,ActionMapper返回了一个收集了Action详细信息的ActionMapping对象。之后,核心控制器将委派权交给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager)从配置文件中读取配置信息,然后创建ActinInvocation对象。(之后就是调用配置拦截器的操作,见第4个问题。)14. Q:Strtus2的默认配置文件以及开发struts2插件时使用的配置文件?A:Struts-default.xml和Struts-plugin.xml15. Q:说说struts.xml中各个配置元素的作用A:常用的有package,constant,action,result,interceptor等元素。Constant是用于定义常量的,改变struts2框架的一些行为,这个元素包括name和value属性;package元素是一个逻辑单元,action,result和interceptor元素等都包括其中,package有一个最大的特性就是可以继承,通过继承实现其他package的所有定义;action元素对应相应的action类,result元素对应执行完action之后相应的结果集,而interceptor则是为一个action配置的拦截器。16. Q:如何使用struts2实现文件上传和下载?A:上传:首先廷加所需要的jar包,在前端页面利用struts标签的file标签来让用户选择要上传的文件。后台action类中定义File类型的字段接收提交的数据。(此处引出自己的项目中是如何实现文件上传的)。下载:下载时需要注意在配置文件中,result的tpye要设置成stream类型,根据下载文件的类型在result的子节点中通过param设置contentType和inputName,result的method要指定为一个返回值为字符串的空方法。(此处引出i自己的项目中是如何实现文件下载。)17. Q:最后你再说说ActionContext中都包括哪些对象?A:1.ValueStack。2.parameters。3.application。4.session。5.attr。6.request在ognl表达式的解析中,是必须针对值栈中的某个对象的,默认为ValueStack(这也是为什么访问值栈中的对象可以直接访问不需要加任何字符的原因),但也可以明确指定名字的方式将其他对象作为根对象。其他几个对象都是访问相关作用域中的数据,唯有attr是按照pageContext-request-session-application的顺序来访问的。1. Web应用与MVC框架通过什么核心文件结合在一起?答:web.xml2. 开发过程中你是如何解决乱码问题的?说出你所有解决乱码的方式答:1. 设置文件属性。2. 设置pageEncoding。3. 在servlet中,request.setCharacterEncoding(“utf-8”)或者response.setContentType(“text/html;

温馨提示

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

评论

0/150

提交评论