struts国际化教程
国际化
第一章国际化1.国际化:(Internationalization:I18N)在程序在不做任何修改的情况写,可以在不同国家或地区和不同语言环境下,按照当地的语言和格式习惯显示字符。
2.本地化(Localization:L10N)一个国际化的程序,当它运行在本地机器时,能够根据本地机器的语言和地区设置显示相应字符。
Java程序的国际化思路:1.将程序中的提示信息、错误信息等放在资源文件中,为不同国家/语言编写对应资源文件;2.资源文件有很多key-value对组成,key保持不变,value随国家/语言不同而不同;3.这些资源文件使用共同的基名,通过在基名后面添加语言代码、国家和地区代码来进行区分。
第二章步骤1.在struts.xml配置文件中;value的值为配置文件的基名;2.在登录的页面,submit的value值发生了变化;并且label属性被key取代;3.在action中4.国际化之后配置框架的变化补充:1.全局资源文件a)所有包的所有Action类都可以访问b)导致资源文件变得非常庞大臃肿,不便于维护2.包范围资源文件a)对应包下创建package language country.propertiesb)处于该包及包下的action才可以访问该文件3.Action范围资源文件a)命名格式ActionClassName language country.propertiesb)只有单个Action可以访问查找顺序:Action--->package--->全局如果是全局的国际化的配置文件,必须在struts.xml文件中注册基名;Key的属性引用配置文件。
localeresolver 国际化处理流程
localeresolver 国际化处理流程国际化处理流程是在软件开发过程中,将软件设计和开发过程中的所有国际化相关任务进行整合和规划的过程。
国际化是指将软件产品或应用程序进行适应不同语言、地区和文化背景的过程。
本文将以“localeresolver 国际化处理流程”为主题,详细介绍国际化处理流程的每一步骤。
第一步:确定目标市场和目标语言在国际化处理过程中,首先需要确定软件产品的目标市场和目标语言。
这可以通过市场调研和用户需求分析来确定。
根据目标市场的不同,软件产品需要适应不同的语言、地区和文化要求。
第二步:设计和规划本地化需求根据确定的目标市场和目标语言,设计和规划软件产品的本地化需求。
这包括设计多语言支持、本地化界面、日期时间格式、货币符号等方面的需求。
同时,还需要考虑到文化差异和地区特殊要求,比如文字排版习惯、数字格式、色彩偏好等。
第三步:提取本地化资源在国际化处理过程中,需要将软件产品中需要本地化的资源提取出来,以便进行后续的翻译和本地化处理。
这些资源包括界面文本、帮助文档、错误提示等。
提取本地化资源的方式可以使用工具或手动进行。
第四步:翻译和本地化处理将提取出的本地化资源进行翻译和本地化处理。
这可以通过雇佣专业翻译人员或者使用机器翻译等方式来完成。
同时,还需要进行语言和文化的适配,确保翻译内容符合目标市场的语言表达和文化背景。
第五步:集成和测试本地化版本将翻译和本地化处理完成的资源集成到软件产品中,并进行测试验证。
在集成和测试过程中,需要确保本地化版本的完整性和正确性。
这包括界面显示、文字排版、日期时间格式、货币符号等方面的测试。
第六步:发布和推广将本地化版本的软件产品发布到目标市场,并进行推广和营销。
在发布和推广过程中,需要针对目标市场的特点和需求进行调整和优化。
这包括市场定位、渠道选择、宣传策略等方面。
第七步:反馈和优化在软件产品的使用过程中,收集用户反馈和意见,并根据反馈进行优化和改进。
基于struts框架的国际化问题的解决方案
默认 资 源 文 件 抽 题 组 卷 英 文 资 源文 件 中文 资源 文 件
Co mpo e pp ia in p o e t s s a l to . r p ri c e Co o e p l a in e . r p ris mp s a p i t c o n p o ete
下 面 以登 录模 块 为例来讨 论 资源 文件 的建 立 和
使 用.
表 1 网 上 考 试 系 统 各 模 块 对 应 的 资 源 文 件
模 块名 资源文件类型 默认资源文件
考生登录 英文资源文件
资源文件名称
S u e t o ia p ia in. r p r e td nL gn p l t c o p o et s i
这种 多模 块 的 Srt 应用 ,可 以考 虑 为 网上 考 试 系 t s u
关 的格式化 或解 析工 作 , 它代 表 一种 特 定 的语 言 和 地 区 ,向本地 敏感 的类 提供 本地化 信 息 ….
R suc u de类 提 供存 放 和 管理 与 L c 相 eo r B n l e oa l
_
存 在 ssi es n内 , 样 ,Srt框 架 能 自动 根 据这 一 o 这 t s u o ae L cl实 例从 R suc ude中选 择合 适 的资源 文 eoreB nl 件, 再从 资 源文件 中读 取本 地化 的消 息文 本 ] 2.
Srt框 架提 供 了对 国际化 的支 持 , 文 利 用 Srt t s u 本 t s u 框 架解决 了网上考 试 系统 的 国际化 问题 ,使其 支 持 面 向中文和 英文 两种 不 同的语 言环境 .
2 网 上考 试 系统 国 际化 问题 解 决 方 案
i18N-网页网站国际化和动态内容国际化
I18N与网站动态国际化网站国际化一般都是会有语言的按钮,对不同语言用户的切换选择,例如以下部分,是三种语言的连接。
国际化主要分为系统国际化和内容国际化。
一般这两中国际化是同步的。
内容国际化很简单主要是根据语言来区分往数据库中去什么语言的值。
那我做的这个例子来说。
我使用SSH2框架写的公司网站。
当用户点击语言切换的时候,在超链接中执行一个action.并且传递一个参数:在后台判断这个status的值,然后根据不同的状态,拼写hql语句即可:并且将设定的状态值写到session中。
在方法的地方获取:这样将根据语言查询的内容国际化就读取出来了。
最重要的一点就是网站的国际化。
这个需要一种资源文件.property 文件;资源文件命名规则为message + en_US >English; message+””+zh_CN > 中文。
里面写对应的key value;在struts.xml 文件中配置国际化<!-- 设置Web应用的默认Locale为en_US 英文--><constant name="struts.locale" value="en_US" /><!-- 利用i18n来管理国际化-- ><constant name="struts.custom.i18n.resources" value="messageResource"/>如果不默认Local,那么网站国际化将根据浏览器的语言来自动选择使用那用国际化;这样。
网站的自动国际化就可以实现了。
当然。
我们做的是动态的国际化。
看似很复杂,其实很简单。
你只要在刚才执行的语言切换action中加入以下代码即可:首先声明一个locale,并默认一种语言Locale locale=new Locale("zh","CN"); 我们当前来默认成中文然后根据你传过来的status 状态来胜定locale的状态Locale locale=new Locale("en","US");if(getStatus()==null||getStatus().equals("")){languagebase = "2";locale=new Locale("en","US");}else if(getStatus().equals("1")){languagebase = "1";locale=new Locale("zh","CN");}else if(getStatus().equals("2")){languagebase = "2";locale=new Locale("en","US");}else if(getStatus().equals("3")){languagebase = "3";locale=new Locale("ru","RU");}然后加入这句话//struts2 i18n会自动拦截session中的WW_TRANS_I18N_LOCALE 的值,作为local的状态ServletActionContext.getRequest().getSession().setAttribute("WW_TRANS_I18N_LOCALE", locale); 这样浏览器会自动获取WW_TRANS….现在基本上可以实现动态链接切换中英文了,不过,还有个小问题,需要解决,那就是,需要点击2下中文才能切换到中文,英文同样也是;这样只需要写一个拦截器就可以了:/*** i18n 拦截器** */public class Locals extends AbstractInterceptor {private String locale;@Overridepublic String intercept(ActionInvocation arg0) throws Exception { if(getLocale()!=null){String loc[]=getLocale().split("_");Locale locale=new Locale(loc[0],loc[1]);ServletActionContext.getRequest().getSession().setAttribute("WW_T RANS_I18N_LOCALE", locale);}return arg0.invoke();}public String getLocale() {return locale;}public void setLocale(String locale) {this.locale = locale;}}在struts.xml 中配置拦截器:首先要在<package>中加入这句话<interceptors><interceptor-stack name="local"><interceptor-ref name="defaultStack"><paramname="params.excludeParams">com.ruijian.meilinweb.filter.*</param>//f ilter路径</interceptor-ref></interceptor-stack></interceptors>配置action<action name="languagelocale"class="languageAction"method="languageLocale"><interceptor-ref name="local"></interceptor-ref>//到页面前执行拦截<result name="login">/mei.jsp</result></action><action name="language" class="languageAction"><!—先执行这里。
前端框架中的国际化与本地化方法
前端框架中的国际化与本地化方法在前端开发中,国际化(Internationalization,缩写为i18n)和本地化(Localization,缩写为l10n)是两个重要的概念。
国际化是指将网站或应用程序适配不同的语言和文化,以便在全球范围内进行使用,而本地化则是根据用户的地理位置和习惯,提供与之相符的用户界面和内容。
对于前端框架来说,实现国际化和本地化是一个不可或缺的功能。
它可以让开发者轻松地为不同语种的用户提供友好的界面和内容,提升用户体验,扩大应用程序的受众范围。
下面将介绍一些常见的前端框架中实现国际化和本地化的方法。
一、Vue.js框架中的国际化和本地化方法Vue.js是一种流行的前端框架,它提供了一种名为Vue I18n的插件,用于实现国际化和本地化功能。
1. 安装Vue I18n插件在Vue.js应用程序中,可以通过npm安装Vue I18n插件,并在代码中导入依赖。
2. 设置语言资源文件在Vue I18n中,语言资源文件以JSON格式存储,并包含应用程序中需本地化的文本和翻译。
3. 配置Vue I18n实例在Vue.js应用程序的入口文件中,需要配置Vue I18n实例,并加载语言资源文件。
4. 使用vue-i18n指令使用vue-i18n指令能够快速实现文本的国际化和本地化。
通过在模板中使用指令,可以动态地根据用户的语言设置呈现相应的文本。
二、React框架中的国际化和本地化方法React是另一种流行的前端框架,它也有一些常用的库和工具,可以帮助实现国际化和本地化功能。
1. React Intl库React Intl是一个常用的国际化库,它提供了一系列组件和API,用于处理文本的国际化和本地化。
2. 定义语言资源文件与Vue I18n类似,在React应用程序中,需要定义语言资源文件,以便存储不同语言的文本和翻译。
3. 使用Intl组件和API通过使用React Intl提供的组件和API,可以在React应用程序中实现国际化和本地化。
前端开发中的国际化处理方法
前端开发中的国际化处理方法在当今日益全球化的互联网环境中,对于前端开发来说,国际化已经成为一个重要的考虑因素。
所谓国际化,就是将产品或网站适应于不同语言、不同文化习惯的需求,使其能够在全球范围内顺利运行和交互。
本文将介绍一些前端开发中常用的国际化处理方法,旨在帮助开发者更好地应对国际化的需求。
一、语言切换和资源文件语言切换是前端国际化处理的基本需求之一。
通过为网站或应用程序提供多语言支持,可以使用户根据自己的需要选择使用的语言。
在前端开发中,最常用的方式是使用资源文件(如JSON、XML等)来存储不同语言的文本内容,然后根据用户选择的语言加载相应的资源文件,实现语言切换功能。
同时,为了方便维护和更新,可以将不同语言的资源文件分别存放在不同的文件中,通过合适的命名规范和文件目录结构来组织管理。
二、日期、时间和货币格式化除了语言切换外,国际化还涉及到日期、时间和货币等格式化的处理。
不同国家和地区有不同的日期和时间格式,如年月日的顺序、时间的小时制或12小时制、货币的符号和位数等。
对于前端开发来说,可以使用现有的库或插件来实现这些格式的自动转换,如Moment.js和Numeral.js等。
这些库提供了丰富的日期、时间和货币处理功能,可以根据用户的地区设置自动格式化显示。
三、数字和单位转换在国际化处理中,数字和单位的转换也是一个重要的问题。
不同地区使用的计量单位和数值表示方式可能不同,比如货币单位、长度单位、重量单位等。
为了适应不同地区的需求,前端开发需要对数字和单位进行自动转换。
可以使用类似于Moment.js和Numeral.js的库来实现这些功能,或者根据具体需求自行开发相应的代码。
四、多语言输入和字体处理除了文本和格式化的处理,国际化还需考虑多语言输入和字体的适配。
对于需要支持多语言输入的网站或应用程序,前端开发需要实现相应的输入框和编辑器,以满足用户在不同语言环境下的输入需求。
同时,还需要考虑不同语言所使用的字体是否支持,并根据需要进行字体的适配和兼容处理。
Struts2详细实例教程
Struts2(上)一、经典的MVC模式二、Struts1.x对MVC的实现三、Struts1.x的主要组件和作用组件作用ActionServlet 中央控制器Action 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个ActionStruts-config.xml 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件Struts标签库和JSTL类似,和Struts-config.xml、ActionForm、Action等对象可以紧密集成四、Struts1.x 开发实例-登录程序见案例。
五、Struts2(WebWork)的MVCStruts2的MVC架构六、Struts2的主要组件组件作用FilterDispatcher 起中央控制器作用的过滤器Action 处于Model层的Action,调用JavaBean实现业务逻辑struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视图技术。
七、Struts2的实例-登录在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。
在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。
在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:package mypack;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String username;private String userpass;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {erpass = userpass;}@Overridepublic String execute() throws Exception {if ("Mike".equals(username) && "123".equals(userpass)|| "张三".equals(username) && "abc".equals(userpass))return "success";elsereturn "error";}}在src目录下建立Struts2的配置文件struts.xml,内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><!-- 定义包管理配置的action 继承struts-default.xml中的配置 --><package name="actions" extends="struts-default"><!-- 定义Action(login.action) --><action name="login" class="erAction"><!-- 定义转发路径对应的字符串名 --><result name="success">/Success.jsp</result><result name="error">/Error.jsp</result></action></package></struts>修改web.xml,在其中加入一个过滤器,过滤/*路径。
在Sun NetBeans开发工具中创建基于Struts框架的国际化效果的用户系统登录示例
在Sun NetBeans开发工具中创建基于Struts框架的国际化效果的用户系统登录示例1、创建两个资源文件(1)中文资源文件ApplicationResource_zh_CN.propertie执行JDK中所带的native2ascii转换工具:native2ascii ZWApplicationResources.properties ApplicationResources_zh_CN.propertie转换后的结果文件ApplicationResources_zh_CN.propertie中的内容如下:username=\u7528\u6237\u540d\u79f0\uff08\u8f93\u5165liutao\u6b63\u786e\uff09password=\u7528\u6237\u5bc6\u7801\uff08\u8f93\u51651984\u6b63\u786e\uff09 loginSuccess=\u7528\u6237\u767b\u5f55\u6210\u529floginFailure=\u7528\u6237\u767b\u5f55\u5931\u8d25submit=\u63d0\u4ea4reset=\u91cd\u7f6etitle=\u767b\u9646\u754c\u9762(2)英文资源文件ApplicationResource_en_US.properties代码如下:username=username(liutao is correct) password=password(1984 is correct) loginSuccess=loginSuccess loginFailure= loginFailuresubmit=submitreset=resettitle=login(3)设置缺省资源文件为英文格式2、在JSP页面中显示资源文件中的信息(1)<bean:message>标签(2)用法:<bean:message key="title"/>,其中key属性与资源文件中的信息key保持相同。
Struts框架Web应用的国际化
O 引 言
在电子商务时代的今 天 , b We 应用 程序 已变得 非
国家。对 于已经 开发好 的软件 , 比如某种英文软件 , 如
对软 件的本地 化涉及 修改原 有程 序 的代码、 数据
和配置文 件等 , 需要 在原有 软件 的基础 上开 发 出新 的 软 件版本 。
国际化指的是在软件 设计 阶段 , 就应该 使软件具 有支持多种语言 和地 区的功 能。这样 , 当需要 在应用
中添加对 一种新 的语言 和 国家 的支持 时 , 不需 要对 已
本 地化 与 国际化 的概念 , v 和 Srt框架对 We 应 用 国际化 的支 持 , Ja t s a u b 并讲 述 了创 建 Srt的 RsucBn l和 Srt应 t s u e r ud o e e t s u
用 中访 问 RsucB nl的各种 途径 。 e r ud o e e
Abta t A o dfa wo ki v r o tntt fwaed v lp n . r t n ftebs rme r urnt e p l aind — sr c : g o rme r ey i s mp ra os t r e e me tStu sio eo h etfa wo ki c re ba pi t e o o s n W c o
开发提供 了一个非 常有竞 争力的选择 。怎样把这些技
术组合起来 形成 一个适应项 目需要的稳定框架是项 目
开发过程 中一个非 常 重要 的步骤 。长期 以来 ,aa Jv 开 发者致力 于找到一 种完美的 we 层应用框 架 , 而规 b 从
使用前端框架进行国际化开发的技巧
使用前端框架进行国际化开发的技巧随着互联网的快速发展,越来越多的网站和应用程序面向全球市场。
为了满足不同国家和地区的用户需求,开发人员需要将网站和应用程序进行国际化开发,以支持多种语言和文化。
前端框架在实现国际化开发方面提供了便利和灵活性。
在本文中,我将分享一些使用前端框架进行国际化开发的技巧。
1. 选择合适的前端框架在进行国际化开发时,选择一个支持多语言的前端框架是非常重要的。
一些流行的选项包括React、Vue和Angular。
这些框架提供了许多有用的功能和工具,可以轻松地实现国际化。
2. 使用国际化插件或库许多前端框架都有相应的国际化插件或库,可以帮助开发人员实现国际化。
例如,React框架有react-i18next,Vue框架有vue-i18n,Angular框架有angular-translate等。
这些插件或库提供了简单易用的API和工具,方便开发人员进行国际化开发。
3. 提取可翻译文本在进行国际化开发时,需要将网站或应用程序中的可翻译文本提取出来,以便后续进行翻译和替换。
可以使用工具或脚本来自动提取可翻译文本,或者手动编写代码来标记可翻译文本。
确保提取的文本包含所有需要翻译的内容,如页面文本、按钮文本、提示信息等。
4. 创建语言文件为每种支持的语言创建相应的语言文件。
语言文件包含了每个文本字符串的翻译,以及其对应的键。
可以使用JSON或其他格式来组织语言文件。
将语言文件与前端框架的国际化插件或库关联起来,以便在应用程序中动态加载和切换不同的语言。
5. 集中管理语言文件为了方便管理和维护语言文件,建议将其集中存放在一个目录中。
可以根据语言文件的命名约定和目录结构进行组织。
这样可以更方便地查找和修改翻译内容,减少维护工作的复杂性。
6. 动态切换语言提供一个用户界面,允许用户在应用程序中动态切换语言。
可以在设置或个人资料页面中添加一个语言选择器,让用户选择自己偏好的语言。
一旦用户选择了新的语言,前端框架的国际化插件或库将加载相应的语言文件,并更新整个应用程序的文本内容。
struts2国际化配置
前提条件:strut2的必须架包已经引入,struts2的配置文件全部配置完成1.首先创建一个struts.properties在src目录下,服务器启动时候会自动加载该文件,在这个文件中写入struts.custom.i18n.resources=globalMessages,服务器会自动选择前缀为globalMessages资源文件。
(或者你在你的struts.xml文件中添加<constant name="struts.custom.i18n.resources"value="globalMessages"></constant>服务器加载struts.xml的时候会加载国际化资源文件);2.在src目录下创建资源文件英文globalMessages_en.properties 中文globalMessages_zh.properties。
globalMessages_en.properties 文件内容为home=homeglobalMessages_zh.properties文件内容为home=¥u9996¥u98753.在页面端获得资源文件信息。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'test.jsp' starting page</title></head><body><s:text name="home"></s:text></body></html>struts2的国际化分三种情况1.前台页面的国际化,2.Action类中的国际化,3.配置文件的国际化。
Struts应用程序中文显示方案及其国际化技术
次划分 , 也提供 了一 系列有 效 的技 术来 简化 We 应用 的开 发 。文 中针对 Srt应用 程序开 发 中 出现 的中文 显 示 问题 同时 b t s u
进行 了探讨 , 出了相 应的解 决方案 , 提 并对 Srt应 用 程序 的国际 化 问题做 出了技 术研究 。 t s u
I e na i n lz to c o o y ntr to a ia i n Te hn lg
M A n, UANG e p i Li H W n— e
(  ̄ot f nomao c ne& T cn l y Suh sJat gUnvri , h nd 10 1C ia S ho o fr tnSi c I i e ehoo ,otwet i o ie t C eg u6 0 3 , hn) g on sy
Srt 用 程序 中文 显 示 方 案及 其 国 际化 技 术 t s应 u
马 林 , 文培 黄
( 南交通 大学 信 息科 学 与技 术 学 院 , 川 成 都 60 3 ) 西 四 10 1
摘 要 :t t是近 年来 构建基 于 Jv 的 We 应 用程序 的主 流框架 。它所 实现 的 MV Sr s u aa b C模式 , We 应 用带 来 了良好 的层 给 b
a piain,fee ei frs le t. d itra in l ai t n lg fS r t p I a p l to o r asre o eov n An nen t ai to  ̄h oo yo t s a pi t c d s s o z n u c
Ke rs: tus Chn s ipa ; VC;ne a in l to ywo d S r t; ieeds ly M itr t ai in n o a z
十二国际化和中文编码问题
⼗⼆国际化和中⽂编码问题第⼗⼆章S truts国际化程序和中⽂编码问题第⼀节国际化问题概述⼀、什么是国际化编程1)国际化(Internationalization ):就是设计⼀个应⽤的流程,以使之能够不经过⼯程修改就可以使⽤于各种不同的语⾔和区域场所。
2)本地化(Localization ):通过添加特定场所的组建和翻译⽂本来使软件适⽤于特定的场所和语⾔的过程。
我们花费了⼤量的精⼒来开发⾃⼰的Web应⽤,当然都希望在应⽤的开发上得到更⼤的投资回报。
因为互联⽹连接着世界各地,每个应⽤都可以⾯对国际的受众。
如果某个应⽤可以被本地化,那么它就可以被更多的访问者所访问。
特别是在多语⾔的国家,⽐如⽐利时、加拿⼤、瑞⼠,甚⾄美国尤其重要。
3)本地化那些内容:当⼀个软件产品需要在全球范围应⽤的时候,得考虑在不同的地域和语⾔环境下⾯的使⽤情况(也就是国际化问题),最简单的要求就是UI上的信息上能⽤本地化语⾔来显⽰,这主要包括操作界⾯的风格问题、提⽰和帮助语⾔的版本问题、界⾯定制个性化问题等。
Java语⾔内核基于Unicode2.1提供了对不同国家和不同语⾔⽂字的内部⽀持,由于先天的原因,Java对于国际化的⽀持远远要⽐C/C++来的优越。
Struts的国际化能⼒是它本⾝提供的,但为了更好的理解国际化问题,我们先从Java语⾔国际化本⾝的技术谈起。
⼆、⼏个术语1)i18n(Internationalization):就是internationalization, 国际化,由于⾸字母"i"和末尾字母"n"间有18个字符,所以简称i18n. internationalization指为了使应⽤程序能适应不同的语⾔和地区间的变化⽽不作系统性的变化所采取的设计措施,即:将依赖于语⾔和地区的代码与和语⾔⽆关的代码分离开来的过程。
⼀旦程序完成了这项⼯作,它只需很少的⼯作就可以适⽤于不同语⾔的国家和地区。
Struts入门(Struts 框架响应客户请求的流程 国际化 异常)
Struts入门(Struts 框架响应客户请求的流程+国际化+异常)Struts入门(Struts 框架响应客户请求的流程+国际化+异常)Struts实际上是在JSPModel2上实现的一个MVC的框架。
模型:如JavaBean EJB控制器:ActionServlet Action视图:JSP Struts客户化标签前端控制器:ActionServlet控制器:Action模型:ActionFormBean控制器与模型之间的映射:ActionMapping转发:ActionForward错误与信息处理:ActionErrorActionForm Bean它也是一种JavaBean,除了一些JavaBean的常规方法,另外它还包含一些特殊的方法用于验证其中数据的完整性。
Struts利用ActionFormBean来进行View组件与Controller 组件之间表单数据的传递。
Struts框架把View组件接受的用户输入的表单数据保存在ActionForm bean之中,把它传递给Controller组件,Controller组件可以对ActionForm Bean中的数据进行修改。
Jsp文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。
对于采用Struts的Web应用,在Web应用启动时会加载并初始化控制器ActionServlet。
ActionServlet从struts-config.xml配置文件中读取配置信息,再把它们存放到ActionMappings对象中。
ActionServlet在接收到用户请求时会检查对应的ActionMapping的实例是否存在,如果不存在则会创建一个ActionMapping的实例,其中包含了把请求转发至那个Action的信息。
ActionServlet会根据配置文件检查Action对应的ActionForm的实例,如果ActionForm的实例不存在,则会创建一个ActionForm的对象,并将客户提交的表单数据保存到ActionForm中。
第七章 MVC框架技术Struts2
本章要点
Struts2配置及应用程序原理 Action的设计方法与结果类型 服务器端的输入验证 Struts2国际化、标签库和OGNL表达式 拦截器、文件上传和下载
7.1 Struts2概述
Struts框架的历史
• Struts在经历了1.x的若干版本后,最终发展 到2.0版本,也就是我们常说的Struts2。它是 Struts和WebWork相互结合的产物,代表了 WEB框架的最新技术和规范。本书中Struts2 的内容以最新的Struts2.2.3版本为准。
7.3 输入验证
使用validate()方法
• 要进行输入验证,Action类要继承ActionSupport,并重写 validate()方法。 • 当请求Action的时候,请求中的参数会自动去填充Action的模型 中的同名属性,如果能够从字符串自动转换成相应的Java数据类 型,则转换成功,否则会抛出异常。如果类型转换成功,则填充 属性,并在调用业务方法前,执行validate()方法来判断所有输 入数据的合法性,例如长度是否够,是否是空值等。 • 输入验证可以针对不同的业务方法,例如,对登录进行输入验证, vaidate()方法可以命名成validateLogin()。如果同时有 validate()方法,执行的顺序是先调用validateLogin(),再调用 validate(),前面的方法验证没通过,后面的方法不再执行。
此外,还有SessionAware、ServletResponseAware、 ServletRequestAware、ParameterAware等接口。
多方法的Action
• 前面所定义的Action都是通过execute()方法处理请求。在实际 的应用中,如果为每个业务逻辑定义一个Action,虽然实现方便, 但是Action数量多,struts.xml中需要配置的内容也多,使系统 非常庞杂。实际上,可以用一个Action处理多个业务请求。 • 以YbUserAction为例,可以为每个操作定义一个方法,这些方法 的格式和execute()方法一样。
尚学堂Struts2_02
<param name=“excludeMethods”>m1,m2</param> <param name="includeMethods">m2</param>
</interceptor-ref> </action> 如果不指定excludeMethods和includeMethods,则所有方法都会被截拦器 截拦. 如果方法在excludeMethods和includeMethods都配置了,则 includeMethods取胜. 如果需要过滤多个方法,方法名之间用逗号隔开.
版权所有:尚学堂科技
尚学堂
手把手教程
Struts+Hibernate+Spring
HttpServletRequest
HttpServletResponse
核心控制器
Intercepter1
Intercepter2
Intercepter3
Action
Result
版权所有:尚学堂科技
尚学堂
手把手教程
版权所有:尚学堂科技
尚学堂Βιβλιοθήκη 手把手教程Struts+Hibernate+Spring
Struts2拦截器——工作原理
拦截器的执行过程是一个递归的过程,越是位于前面的拦截器越被先执行 ,但也是越晚退出。因此,拦截器的调用处理形成了“先进后出”的堆栈 的模式,因此也叫拦截器栈。
版权所有:尚学堂科技
尚学堂
Struts+Hibernate+Spring
Struts2拦截器——作用及意义 早期MVC框架将一些通用操作写死在核心控制器中,致使框 架灵活性不足、可扩展性降低 Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选 择和组合,增强了灵活性,有利于系统的解耦 截拦器是Struts2中最重要的概念之一,是Struts2灵魂。 Struts2中有80%的功能都通过截拦器实现 提高更高层次的解耦,无须侵入框架本身 便可以添加新的功 能.
Struts架构下国际化的一种解决方案
20 0 8年 4月
保 定 学 院 学 报
J OURNAL OF BAODI NG NI U VERSTY I
Apr2 08 .0
Vo _ . l 21 No2 0 8 0 —0 30 17 —4 4 2 0 )20 7 —2
以下 方 法 .
本研究使用T m a o ct 作We H务器 ,c pe aa b ̄ E l s作Jv开发工具. i
实 现过 程 如 下 : 1 下载 s u 并 进 行 配置 , 里 不 再赘 述 . ) tt rs 这
2 建立 工程 : eap 目录下 建立 1 n ra oa文件 夹 , ) 在w b ps 个it nt nl e i 再在 i ent nl n rao a目录下建立 WE —N 文件夹 和 t i B IF WE —N / ass B I F l e文件夹 , cs 这些都是 1 sI程必需 的. 个Jp
将 所 有 * s 网页 中开 头处 加 入 .p j
< %@ p g a g a e ’ v ”cne ty e ” x hml h re= t 8 ae ln u g =' a o tnT p = t t t ;c ast uf ”%> j a e/ - 再 设 置 < t :t o ae = ”re > hml mllcl h t ”. u
一
中文版 . 随着业务量的增 加 , 司要为许多英文客户提供服务 , 以还要请编程人员再整体做一套英文版 . 公 所 而且 1后 3
每增加一种语言 , 都要完 整地做一套新版本。 这对于公 司和编程人员都是很大 的负担. 国际化( t tnlai , i e i a zt n 因 n ma 0 i 0
3 加载s us : ) t t 在WE —N 目录下建立 1 i 目录 , sus ea p \ B I Fl 目录下将 所有.r r 类 B IF 个l 子 b 在 t t xm lWE —N kb r — e i j 文件拷 a
struts04国际化
创建过滤器
建立一个实现Filter接口的类,实现三个接口方法: init方法建立设置操作 doFilter方法包含主要的过滤代码,其第一个参数 ServletRequest对象给过滤器提供了对进入的信息 的完全访问,在其参数FilterChain对象调用 doFilter方法vlet页面关联时,则 Servlet或JSP页面被激活 destroy方法进行清除操作
11
配置参数
在web.xml中配置 <filter> <filter-name>test</filter-name> <filter-class>web.TestFilter</filterclass> </filter> <filter-mapping> <filter-name>test</filter-name> <url-pattern>/hello</url-pattern> </filter-mapping>
6
Locale类
在浏览器中设置Locale
大多数Web浏览器允许用户配置 Locale。例如,对于微软的IE浏 览器,可以选择菜单【工具】→ 【Internet选项】→【语言】
7
配置多个资源文件
在struts-config.xml中通过key标识多个资源文件 <message-resources key=" moreResources“ parameter="com.systemmobile.example.ApplicationResources"/> 使用方法: <bean:message bundle="moreResources" key=―erName‖/>
Struts-3
国际化—包范围资源文件
在一个大型应用中,整个应用有大量的内容需要实现国际化。可 以针对不同模块、不同的action来组织国际化文件。 在java的包下放置package_language_country.properties 资源文件,package为固定写法,处于该包及子包下的action都可 以访问该资源。当查找指定key的消息时,系统会先从package资 源文件查找,当找不到对应的key时,才会从常量 struts.custom.i18n.resources指定的资源文件中寻找。 使用<s:i18n>标签指定从某个特定的资源文件中取数据 <s:i18n name="messageResource"> <s:text name="helloWorld"></s:text> </s:i18n> 指定从messageResource取资源
<message>用户名不能为空!</message>
</field-validator>
Contd.
stringlength:字符串长度校验器 <field-validator type="stringlength"> <param name="maxLength">10</param>
<param name="minLength">2</param>
基于Struts的Web应用国际化通用架构
在全世界 范围 内发 布产 品信 息 、 引客户 的最为 有效 吸
的 手 段 。 如 何 开 发 支 持 多 国 语 言 、 际 化 的 应 用 成 为 国 W e 用 开 发 的必 然 趋 势 与 重 要 课 题 。 b应
ቤተ መጻሕፍቲ ባይዱ系统 编 码 方 式和 数据 流 问的编 码 转 换是 国际化 We b应 用 首 先 要 解 决 的 问 题 。不 同 于 本 地 化 系 统 , 国 际化系统不 能采 用语言受 限字符 编码方 式 , 其采用 的 编码 必须满 足 国际化的要求 , 能够支 持各种语 言 。 目 前 .在 国际 化 系统 中 ,通 常 采 用 U ioe字符 集 的 nc d
二
We b应用 的 国际化需要解决 的 问题 主要包 括 :第一 、 五 We b系统 字 符编码 方式 的选 择 ; 第二 、 客户端 与应 用 三 之 间如何 正确地进 行数据 的输 入, 出交互 , 输 即输入 、
国际化 应 用程 序 的核心 能力 是 应用能 根据 客 户 的语 言环境 提 供相 应 的语言 相关 界 面 , 因此 , 应用 中
一
际化要求 的字 符集, 它将 世界 上 的所 有字 符 映射成一 个 唯一 的代码 点( d on) c epit o 。在将 U ioe表示 的字 ncd 符 进行存储时 , 需要采用一定 的编码 方式 , 中 U F 8 其 T - 是 Uncd io e字 符集 的一种 可变 长 的编码 方式 , 多 6 最
个 字 节 . 于 1 7的 字 符 用 一 个 字 节 表 示 , A CI 小 2 与 SI
个 国际化 We b应用 ,针对 多种 语言 版本 只有 一个
系统实 现 , 系统可 以根据 客户 端的 系统语 言环境 进行
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对于一个面向全球的Web应用程序,按着不同国家的要求显示相关信息(称为国际化)显得尤为重要。
国际化的工作非常复杂和繁琐。
因为要翻译很多Web界面,信息格式等。
然而,Struts为我们提供了完成国际化工作的更容易的方式。
在本文将介绍如何使用Struts来简化国际化的工作。
一、处理客户端界面的编码问题由于Web浏览器可以使用不同的编码格式来解析客户端代码,这主要取决于用户的默认设置或偏好。
由于存在这种情况,因此,在服务端向客户端发送数据时,就必须使用和客户端一致的编码格式。
通常的做法是使用Internet上比较常用的UTF-8编码,这主要是因为UTF-8编码格式所描述的字符包括了世界上所有以知国家和地区的语言编码。
这样服务端就不用根据客户端的编码格式不断地调整服务端响应信息的编码格式了。
对于JSP页面来说,可以使用page指定来设置响应信息的编码格式,如下面代码所示:<%@ page contentType="text/html; charset=UTF-8" %>当然,如果我们在Web程序中使用了Struts框架,还可以在struts-config.xml文件中使用如下的代码来设置编码格式:<controller contentType="text/html; charset=UTF-8"/>如果使用上面的设置,所有通过.do或<forward>元素访问的页面都会继承这一编码设置。
但是如果单独访问JSP页面,就会绕过Struts的这个设置。
对于静态页面(如HTML)来说,需要使用<meta>元素来设置编码格式,如下面代码所示:<head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head>除了使用通用的UTF-8编码格式外,也可以从HTTP请求头字段Accept- Charset中获得客户端的编码格式。
然后根据这个编码格式来设置响应信息的编码格式。
然而,虽然根据HTML4.0规范,Web浏览器可以设置 Accept-Charset字段,但是有很多浏览器可以会忽略这一字段,因此,只使用这个字段来确定Web浏览器所使用的编码格式是不可靠的。
所以最好的国际化编码格式解决方案仍然是UTF-8。
二、本地化属性文件本地化最重要的部分就是根据用户所处的语言环境来显示响应语言的界面,如用户在英文操作系统下,就会显示英文界面,如果在中文操作系统下,就会显示中文界面。
最理想的情况是这种显示效果的切换是完全透明的。
在Struts中提供了这种技术,使我们可以更容易地实现透明地界面切换。
在Struts Bean标签库中有一个<bean:message>标签,它可以根据客户端浏览器所处的语言环境自动选择相应的属性文件来读取界面显示信息。
为了演示如何使用<bean:message>以及不同的属性文件来实现国际化的程序。
让我们先来看一个例子。
在本例中,选用了三个国家的语言环境(中文、英文和法文)来演示国际化的实现。
由于读者可能不便于输入法文,因此,法文信息仍然用中文代替,只是后面多了个“(法文)”作为标识。
我们需要如下四步来完成这个例子:【第1步】建立一个默认的属性文件在<samples工程目录>\src\struts目录中建立一个application.properties文件,内容如下:title = 这是一个国际化的web程序(默认值)name = 姓名(默认值)submit = 提交(默认值)application.properties文件是默认的属性文件,如果客户端浏览器所处的语言环境在服务端未找到相应的属性文件,<bean:message>标签就会从application.properties文件中读取字符串信息。
在Eclipse中编辑非ISO 8859-1编码格式的字符时,应使用在《属性(资源)文件乱码问题的解决之道》介绍的两个Eclipse插件,或使用native2ascii.exe命令进行转换。
否则在显示属性文件中的信息时会出现乱码。
【第2步】在struts-config.xml文件中配置属性文件在Struts中所有的属性文件都必须在struts-config.xml文件中配置。
否则<bean:message>标签就会由于无法找到相应的属性文件而抛出异常。
为了配置application.properties,需要在struts-config.xml文件中的<struts-config>标签中加入如下的代码:<message- , parameter="struts.application" key = "global"/>由于在struts-config.xml文件中已经有一个ErrorDescription.properties作为默认的属性文件,因此,application.properties文件要使用一个key加以标识。
在使用<bean:message>标签时必须要使用bundle属性指定这个key才能找到application.properties文件。
【第3步】加入不同语言的属性文件在这一步我们来加入中文、英文、法文的属性文件。
这三个属性文件的文件名如下:∙中文:application_zh.properties∙英文:application_en.properties∙法文:application_fr.properties将这三个文件放到<samples工程目录>\src\struts目录中。
它们的内容如下:application_zh.propertiestitle = 这是一个国际化的web程序name = 姓名submit = 提交application_en.propertiestitle = This is an internationalization web program.name = namesubmit = submitapplication_fr.propertiestitle = 这是一个国际化的web程序(法语)name = 姓名(法语)submit = 提交(法语)这三个属性文件是不需要在struts-config.xml中配置的。
Struts会自动根据客户端浏览器所处的语言环境来寻找这三个文件。
【第4步】编写JSP页面在这个JSP页面中使用了<bean:message>来根据客户端浏览器所处的语言环境来读取相应的属性文件中的内容。
在web根目录中建立一个global.jsp文件,代码如下:<%@ page pageEncoding="UTF-8" %><%@ taglib uri="/tags-bean" prefix="bean"%><html><head><title>国际化</title></head><body><bean:message key="title" bundle="global"/><p/><form action=""><bean:message key="name" bundle="global"/>:<input type="text" name="name"/><p/><input type="submit" value=<bean:message key="submit" bundle="global"/ > /></form></body></html>由于安装不同语言的操作系统很不方便,在这里我们采用另一种方法来模拟不同的语言环境测试这个程序。
首先在IE中使用【工具】>【Internet 选项】> 【常规】>【语言】来打开“语言首选项”对话框,使用“添加”按钮添加“中文 [zh]”、“英文 [en]”和“法语(法国)[fr]”,再添加一种其他语言,如“梵文 [sa]”。
添加后的界面如下图所示。
然后分别将这四种语言上移到列表顶端。
然后点击“确定”按钮保存设置。
在启动Tomcat 后,在IE中输入如下的URL:http://localhost:8080/samples/global.jsp根据语言设置的不同,在IE中会显示不同语言的界面,如中文和英文的页面分别如下面两个图所示。
如果在刷新时页面语言未更新,可能是因为IE的Cache的原因,读者可以启一个新的IE窗口,再进行测试。
读者在使用属性文件进行国际化时应注意如下三点:1. 由于语言还可以继续细分,如中文可以分为简体和繁体,英文也可以分为不同国家或地区的英文,如爱尔兰、澳大利亚等。
因此,对于更细化的语言,可以在属性文件后面再加一个代表国家或地区的后缀,如application_zh_TW.properties代表中国台湾所使用的繁体中文,application_en_AU.properties代表澳大利亚英文。
Struts在寻找属性文件时,会首先查找带有国家或地区后缀的属性文件,如果这类文件不存在,会继续查找只有语言后缀的属性文件,如果还不存在,最后会读取默认属性文件,也就是application.properties的内容。
假设我们在“语言首选项”中选择了“中文(台湾) [zh-tw]”,那么读取文件的顺序(从最左边开始,如果文件不存在,依次读取右边的文件)如下:application_zh_TW.properties > application_zh.properties > application.propertie s如果选择的语言是“中文 [zh]”,那么就直接从application_zh.properties开始读取。
2. 在建立属性文件时要注意,后缀的连接符为下划线( _ ),而不能用减号( - )。