搜档网
当前位置:搜档网 › Struts2的国际化,中英文切换

Struts2的国际化,中英文切换

Struts2的国际化,中英文切换
Struts2的国际化,中英文切换

Struts2的国际化,中英文切换

2012-12-23阅读142评论0

几年之前,应用程序开发者能够考虑到仅仅支持他们本国的只使用一种语言(或者有时候是两种)和通常只有一种数量表现方式(例如日期、数字、货币值)的应用。然而,基于web技术的应用程序的爆炸性增长,以及将这些应用程序部署在Internet 或其它被广泛访问的网络之上,已经在很多情况下使得国家的边界淡化到不可见。这种情况转变成为一种对于应用程序支持国际化(internationalization,经常被称做"i18n",因为18是字母"i"和字母"n"之间的字母个数)和本地化的需求。国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能。

Java国际化思路

Java程序的国际化思路是将程序中的标签、提示信息等放在资源文件中,程序需要支持国家/语言环境,则必须提供对应的资源文件。资源文件是key-value对,每个资源文件中的key不变,但value随不同的国家/语言变化。

Java程序的国际化主要通过如下3个类完成

Java.util.ResourceBundle:用于加载资源包

Java.util.Locale:对应一个特定的国家/地区、语言环境

Java.text.MessageFormat:用于将消息格式化

资源文件

为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容是很多的key-value对,其中key 是程序使用的部分,而value是程序的显示部分。

资源文件的命名可以是如下3种形式:

baseName_language_country.properties

baseName_language.properties

baseName.properties

其中baseName是资源文件的基本名称,用户可以自由定义,而language和country都不可随意变化,必须是Java 所支持的语言和国家。

Java支持的国家和语言

事实上,Java不可能支持所有的国家和语言,可以通过Locale类的getAvailableLocale方法获取支持的,该方法返回一个Locale数组,该数组中包含了所有支持的国家和语言。

Locale [ ] locales = Locale.getAvailableLocales();

下面是程序示例:

[java]view plaincopy

1package com.ascent.i18n.test;

2import java.util.*;

3public class LocalTest {

4public static void main(String[] args) {

5 Locale [] locales = Locale.getAvailableLocales();

6

7for(Locale locale:locales){

8 //输出所有支持的国家

System.out.print(locale.getDisplayCountry()+":"+locale.getCountry());

9

10 //输出所有支出的语言

System.out.println(locale.getDisplayLanguage()+":"+locale.getLanguage());

11 }

12 }

13}

程序会打印出所有支持的国家和语言

使用资源文件完成程序国际化

《1》首先编写两个资源文件,例如:

resource_zh_CN.properties

title=标题

resource_en_US.properties

title=title

《2》中文的可以使用jdk的native2ascii 命令进行转码Unicode编码。

命令:native2ascii resource_zh_CN..properties teme.properties

然后在将转好的编码拷贝替换到resource_zh_CN.properties,替换后是:

title=\u6807\u9898

国际化实例

[java]view plaincopy

14package com.ascent.i18n.test;

15import java.util.*;

16public class ResourceBundleTest {

17public static void main(String[] args) {

18 //设置本地区语言(默认)

19 Locale locale = Locale.getDefault();

20 //可以使用Local的常量设置具体的语言环境

21 //Locale locale = https://www.sodocs.net/doc/8c13665563.html,;

22 //根据地区不同加载不同的资源文件

23 ResourceBundle rb = ResourceBundle.getBundle("resource", locale);

24 //根据key获得value值

25 String title = rb.getString("title");

26 System.out.println(title);

27 }

28}

29

Java国际化包含占位符的消息

以上在资源文件配置的消息都是简单的消息,假如消息中含有参数,即有参数占位,我们

如何实现呢?例如下面消息:

英文:hello=Hello,{0}!Today is {1}.

中文:hello=你好,{0}!今天是{1}.

此时,我们需要使用MessageFormat类,该类有个很有用的静态的方法

format(String pattern,Object… values)

返回后面多个参数值填充前面pattern字符串,其中pattern字符串就是一个带占位符的字符串。

[java]view plaincopy

30package com.ascent.i18n.test;

31import java.util.Date;

32import java.util.Locale;

33import java.util.ResourceBundle;

34import java.text.*;

35public class MessageFormatTest {

36public static void main(String[] args) {

37 Locale locale = Locale.getDefault();

38 ResourceBundle rb = ResourceBundle.getBundle("resource", locale);

39 String hello = rb.getString("hello");

40 String result = MessageFormat.format(hello, "焦学理",new Date());

41 System.out.println(result);

42 }

43}

Struts 2的国际化入门

