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

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面试技巧

上一篇:移植u-boot-2010.03问题 --- No oob scheme defined for oobsize 32


下一篇:VS2015编译问题:The POSIX name for this item is deprecated. Instead, use the ISO C