Java学习笔记-《Java程序员面试宝典》-第5章Java Web-5.3框架(5.3.9-5.3.10)

5.3.9 Structs如何实现国际化

国际化(internationalization,简称i18n,其意为首字母i和末字母n之间有18个字符)与本地化(localization,简称l10n,其意为localization的首字母l和n之间有10个字符)是指让产品(例如出版物、软件、硬件等)能够适应非本地环境,特别是其他语言与文化。具体而言,就是要求程序在不修改内部代码的情况下,能根据不同语言以及地区显示相应的界面。国际化资源文件是指用不同国家的语言描述相同的信息,并放在各自对应的属性文件中,程序根据运行时的环境决定到底加载哪个文件。
Structs提供了对国际化的支持。使用国际化功能也非常简单,主要是先准备各语言的资源文件,在资源文件中定义键和对应的字符串,然后在显示的地方指定键就可以了。

5.3.10 structs1与structs2有什么区别

Structs1框架由ActionForm和JavaBean组成,其中ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionForm里面的请求参数处理用户的请求。Structs2框架的基础是核心控制器FilterDispatcher,它包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户自己来实现的。开发人员在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,以供核心控制器FilterDispatcher来使用。
Structs1与Structs2都是MVC的Web框架,尽管二者都叫Structs,但也存在着很多不一致的地方。具体而言,主要表现在以下方面:
1>风险控制方面。Structs1是老牌框架,应用广泛,有很好的群众基础,开发风险小,成本更低。Structs2虽然基于Structs1,但是相对不成熟,而且未知的风险和变化很多,受众不多。所以,使用Structs2开发项目的风险较大,成本较高
2>Action实现类方面。Structs1要求Action类继承一个抽象基类,而Structs2中Action类既可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。同时,Structs2提供了一个ActionSupport基类去实现常用的接口。
3>线程模式方面。Structs1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有请求。而Structs2 Action对象为每一个请求产生一个实例,因此不存在线程安全的问题。
4>Servlet依赖方面。Structs1 Action依赖于Servlet API,因为Structs1 Action的execute()方法中有HttpServletResponse方法。Structs2 Action不再依赖于Servlet API,因为Structs2的Action是由POJO(plain Old Java Objects,简单的Java对象)组成,Servlet上下文以简单的Map的形式表现出来,这使得Action可以进行独立的测试,当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Structs2 Action仍然可以访问他们。
5>可测试性方面。测试Structs1 Action要依赖于Web容器,如果要脱离Web容器测试,需要借助于第三方扩展:Structs TestCase。Structs2 Action可以通过初始化、设置属性、调用方法来测试。
6>封装请求参数。Structs1使用ActionForm对象封装用户的请求参数,所有ActionForm必须继承基类-ActionForm。Structs2直接使用Action属性来封装用户请求属性。
7>表达式语言方面。Structs1整合了JSP标准标签库(JSTL),因此可以使用JSTL表达式语言。Structs2可以使用JSTL,但是它整合了一种更强大的和灵活的表达式语言-对象图的符号语言(Object Graph Notation Language,OGNL).

猜你喜欢

转载自blog.csdn.net/qq_28814687/article/details/77203311