Struts 2国际化是建立在Java国际化的基础之上,一样也是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再取得该资源文件中指定key对应的消息---整个过程与Java程序的国际化完全相同,只是Struts2框架对Java程序国际化进行了进一步封装,从而简化了应用程序的国际化。

Struts 2中加载全局资源文件

Struts 2提供了很多加载国际化资源文件的方式,最简单.最常用的就是加载全局的国际化资源文件,加载全局的国际化资源文件的方式通过配置常量来实现。不管在struts..xml文件中配置常量,还是在在struts.properties文件中配置常量,只需要配置struts.custom.i18n.resources常量即可。

配置struts.custom.i18n.resources常量时,该常量值为全局国际化资源文件的baseName。

假如系统需要加载的国际化资源文件的baseName为properties/message,则我们

可以在struts.properties文件中指定如下一行:

struts.custom.i18n.resources= properties.message

或者更好的做法是在struts.xml文件中配置如下的一个常量:

访问国际化资源

Struts2即可以在JSP页面中通过标签输出国际化消息,也可以在Action类中输出国际化消息,不管采用哪种方式,Struts2都提供了支持, 使用起来非常简单。

Struts2访问国际化消息主要在如下3种方式:

1)为了在JSP页面中输出国际化消息,可以使用Struts2的标签,该标签可以指定

一个name 属性,该属性指定了国际化资源文件中的key.

2) 为了在Action类中访问国际化消息,可以使用ActionSupport类的getText方法,该方法可以接受一个name 参数,该参数指定了国际化资源文件中的key .

3) 为了在该表单元Label里输出国际化信息,可以为该表单标签指定一个key属性, 该key指定了国际化资源文件中的key.

以项目中的登陆国际化为例,下面我们要做的是在项目中src下添加properties文件夹,下面添加资源文件message_zh_CN.properties和message_en_US.properties

例如:

#资源文件的内容就是key-value对

message_zh_CN.properties内容:

loginPage=loginPage

errorPage=errorPage

welcomePage=welcomePage

showBooksPage=showBooksPage

message_en_US.properties内容:

loginPage=登陆页面

errorPage=错误页面

welcomePage=成功欢迎页面

showBooksPage=图书展现页面

提供了上面两份资源文件后,系统会根据浏览者所在的Locale来加载对应的语言资源文件.

[html]view plaincopy

44<%@ page language="java"contentType="text/html; charset=utf-8"%>

45<%@ taglib uri="/struts-tags"prefix="s"%>

46

47

48

49<s:text name="loginPage"/>

50

51

52

53

54

55

56

57

58

59

60

上面的JSP页面中使用了标签来直接输出国际化信息,也通过在表单元素中指定key属性来输出国际化信息.通过这种方式,就可以完成JSP页面中普通文本.表单元素标签的国际化.

如果在简体中文环境下,浏览该页面将看到如下图所示的页面

如果在控制面板中修改语言/区域,将机器的语言/区域环境修改成美国英语环境,再次浏览

该页面,将看到如下图页面

如果为了在Action中访问国际化消息,则可以利用ActionSupport类的getText方法.

下面是本示例应用中Action类的代码:

[java]view plaincopy

61public class LoginAction extends ActionSupport{

62public String execute(){

63if(getUsername().equals("ascent")&& getPassword().equals("ascent")){

64 ActionContext.getContext().getSession().put("user", this.getUsername());

65return SUCCESS;

66 }

67return ERROR;

68 }

69 //完成输入校验需要重写的validate方法(读取资源文件getText(String str))

70public void validate(){

71 //调用getText方法取出国际化信息

72if(getUsername()==null||"".equals(this.getUsername().trim())){

73this.addFieldError("username", this.getText("username.required"));

74 }

75if(this.getPassword()==null||"".equals(this.getPassword().trim())){

76this.addFieldError("password", this.getText("password.required"));

77 }

78 }

79}

通过在Action类中调用ActionSupport类的getText通过这种方式,就可以取得国际化资源文

件中的国际化消息。通过这种方式,即使Action需要设置在下一个页面显示的信息,也无需

直接设置字符串常量,而是使用国际化消息的key来输出,从而实现程序的国际化。

参数化国际化字符串(带有占位符)

许多情况下,我们都需要在运行时(runtime)为国际化字符插入一些参数,例如在输入验证

提示信息的时候。在Struts 2.0中,我们通过可以方便地做到这点。

《1》.如果需要在JSP页面中填充国际化消息里的占位符,则可以通过在标签中使

用多个标签来填充消息中的占位符。第一个标签指定第一个占位

符值,第二个标签指定第二个占位符值……依此类推。

