面试疑难点解析:开发工具及框架(九)-阿里云开发者社区

开发者社区> 面试一点通> 正文

面试疑难点解析:开发工具及框架(九)

简介: 本节内容将面试常见的Struts问题汇总在一起,读懂这一篇,面试遇到Struts问题不用怕了~

Struts问题汇总

所有的开源框架里面必然包含有各个公司自己的一些程序代码,或者是与其它一些开发框架整合的程序代码,对于这些代码,如果要是有时间,可以直接通过官网下载源代码目录,这个目录一般情况下都比较小(10M左右),如果没有源代码,那么最简单的做法就是直接利用Maven进行下载。

1.如果要去研究源代码,或者看某个程序的具体实现,简单的依靠一个开发包根本不可能,除非下载源代码程序包,里面许多程序类的关系大部分都不需要处理,要处理的只是需要开发的部分。例如:开发的是拦截器、Action、转换器等等,在Struts里对于这些操作提供有一系列的支持,像自动进行参数赋值就属于拦截器的范畴。在整个课程里针对开发框架,尤其是MVC开发框架已经给出了反射的分析过程,只需要掌握DispatcherServlet程序类,那么所有的MVC基本核心原理就明确了:线程处理、请求参数自动赋值(拦截器)、自动转换。所有的开发框架的本质就是反射处理操作。

2.Struts拦截器,在拦截器里可以设置属性,还需要在struts.xml之中进行配置,在进行Struts配置文件编写时还需要使用一个继承关系(继承一些公共的配置项);

3.Struts2.x上传使用的是FileUpload处理操作,而这个处理在JavaWEB开发实战经典中讲解过,其核心的特点是可以接受原始的文件名称以及操作类型,对于接收操作来讲,官方文档已经给出了其接收的类型,这个是由官方定义好的,如果有一天你自己开发的框架可以盛行,你这些规则由你自己来定,如果你学习过反射机制,深入了解了DispatcherServlet设计,那就可以理解为什么有这样的要求;

4.Struts2.x最大的败笔在于:大量的setter、getter以及对象的实例化处理机制,而这个问题之所以会要求编写主要也是在DispatcherServlet程序类中已经给了明确的说明,依然是基于反射的处理操作;

5.Struts2.x里的转换处理操作本身是有Bug存在的,如果在默认情况下接受的数据类型是Int,但是传递了String,这个时候肯定无法正常接受,因为会产生NumberFormatException异常,原因在讲解DispatcherServlet的时候已经分析过了,因为它的原理是根据所有的参数名称以及对应的属性名称;

6.Struts2.x里默认支持EL,在Struts2.x最初的时代是没有EL的,它提供了一种与EL类似的解决方案:OGNL(很麻烦,一般不建议再使用,需要追溯到2005年左右);

7.对于数组的接受处理操作本质上是利用了request.getParameterValues(),这个处理操作在进行接收的时候可以将接收到的数据以数组的形式出现或者以List集合的形式出现,因为有参数名称,而且参数名称和属性名称又是一样的,那么就可以根据参数名称获取属性类型,如果发现属性类型是一个数组,则根据数组的形式来进行接收处理,依然采用了反射机制,DispatcherServlet也已经有了明确的说明;

8.国际化的本质在于ResourceBundle,它需要一个资源名称,例如:Messages.properties、Message_zh_CN.properties,这里面Message就属于资源名称,而后面那些国际化标记是通过local实现的指派。里面设置的占位符是通过MessageFormat类完成处理的,它是按照“{0}”、“{1}”这样的顺序进行设置;

对于Struts而言需要掌握的部分在Java基础、MVC设计思想、反射应用的结合体上。

更多专业知识,面试技巧就在面试一点通,持续更新中……
感谢浏览~
本内容来源于阿里云大学-Java面试技巧

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

帮你拿下好工作

官方博客
官网链接