实例中国际化资源文件中有如下国际化消息:

#带占位符的国际化信息

welcomeTip=欢迎,{0},您已经登陆成功!

《2》.如果需要在Action中填充国际化消息里的占位符,则可以通过在调用getText方法时使

用getText(String aTextName,List args)或getText(String key, String[] args)方法来填充

占位符。该方法的第二个参数既可以是一个字符串数组,也可以是字符串组成的List对象,从

而完成对占位符,字符串数组、字符串集合中第二个元素将填充第二个占位符,依此类推。

为了在Action类中输出占位符的消息,我们在Action类中调用ActionSupport类的getText方

法,调用该方法时,传入用于填充占位符的参数值。访问该带占位符消息的Action类如下:

[java]view plaincopy

80public String execute(){

81if(getUsername().equals("ascent")&& getPassword().equals("ascent")){

82 //调用getText方法取出国际化信息,使用字符串数组传入占位符的参数值( request范

围)

83 ActionContext.getContext().put("user", this.getText("welcomeTip",

new String[]{this.getUsername()}));

84return SUCCESS;

85 }

86return ERROR;

87 }

通过上面的带参数的getText方法,就可以为国际化消息的占位符传入参数了。

为了在JSP页面中输出带两个占位符的国际化消息,只需要为标签指定子标签即可。下面是welcome.jsp页面的代码:

[html]view plaincopy

88

89

90

91

92

93

94

95

96 request:${https://www.sodocs.net/doc/8c13665563.html,er}

97

98

99

上面的页面使用${https://www.sodocs.net/doc/8c13665563.html,er}输出的是Action类中取出的国际化消息,而通过

标签取出的是另一个国际化消息,且使用了标签为该国际化消息

的占位符指定了占位符值。登录成功进入后如图所示:

中英文切换

[java]view plaincopy

100Action

101

102

103

104package com.lxitedu.ant;

105

106import com.opensymphony.xwork2.ActionSupport;

107import com.opensymphony.xwork2.ModelDriven;

108

109public class Action extends ActionSupport implements ModelDriven {

110private static final long serialVersionUID = 1L; 111private User user = new User();

112

113@Override

114public String execute() throws Exception {

115return SUCCESS;

116 }

117

118@Override

119public User getModel() {

120return user;

121 }

122

123public String run() throws Exception {

124 System.out.println("Action.run()");

125return INPUT;

126 }

127}

128 user.java

129

130package com.lxitedu.ant;

131

132public class User {

133private String name;

134private String password;

135public String getName() {

136return name;

137 }

138public void setName(String name) {

https://www.sodocs.net/doc/8c13665563.html, = name;

140 }

141public String getPassword() {

142return password;

143 }

144public void setPassword(String password) {

145this.password = password;

146 }

147

148}

149资源文件

150

151messageResource_en_US.properties

152

153login=login

154password=password

155sub=submit

156cn=Chinese

157us= English

158

159messageResource_zh_CN.properties

160

161login=帐号

162password=密码

163sub=提交

164cn=中文

165us=英文

166 struts.xml

167

168

169"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 170"https://www.sodocs.net/doc/8c13665563.html,/dtds/struts-2.0.dtd">

171

172

173

174

175

176 /success.jsp

177 /index.jsp

178

179

180

181 182 /index.jsp

183

184

185

186

187

188

189 index.jsp

190

191<%@ page language="java" contentType="text/html; charset=UTF-8"

192 pageEncoding="UTF-8"%>

193<%@ taglib prefix="s" uri="/struts-tags" %>

194

195

196

197Insert title here

198

199

200

201 202

203

204

205

206

207

208

209

210

211 success.jsp

212

213<%@ page language="java" contentType="text/html; charset=UTF-8"

214 pageEncoding="UTF-8"%>

215<%@ taglib prefix="s" uri="/struts-tags" %>

216

"https://www.sodocs.net/doc/8c13665563.html,/TR/html4/loose.dtd">

217

218

219Insert title here

220

221

222

223 user Name:

224 password:

225

226

227

或者是

1.首先把Struts2的环境搭建起来,

2.建立一个action.测试i18n的。

3.下面这个是struts.xml的简单配置,里有2中properties文件的配置,一种是全局的,一种是局部的,

Xml代码

228

229

230"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

231"https://www.sodocs.net/doc/8c13665563.html,/dtds/struts-2.0.dtd">

232

233

234

235

236

239

240

241

242

243

244/index.jsp

245

246

247

4.根据struts2的配置,插件一个名字为test_en_US.properties和test_zh_CN.properties的配置文件,

test_en_US.properties里面的内容为:hello=hi,hello

test_zh_CN.properties里面的内容为:hello=\u4F60\u597D (注意了:这个是通过编码编译过来的,也可以试用MyEclipse的properties自动编辑转换实现)。

5.下面是jsp的展现页面:本人整理了以下几种实现方法,

Html代码

248<%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%>

249<%@ taglib prefix="s"uri="/struts-tags" %>

250<%

251String path = request.getContextPath();

252String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+p ath+"/";

253%>

254

255

256

257

258

259

260My JSP 'index.jsp' starting page

261

262

263

264

265

266

267

268

269中文

270英文

271This is my JSP page.

272

273property:

274text:

275i18n:

276

277

278

279

6.想要实现中英文切换,还要在action中加入这一一句话

Java代码

280Locale locale=new Locale("zh","CN");//(这个能根据你传来的值动态改变)

281ServletActionContext.getRequest().getSession().setAttribute("WW_TRANS_I18N_L OCALE", locale);

7.基本上可以实现动态链接切换中英文了,不过,还有个小问题,需要解决,那就是,需要点击2下中文才能切换到中文,

英文同样也是,这个问题怎么解决呢?

8.想解决那个问题其实很简单,配置一个fitler拦截器就行了,这个拦截器最好配置在struts2的拦截器前面,

拦截器的内容大概是:

Java代码

282String local=arg0.getParameter("local");

283if(local!=null){

284String loc[]=local.split("_");

285Locale locale=new Locale(loc[0],loc[1]);

286((HttpServletRequest)arg0).getSession().setAttribute("WW_TRANS_I18N_LOCALE", locale);

287}

288arg2.doFilter(arg0, arg1);

这样就能实现动态切换中英文了。

Java多方式实现文件上传

在Struts 2中实现文件上传 前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题,所以今天我们就来讨论一下这个问题。 实现原理 Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。 具体实现 前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts 作为框架的。以下是例子所依赖类包的列表: 清单1 依赖类包的列表 首先,创建文件上传页面FileUpload.jsp,内容如下: <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %> <% @ taglib prefix = " s " uri = " /struts-tags " %> Struts 2 File Upload

springmvc原理

1.springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。 为什么要使用Spring: AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用AOP后,公共服务(比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词倒置所表明的,IOC 就像反过来的JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straightconstruction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。 Spring即使一个AOP框架,也是一IOC容器。Spring 最好的地方是它有助于您替换对象。有了Spring,只要用JavaBean属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。 Spring 框架是一个分层架构,由7 个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean 的方式,如图 1 所示。 组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: 核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 Spring 上下文:Spring 上下文是一个配置文件,向Spring框架提供上下文信息。Spring 上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。 Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring框架中。所以,可以很容易地使Spring 框架管理的任何对象支持AOP。Spring AOP

struts2复习题(含答案)

Struts2复习题 1.以下属于struts2的控制器组件是: 2.以下属于struts2的体系结构的是:(多选) 控制器组件配置文件 3.以下属于struts2配置文件中的配置元素是:(多选) A. B. C. D. 4.关于struts1和struts2对比的说法正确的是: 要求Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO 类 中的Action不是线程安全的,而struts2中的Action是线程安全的 和struts2中都使用ActionForm对象封装用户的请求数据 使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值 5.以下关于ValueStack说法正确的是:(多选) A.每个Action对象实例拥有一个ValueStack对象 B.每个Action对象实例拥有多个ValueStack对象 中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中 会在请求开始时被创建,请求结束时消亡 6.关于struts2配置文件说法正确的是: A.必须在WEB-INF/classes目录下 B.名字必须为 C.配置Action时,必须配置包信息 D.使用元素配置转发 7.在struts2配置中用()元素来配置常量: A. B. C. D. 8.关于struts2包的说法正确的是: 框架使用包来管理常量 框架定义包时必须指定name属性 框架中配置包时,必须继承自struts-default包,否则会报错 框架中使用包来管理Action 9.struts2中获取Servlet API的方法正确的是:(多选) A.使用ActionContext对象以解耦合的方法访问Servlet API B.使用ServletActionContext对象以解耦合的方式访问Servlet API C.使用ActionContext对象以耦合的方式访问Servlet API D.使用ServletActionContext对象以耦合的方式访问Servlet API 10.struts2动态调用的格式为: ! 11.如果要实现struts2的数据校验功能 A.普通Action类可以实现 B.继承自Action接口可以实现 C.继承自ActionSupport类可以实现 D.继承自ActionValidate类可以实现

SSH题库

1. SSH中,依次处理的哪一层的实现? D A.Struts –业务逻辑层;Hibernate-表现层;Spring-持久层 B.Struts-表现层;Hibernate-业务逻辑层;Spring-持久层 C.Struts-持久层;Hibernate-表现层;Spring-业务逻辑层 D.Struts-表现层;Hibernate-持久层;Spring-业务逻辑层 2. 在Struts实现的MVC框架中,(A)类是包含了excute方法的控制器类,负责调用模型的方法,控制应用程序的流程。 A. Action B. EJB C. ActionServlet D. JSP 3. 在基于Struts框架的Web应用中,下面关于Action类的说法正确的是(C)。 A. Action类属于模型组件 B. Action类主要用来完成实际的业务逻辑 C. Action类负责调用模型的方法,更新模型的状态,并帮助控制应用程序的流程 D.在Web应用启动时会自动加载所有的Action实例 4. 下面关于数据持久化概念的描述,错误的是(D)。 A.保存在内存中数据的状态是瞬时状态 B.持久状态的数据在关机后数据依然存在 C.数据可以由持久状态转换为瞬时状态 D.将数据转换为持久状态的机制称为数据持久化 5. 下面关于Hibernate的说法,错误的是(C)。 A.Hibernate是一个“对象-关系映射”的实现 B.Hibernate是一种数据持久化技术 C.Hibernate是JDBC的替代技术 D.使用Hibernate可以简化持久化层的编码 6. 在使用了Hibernate的系统中,要想在删除某个客户数据的同时删除该客户对应的所有订单数据,下面方法可行的是(B)。 A.配置客户和订单关联的cascade属性为save-update B.配置客户和订单关联的cascade属性为all C.设置多对一关联的inverse属性为true D.设置多对一关联的inverse属性为false 7. 执行下面的hql查询,关于返回值的说法,正确的是(B)。 select https://www.sodocs.net/doc/8c13665563.html,ername,https://www.sodocs.net/doc/8c13665563.html,erid from https://www.sodocs.net/doc/8c13665563.html,er u where u is not null A.语法错误,不能执行 B.返回一个类型为List的实例 C.返回一个数组 D.当返回结果只有一条时,返回一个数组 8. 下面创建Criteria对象的语句中正确的是(D)。 A.Criteria c = query.createCriteria(); B.Criteria c = query.addCriteria(); C.Criteria c = session.createCriteria(); D.Criteria c = session.createCriteria(User.class); 9. 下面关于“依赖注入”的说法,错误的是(D)。 A.将组件间的依赖关系采取配置文件的方式管理,而不是硬编码在代码中 B.降低了组件间的耦合,使程序更容易维护和升级 C.促进了“面向接口”编程,使构建大规模程序更轻松 D.需要定义大量接口,增加了编码复杂度 10. 关于Spring的说法错误的是(C)。

struts2国际化

国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能。 其实,Struts 1.x在此部分已经做得相当不错了。它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用标志输出即可。 不过,所谓“没有最好,只有更好”。Struts 2.0并没有在这部分止步,而是在原有的简单易用的基础上,将其做得更灵活、更强大。 国际化Hello World 下面让我们看一个例子——HelloWorld。这个例子演示如何根据用户浏览器的设置输出相应的HelloWorld。 1.在Eclipse创建工程配置开发和运行环境(如果对这个步骤有问题,可以 参考我早前的文章《为Struts 2.0做好准备》)。 2.在src文件夹中加入struts.properties文件,内容如下: struts.custom.i18n.resources=globalMessages Struts 2.0有两个配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。 o struts.xml用于应用程序相关的配置 o struts.properties用于Struts 2.0的运行时(Runtime )的配置 3.在src文件夹中加入globalMessages_en_US.properties文件,内容如下: HelloWorld=Hello World! 4.在src文件夹中加入globalMessages_zh_CN.properties文件,内容如下: HelloWorld=你好,世界! 在此想和大家分享一个不错的编写properties文件的Eclipse插件 (plugin),有了它我们在编辑一些简体中文、繁体中文等Unicode 文本时,就不必再使用native2ascii编码了。您可以通过Eclipse中的软件升级(Software Update)安装此插件,步骤如下:

struts2题目

1.下面关于Struts2描述正确的是()。 A. Struts2是线程安全的 B. Strut2为每个请求都只生成一个Action实例 C .Strut2是在Struts1基础上发展起来的 D. Struts2只支持jsp视图组件 2.Struts2配置包时,必须继承struts-default包,在下 面的哪个文件中可以找到struts-default包的配置()。 A.default.properties B. struts-message.properties C. struts.dtd D.struts-default.xml 3.Struts2默认的处理结果类型是()。 A. dispatcher B. redirect C. chain D. 以上说法都不正确 4.在Struts2框架中,实现Action接口的作用是()。 A.实现其中的execute()方法 B.实现数据校验 C.实现国际化 D.规范Action类 5.在Struts2中动态方法调用的格式为()。 A. ActionName_methodName.do B. ActionName!methodName.do C. ActionName_methodName.action D. ActionName!methodName.action 6.在Struts2中自定义的类型转换器必须实现的接口是 ()。 A.Convert B.TypeConverter C. StrutsTypeConverter D. StrutsConvert 7.在Struts2中,Action类中的属性从表单获取用户输入 的值,以下哪个组件将表单的值解析出来赋给Action ()。 A. ActionServlet B. Action C. 拦截器栈 D. HttpServletRequest 8.在Struts2中,关于

Struts2+Hibernate架构教程课后参考答案

第1章 Struts2框架技术入门 1.5 习题 1.5.1 选择题 1.D 2.A 3.C 4.B 5.B 1.5.2 填空题 1.MVC 2.Struts1和WebWork 3.IBM 4.FilterDispatcher 5.JSP、Struts2标签 1.5.3 简答题 1.简述MVC设计模式的工作流程。 答:MVC设计模式工作流程是: (1)用户的请求

Struts2配置Result

配置Result 一个result代表了一个可能的输出。当一个Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出。 Results配置由两部分组成:一部分是result映射,另一部分是result类型。 1.结果映射 在struts.xml文件中,使用result元素来配置result映射。result元素有两个可选的属性: 在Struts2中允许定义一个默认的Result类型,这是通过result-type元素来定义的。在框架的默认配置文件struts-default.xml中,在struts-default.xml包中有如下的一个配置: result-type元素的default属性指定名为dispatcher的结果类型, dispatcher结果类型使用ServletAPI中的ResultDispatcher将请求导向到目 标资源(通常是JSP页面)。如果在使用result元素配置result映射时,没有使用 type类型,那么框架就将使用默认的dispatcher类型。 由于Struts2中的包是可以继承的,所以我们定义的package只要继承了 struts-default包,因此也继承了默认的结果类型,所以可以省略result元素的 type属性。 如果没有指定result元素的name属性,那么框架将把它命名为”success”。 2.结果类型 在框架调用Action对请求进行处理之后,就要向用户呈现一个结果视图,Struts2支持多种类型的视图,这些视图是由不同的结果类型来管理的。 一个结果类型就是实现了com.opensymphony.xwork2.Result接口的类,在Struts2中定义了多种结果类型,如下表所示:

Struts1学习笔记总结

Struts1 (1) Struts1和Servlet的关系 (1) 创建第一个Struts1项目 (1) 例子1: (3) 总结重点:struts1的工作流程(基于MVC模式的) (7) 一.普通的Servlet的工作流程 (7) 二.Structs1的工作流程(和上面的对比记忆) (8) Struts标签 (9) Bean标签 (9) html标签 (10) logic标签(逻辑标记) (12) i18n(国际化) (13) Struts1 Struts1和Servlet的关系 Jsp+Servlet+Javabean ActionForm和VO的区别: 一样的内容,不一样的作用 ActionForm只接收前台表单传来的数据 VO是conga后台提取的数据向前台传递 创建第一个Struts1项目 新建一个web项目,选择1.4即可 右键----MyEclipse----Add Struts Capacity

---------------Struts控制文件的路径 TLD(标签) 1) 2):显示信息 3):逻辑标签 struts-config.xml

struts2_day03笔记

Struts2 框架第三天 今天重点内容安排: 第一天:struts2 开发流程、访问Action,Action方法调用,结果集类型 第二天:获取请求参数,请求数据校验机制,拦截器 1、V alueStack 值栈的存储原理和相关操作 2、Ognl 表达式语言语法 3、struts2 页面控制标签 4、struts2 form表单相关标签 重点难点:值栈和Ognl 1.值栈和Ognl表达式 1.1.什么是Ognl Ognl 对象导航图语言Object Graphic Navigation Language,类似EL,比EL ${}语法要强大很多,Struts2框架使用OGNL作为默认的表达式语言必须要引入struts标签库 EL Expression Language 表达式语言,用来获取JSP页面四个域范围数据 pageContext、request、session、application )

Ognl 主要用法: 1、访问OGNL上下文值栈对象获取数据(最重要) 2、操作集合对象(结合struts2 标签库使用)---- 生成checkbox 、生成select 1.2.什么是值栈ValueStack接口! 值栈ValueStack 实际上是一个接口,struts2 Ognl使用都是基于值栈完成的 Struts2 内部提供OgnlValueStack的接口实现类,实现了值栈接口! 前端控制器每一次请求都会创建一个值栈对象源码:

一次请求对应一个值栈对象值栈生命周期= request 生命周期的!! 值栈是struts2 一个数据结构,贯穿整个Action实例生命周期(request生命周期),一次请求对应一个Action实例,一个Action实例对应一个值栈实例 值栈保存了Action 和其它常用web对象的引用,通过值栈,间接操作这些对象!1.3.值栈的存储结构 1:采用标签查看值栈结构图:

struts2教程(完全版)

Yaio 4 一、准备工作及实例 4 1.解压struts- 2.1.6-all.zip 4 2.六个基本包 4 3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 5 (5)其它配置文件 5 4.让MyEclipse提示xml信息 5 5.如何使用alt+/提示 5 6.实例 5 7.开启struts2自带的开发模式常量 7 8.vo传参模式 8 9.ModerDriven传参模式(不建议采用) 8 10.为什么要使用struts2代替struts1.x 9

二、struts.xml配置及例程 9 1.配置文件的优先级 9 2.配置形式 9 3.package配置相关 10 4.分工合作include:指定多个配置文件 12 5.tomcat认证访问 12 6.初识拦截器 13 7.Action中的method属性 15 8.使用ForwardAction实现页面屏蔽。 17 8.使用default-Action配置统一访问 17 小结Action 18 9.使用通配符 18 10.使用0配置:ZERO Annotation 19 11.Result配置详解 19 12.异常处理 24 三、在Action获取Scope对象 25 方式一、与Servlet解耦合的非IOC方式 25

方式二、与Servlet解耦合的IOC方式 27 方式三、与Servlet耦合的非IOC方式 27 方式四、与Servlet耦合的IOC方式 28 四、OGNL与ValueStack(VS) 29 1.值栈入门 29 2.OGNL入门 31 3.普通方法访问 31 4.静态方法访问 31 5.默认类Math的访问 32 6.调用普通类的构造方法 32 7.集合对象初步 32 8.集合对象进阶 33 9.N语法top语法 34 10.获取Stack Context中的信息 35 11.总结$ # %的区别 35 12.总结OGNL[重点] 35 五、拦截器 36

SSH整合入门详解

Struts+Spring+Hibernate整合入门详解 基本概念和典型实用例子。 一、基本概念 Struts:作为基于MVC 模式的Web 应用最经典框架,两个项目Struts 和webwork已经集成,成为现在的Struts2。目前的最新版本是2.0.9(2007-7)。 Spring:是一个轻型的容器,利用它可以使用一个外部XML 配置文件方便地将对象连接在一起。每个对象都可以通过显示一个JavaBean 属性收到一个到依赖对象的引用,留给您的简单任务就只是在一个XML 配置文件中把它们连接好。 Hibernate 是一个纯Java 的对象关系映射和持久性框架,它允许您用XML 配置文件把普通Java 对象映射到关系数据库表。使用Hibernate 能够节约大量项目开发时间,因为整个JDBC 层都由这个框架管理。这意味着您的应用程序的数据访问层位于Hibernate 之上,完全是从底层数据模型中抽象出来的。 三种技术到目前已经比较成熟,而且他们都是免费的!让我们对三者集成进行一个初览(简单而不专业): 我们用Struts实现从Web(网页,MVC中的View)到后台系统的映射(Web Action),然后由Spring管理这些Action,把它们作为Bean和其他对象一起处理。这些Bean之间处理业务逻辑、数据、系统状态等,且它们被Spring统一管理,为了区分,就算大概包括MVC的MC部分吧。然后需要持久化的数据由Spring和Hibernate之间的接口交由Hibernate处理(这个属于持久层)。 必须基础:只要Java基础,一点HTML知识、XML基础就可以了。本文的目的就是从零开始建立第一个Struts+Spring+Hibernate应用。即使它是最简单的,我们也希望初学者能够从中理解一些思想,其中也包括系统架构的设计思想。 二、环境搭建 我们坚持免费才是硬道理,开源才是好事情,所以我们全部使用开源免费的工具和软件。如果使用MyEclipse,其中的工具将有助于简化下面演示的工程开发,但本文不用。 所需软件包如下表:

Struts2中 struts.xml的Action配置详解

Struts2中struts.xml的Action配置详解 使用package可以将逻辑上相关的一组Action,Result,Interceptor等组件分为一组,Package 有些像对象,可以继承其他的Package,也可以被其他package继承,甚至可以定义抽象的Package。 由于struts.xml文件是自上而下解析的,所以被继承的package要放在继承package的前边。Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀。使用name space可以有效的避免action重名的冲突,例如每一个package都可以有自己独立的Men u和Help action,但是事项方式各有不同。Struts2标签带有namespace选项,可以根据namespace的不同向服务器提交不同的package的action的请求。 “/”表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个pa ckage中查找。 “”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找。 例如,有如下配置: CODE: greeting.jsp bar1.jsp

JavaEE开发四大常用框架.

我们对 Java EE的框架有过很多介绍, 本文将对 Java EE中常用的四个框架做一下系统的归纳,希望大家喜欢。 Struts Struts 是一个基于 Sun Java EE 平台的 MVC 框架,主要是采用 Servlet 和 JSP 技术来实现的。 Struts 框架可分为以下四个主要部分,其中三个就和 MVC 模式紧密相关: 1、模型 (Model ,本质上来说在 Struts 中 Model 是一个 Action 类(这个会在后面详细讨论 ,开发者通过其实现商业逻辑,同时用户请求通过控制器 (Controller 向 Action 的转发过程是基于由 struts-config.xml 文件描述的配置信息的。 2、视图 (View , View 是由与控制器 Servlet 配合工作的一整套 JSP 定制标签 库构成,利用她们我们可以快速建立应用系统的界面。 3、控制器(Controller ,本质上是一个 Servlet ,将客户端请求转发到相应的 Action 类。 4、一堆用来做 XML 文件解析的工具包, Struts 是用 XML 来描述如何自动产 生一些 JavaBean 的属性的, 此外 Struts 还利用 XML 来描述在国际化应用中的用户提示信息的(这样一来就实现了应用系统的多语言支持。 Spring Spring 是轻量级的 Java EE应用程序框架。 Spring 的核心是个轻量级容器(container ,实现了 IoC (Inversion of Control 模式的容器, Spring 的目标是实现一个全方位的整合框架, 在 Spring 框架下实现多个子框架的组合, 这些子框架之间彼此可以独立, 也可以使用其它的框架方案加以替代, Spring 希望提供 one-stop shop的框架整合方案。

struts2国际化配置

前提条件:strut2的必须架包已经引入,struts2的配置文件全部配置完成 1.首先创建一个struts.properties在src目录下,服务器启动时候会自动加载该文件,在这个文件中写入struts.custom.i18n.resources=globalMessages,服务器会自动选择前缀为globalMessages资源文件。(或者你在你的struts.xml文件中添加服务器加载struts.xml的时候会加载国际化资源文件); 2.在src目录下创建资源文件英文globalMessages_en.properties 中文globalMessages_zh.properties。globalMessages_en.properties 文件内容为home=home globalMessages_zh.properties文件内容为home=¥u9996¥u9875 3.在页面端获得资源文件信息。<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> My JSP 'test.jsp' starting page struts2的国际化分三种情况 1.前台页面的国际化, 2.Action类中的国际化, 3.配置文件的国际化。 首先指定全局的国际化资源文件: 在配置文件struts.xml中引入 (注意位置)

STRUTS2模拟(答案)

STRUTS2模拟测试(开卷——定时90分钟) 一、填空题 1.Struts2框架由___Struts1________和____WebWork_______框架发展而来。(Struts&WebWork ) 2.Struts2以___WebWork______为核心,采用____拦截器_______的机制来处理用户的请求。(WebWork,拦截器)3.构建Struts2应用的最基础的几个类库是struts-core-2.1.6.jar___________、__xwork-2.1.2.jar_________、__ognl-2.6.11.jar_________ 、_freemarket-2.3.13、_commons-logging-1.0.4.jar_________以及 ___commons-fileupload-1.2.1.jar________。 4.Struts2中的控制器类是一个普通的_____class______。Class 5.如果要在JSP页面中使用Struts2提供的标签库,首先必须在页面中使用taglib编译指令导入标签库,其中taglib编译指令为_<%@ taglib prefix=”s” uri=”/struts-tags”%>__________。<%taglib uri="/struts-tags" prefix="s"%> 6.在Struts2表单标签库中,表单标签为___________。 7.ActionSupport类实现了____Action_______接口和_Validateable__________等接口。 8.通过控制器类中的___validate()________方法来输出校验错误信息。 二、选择题 1.不属于Action接口中定义的字符串常量的是_____B______。B A.SUCCESS B.FAILURE C.ERROR D.INPUT 2.在控制器类中一般需要添加相应属性的____A_______和____C_______。AC A.setter方法 B.as方法 C.getter方法 D.is方法 3.控制器需要在____B_______配置文件中进行配置。B A.web.xml B.struts.xml C.struts2.xml D.webwork.xml 4.不属于Struts 2表单标签库的是_____D______。D A. B. C. D.