Java实战之STRUTS第六章

Java实战之STRUTS第六章
Java实战之STRUTS第六章

第六章国际化

6.1 用另外一个名字

Struts框架结构的另一个关键性是它可以获取用户输入,对输入进行校验,并在需要时再次显示输入数据允许用户对错误的输入进行修改。为了能够再次显示用户输人的数据,Struts提供了可以生成HTML控件的标签,然后用JavaBean对这些控件进行填充。为了提示用户需要修改哪些数据,Struts框架结构还提供了可以在页面上显示对应消息的系统。

如果应用程序中的这些模块都是使用硬编码的字符串来实现这些功能(尽管这样做很容易),但是也会导致很难修改这些字符串。要改写一个域标签或者消息,表现层代码和Java 代码都需要进行修改(这些修改很可能涉及到不同的开发小组)。这也意味同一个应用程序在不重新进行编译的情况下很难重用于其他的语言。

为了避免这样的问题,Struts框架结构允许程序员在一个单独的文件中定义标签和消息。该文件被称为资源包(resource bundle)(java.util.ResourceBundle)。当需要输出一个标签或者的时候,应用程序就通过键值来引用它们。框架结构在运行时刻就通过键值来获取对应的符串。图像或图像按钮的源路径、以及它们对应的文字提示都可以从资源包中获取。资源包Java国际化特性中的一部分。和Java一样,Struts最初就具有国际化的特性。这也是Struts 架结构能够在世界上如此流行的一个原因。

定义:国际化是指一个应用程序的设计能够保证在不需要修改内部引擎的情况下,可以适应不同的语言和地区。有些时候,国际化也被简称为i18n,这是因为internationalization 的第一个字母i到最后一个字母n一共有18个字母。

Struts直接利用了Java提供的那些标准特性。因此程序员可以继续使用同样的技术来本地自己的模块(这些模块不需要依赖于Struts框架结构)。

定义本地化是指通过增加和地区相关的模块以及对字符串进行翻译来使得软件可以适用于某个特定的地区或者语言的过程。本地化(localization)通常简称为lion,这是因为在l 和n间一共有10个字母。通常,本地化中最耗时的部分就是对字符串进行翻译。其他类型的资源,例如声音以及图像,在需要的时候也要进行本地化。本地化同时也验证输出的时间、数字和货币都同对应的区域一致。

在本章中,我们首先了解为什么这么多的程序员都对自己的应用程序进行本地化修改,以及Java国际化特性是如何工作的。然后讨论Struts的i18n组件以及如何使用它们来本地化自己的应用程序。那些很常见的Struts插件,例如Struts V alidator和Tiles,都可以被本地化。在本章的最后我们会说明如何对这些组件进行本地化。

6.1.1为什么进行本地化

现在,大家都在花大力气来开发自己的基于Web应用程序。每个企业都是希望从他们的投资里得到最大的好处。通过覆盖五湖四海的互联网,每一个基于Web的应用程序都可以被世界范围内的用户访问。如果一个应用程序可以被本地化,则就意味它可以立刻被更多的用户访问。对于那些具有多种语言的国家,例如比利时,加拿大,瑞士甚至美国都更加有意义。

但不幸的是,很多应用程序都不能够被国际化,因此对它们进行本地化修改会是一个浩大的工程。而Struts内置了国际化特性,因此基于Struts的大多数应用程序都可以不费什么力气的进行本地化。如果一个基于Struts的应用程序从一开始构造就使用Struts的国际化特性,则它的本地化就是简单的对一个消息文件进行翻译。

就算是不需要对应用程序进行本地化,使用本章说明的技术来构造应用程序也可以帮助你构造一个容易维护的更加健壮的应用程序。本地化过程中会将那些常见的资源分组存放在

一起,这样程序员就可以对它们一起进行检查和修改。那些很难本地化的应用程序一般都具有其他的毛病。很多国际化技术都是基于一些常见的好的编程经验:例如封装、模块化和松耦合。

尽管字符串是本地化中最重要的部分,但是它不是唯一要考虑的事情。时间、货币和图像都需要进行本地化。Java提供了对于日期和货币进行处理的功能,Struts提供了基于地区选择图像的功能。

6.1.2 Java的国际化功能

为了具有国际化特性,一个应用程序应该:

●分辨不同的区域

●在同一个运行系统中针对不同的区域显示合适的消息和标签

●在不重新编译运行系统的情况下,可以增加对新区域的支持

●针对给定的区域和语言,对本地化敏感的那些元素:日期,货币等自动进行格式化

Java通过提供以下的三个关键类来帮助应用程序满足国际化的要求:Locale 、RecourceBundle和MessageFormat。如表6-1所示:

我们下面依次讨论它们。

1.Locale

Java对于国际化提供的核心就是Locale对象(java.util.Locale)。在一个Local对象中可以捆绑保存语言、国家和一个可选变量(V arant)。语言和国家是ISO标准定义的[ISO-3166,iso-639]。表6-2列出了一些语言和国家的代码。

另外一个可选variant一般用来代表某种方言,但龃可以是应用程序使用的某个代码(比如浏览器的代码)。Struts框架结构并没有使用variant域。但是因为Struts是使用标准类库;因此应用程序可以在需要的时候使用variant域。

通过在构造函数中传递一个语言和地区代码就可以创建一个Locale对象。例如,一个说法语的加拿大区域就可以这样创建:

locale = new Locale("fr", "CA");

Locale的常见用法是将一个Locale对象传递到某个辅助函数中去,该辅助函数根据Locale对象的设置来格式化输出结果。那些可以根据区域修改自己行为的模块都被称为对区域敏感(locale-sensitive)模块。Locale对象仅仅为国际化操作提供一个区域的定义。其实是那些区域敏感的方法来完成实际的本地化工作。

JVM提供的一些方法就是区域敏感的,通过它们就可以根据给定的Locale对象来产生数字、货币和日期。

Stmts国际化的特性,请参看6.2节。

Locale对象可以根据自己的设置来生成用户友好的描述语言。当你需要向用户显示当前的区域设置或者显示全部可以支持的区域时,该特性就很有用。同时还有好几个方法来使用Locale对象生成用户友好的Locale对象设置的描述信息。程序员可以重载这些方法来显示其他Locale对象的描述信息。表6-3显示了两个例子。

Locale对象是不能修改的。如果需要改变Locale的设置,需要创建一个新的Locale对象用新的对象替换老对象。在JVM中已经定义了好几个Locale对象。具体秸息请参看Java (java.util.Locale).

2. ResourceBundle

在设计一个具有国际化特性的应用程序时,最初的关注点应该是用户界面。那些在应用序中使用的菜单项和对话框都被称为程序资源。在很多程序语言设计中,这些用户界面都可通过一个单独的文件进行转载。对于Java而言,该文件就是资源包(resource bundle)。Java的ResourceBundle类(java.util.ResourceBundle)并不是用来从文件中读取整个应用程序的用户界面,但是它可以很方便地存储和获取用户界面中元素使用的字符串和消息。针对一个用的区域,应用程序可以通过ResourceBundle来获取恰当的元素。应用程序可以不用考虑用户域而使用同一个键值,但是ResourceBundle返回的String或者Object却是不同的。要增加对外—个区域的支持,仅仅需要在资源包中增加对应的资源文件就行了。

定义一个资源包(Resource Bundlejava.util.ResourceBundle)其实是属性对象(java.util.Properties)的集合。每一个属性对象都针对某个区域。而区域就是由使用地区和语言定义的Locale对象来指定的。当应用程序请求某个键值对应的资源时,也可以在请求中指定区域。如果资源包中该区域对应的属性对象不存在,则使用区域最为接近的属性对象。在实际上,ResourceBundle是使用继承的概念。如果区域最贴近的属性对象还是没有找到,则视图获取下一个最贴近的属性对象,依此类推。资源包中可以包含一个默认的属性对象。如果没有更好的选择时,就使用该默认的属性对象。

ResourceBundle是一个抽象类,系统提供了两个实现:ListResourceBundle和PropertyRsourceBundle。其中PropertyResourceBundle类(java.util.PropertyResourceBundle)用来关联字符串消息集合。而基于Struts的应用程序也大量地使用该类。通过使用如下的静态方法,就可以从属文件(java.util.Properties)中获取对应的消息字符串:message = ResourceBundle.getBundle("application",userLocale);

属性文件可以使用任何文本编辑器创建的简单文本文件。而其对应的区域可以使用它的

件名进行说明。在文件名扩展名前,将其对应的语言和国家代码附加在文件名后面。在上面代码中,使用application作为参数,该参数可以引用一系列的属性文件组,如下:一个属性文件中包含的是键——值对。其中的键是应用程序用来获取特定消息的。而对应的值是应用程序使用的字符串。每一个区域对应的文件中都包含了根据该语言和区域进行了翻译的消息字符串。

一个针对es_ES区域(西班牙语/西班牙)的属性文件可能类似于:

greetings = Hola

farewell = Adios

inquiry = Como estas?

同样,针对fr_FR(法语/法国)的属性文件可能是这样的:

greetings = Bonjour.

farewell = Au revor.

inquiry = Comment allez –vous?

当请求区域的属性文件不存在时,就使用默认的属性文件。这也蚌味着,服务器使用的默认区域并不需要提供一个单独的属性文件。如果服务器的默认区域是en-US,你可以提供一个application.properties文件,而不需要考虑创建一个重复的application-en-US.properties 文件。仅仅使用那个默认的属性文件就足够了:

greetings = Hello

farewell = Goodbye

inquiry = How are you?

对那些对区域敏感的模块,Struts框架结构会自动使用默认的资源包。ListResourceBundle类(java.util.ListResourceBundle)可以用来装载那些非字符串的对象。如何使用ListResourceBundle已经超出了本章要讨论的范围。但是,如果应用程序要使用ListResourceBundle,它还是会利用由Struts框架结构管理的区域对象。对于标准的Java对象而言,同样的原则适用于任何区域敏感的对象。

注意因为历史的原因,struts1.1/1.0并不使用java.util包中的ResourceBundle类。但是,Struts版本的设计目标就是和标准的ResourceBundle提供同样的功能。为了开发自己的应用程序,你可以考虑换一个类。

3. MessageFormat.

任何消息,如果想对用户有用,都需要包括运行时刻的信息或者和当时用户相关的数据。这些数据可能是记录号、当前日期或者总数。对于一个非国际化的应用程序,这些结果一般都是将带有运行时刻变量的字符串连接起来的,同时进行一些格式化操作。

对于一个具有国际化特性的应用程序,这样简单的将字符串连接起来并不是一个好的选择。不同用户使用的语言可能完全不一样,因此字符串并不能进行硬编码。相反,我们是从资源文件中获取对应的消息模板,然后将数据集成进去。MessageFormat类(java.text.MessageFormat)就是帮助用户在运行时刻生成具有可替换参数的消息。

一个运行时刻生成的消息可能是:

The disk named MyDisk contains 300 fites.

而该消息可以基于如下的模板:

The disk named{0}contains{1}files.

在运行时刻,应用程序可以将一个对象组传递给格式化器来将两者结合在一起:

如我们看到的,Struts框架提供了如下得组件来帮助用户实现如下目标:

●管理每一个用户的区域。

●为每一个支持的区域,自动装载消息包。

●将运行时刻参数插入到消息模版。

6.2 Struts的国际化组件

在创建Struts前,Craig McClanahan有过多年通过电话联系来管理一个在比利时开发的软件项目的经历。Struts的很多基本想法其实都源自那个项目,其中就包括了从底层就提供对国际化的支持。Struts的国际化声望还表现在其开发队伍上,Struts的开发小组来自澳大利亚、法国、苏格兰和美国。另外巧合的是,本书使用的例子以Bordeaux(波尔多)为例子,而Bordeaux和Struts的出生地(Brussels)不远。

如表6-4所示,Struts提供了好几个国际化模块,这些模块协同工作,以帮助用户本地化自己的应用程序。

6.2.1 Session中的Locale属性

正如13.1.2节所示,全部的标准Java本地化工具都是基于Local对象的。因此本地化应用程序的一个任务就是为每一个用户维护一个Locale对象。

Java的servlet框架结构提供了一个机制,可以将每个用户的对象临时一存放在一个名为对话上下文(servlet context)的对象中。默认情况下,Struts将每一个用户的Locale属性用一个众所周知的键值存放在对话上下文中。在初始化时,该属性被设置成服务器的默认区域。如果应用程序使用用户的区域代替了该对象,则框架结构中的区域敏感的对象就会使用该用户区域,而不是使用默认的区域来选择消息字符串。

注意ServletRequest.getLocale()会返回什么呢?它会返回由浏览器设置的区域(通过HTTP请求中Accept-Lanaguage头来传递)。不幸的是,该设置不在应用程序可以控制的范围中,并且也不能保证该设置一定就是正确的。因此,Struts提供了在对话上下文中存放的Locale 对象,该对象是应用程序可以进行控制的。

当然,本地化并不是变魔术。对每一个提供支持的区域,应用程序必须提供对应的消息包以及选择和更新用户区域的机制。

6.2.2 MessageResources

为了方便获取消息,Struts提供了MessageResources类(org.apache.Struts.util.MessageResources)。Struts程序员很少直接调用该类,而是依赖于另外一些类来获取恰当的消息,而另外的那些类会在后面调用MessageResource类。

MessageResources提供了用来获取和区域相关消息的API。该API可以使用MessageFormat(java.text.MessageFormat)类在运行时刻集成参数和客户化消息。MessageResources接口并没有定义如何以及何处来存放消息,它仅仅定义了如何获取消息。Struts提供的默认实现是使用标准的PropertyResourceBundle类。但是,也可以自己编程用

其他的存储机制(例如XML文件、关系型数据库中)来存放数据。

通常是使用JSP标签或者其他表现层系统来获取消息。Action也可以通过调用MessageResources来预留一些本地化的消息。下面就是一个从对话上下文中获取用户的区域对象,然后通过MessageResources来获取对应该区域的消息,最后将消息存放到bean中的代码例子:

{0}……….{4}:

String message = getMessage(locale,"important.message",new Date());

getMessage的参数一般都是字符串,但是也可以是任何对象。当使用对象时,会使用MessageFormat类来格式化该对象。详情请参看13.3小节。同时,还存在一个不使用Locale

对象的getMessage方法签名,此时,就使用服务器的默认区域。

6.2.3 默认的资源包

Struts框架结构使用MessageResources的一个实例来访问控制器servlet装载的默认资源包。诙资源包中的每一个资源都是在第一次被请求时从磁盘上进行装载的,然后就继续驻留在内存中。除非用户指定使用其他的资源包,其他Strutsil8n模块会从该资源包中获取消息模板。

因为在默认的情况下,Struts使用标准的属性文件和标准的PropertyResourceBundle类,因此那些用来格式化消息的常见方法都显示在表6-5中:

1.消息格式化

因为Struts使用标准的Java类库,因此可以使用传统技术来格式化消息中的数字、日期和货币。例如,如果消息中包含日期,则属性文件中的消息模板可能是:detected.ufo = At {2,time,short} on {2,date,long}, we detected

{1,number,integer} spaceships on the planet {0}.

一个date类型数据可以作为第二个参数传递给消息模板。然后就在消息中使用该date 数据分别显示对应的时间和日期。

At 1:15 PM on April 13, 1998, we detected 7 spaceships on the planet

Mars.

如果用户的区域是en—US,则消息可能是

Um 13.15 Uhr am 13. April 1998 haben wir 7 Raumsch如果fe auf dem Planeten

Mars entdeckt.

如果用户的区域是de—DE,则消息可能是

Date today = new Date(System.currentTimeMillis());

messages.addActionMessages.GLOBAL_MESSAGE,

new ActionMessage("detected.ufo",ufoCount,today,ufoPlanet));

saveMessages(requestmessages);

2.显示特别的字符

Java平台是完全基于Unicode,因此可以生成任何语言的字符。但是,Java编译器和其他Java工具仅仅处理那些包含Latin-1(ISO 8859 –1)或者Unicode编号字符的文件。一个Unicode编码的字符就是一个使用/u开头的转义字符串,该字符串时该字符的编号,例如/u0084 。

定义:Unicode不管事哪个平台,什么应用程序,也不管哪个语言,为每个字符提供了一个唯一数字。大多数的操作系统,全部的操作系统,全部现代浏览器和很多产品都对Unicode提供支持。当前,全球最重要的软件发展技术就是包括Unicode标准以及对Unicode 提供支持的工具[sun,il8n]。

为了将非Latin-I字符的文件转换为使用Unicode的文件,JDK提供了一个名为native2ascii的工具。该工具可以将一个由本地编码字符(非Latin 1或者非Unieode)的文件转换为一个用Unicode编码字符的文件。尽管一个使用Unicode编码的文件对于人而言没有什么意义,是Java模块不会对该文件产生歧义的理解。

用户还可以使用Java国际化和本地化工具包2.0[Sun,JILKIT]中的Message工具来完同样的事情。该工具包中还包括其他的一些工具,当程序员需要对大量文件进行翻译时这些工具就很有用了。当你需要对大量的资源文件进行管理的时候,还是值得下载并且使用该工具包。

6.2.4 ActionErrors

正如我们在本章中介绍的那样,Strtus工作流(提交、校验、改正、提交)是框架结构的主要部分。当使用校验的时候,校验方法需要将错误信息传回给输入表单。而该表单所在页面就可以将错误信息显示给用户。ActionErrors对象就可以用来传递错误信息。

因为在校验过程中可能会产生多个错误信息,因此ActionErrors可以是一个集合。因此任何数目的错误信息都可以存储和显示给用户。每一条消息都可以和表单上一个特定的属性相关联。这就使得程序员有机会在对应的属性旁显示错误信息。

毫不惊奇的是ActionErrors就是ActionError的集合。每一个ActionError对象中包含一个消息键值和一个可选的属性名。该消息键值用来从资源包中寻找对应的消息。为了在错误队列中增加一个错误对象,要进行如下的调用:

errors.add(ActionErrors.GLOBAL_ERROR,

newActionError("prospect.statusDate"));

其中prospect.statusDate是资源包中的键值。如下所示,也可以传递一个参数来生成一个消息字符串:

errors.add(ActionErrors.GLOBAL_ERROR,

new ActionError("record.updated ",recordId));

当全部的错误信息已经添加到消息队列中后,就可以使用一个众所周知的键值将该集合存放在HTTP请求中。此时就可以使用Action类的saveErrors方法来实现这一点:saveErrors(request,errors);

因为ActionErros使用了键值和资源包,因此ActionErrors就内置了对于本地化的支持。它会根据用户的区域自动地显示正确的消息。

6.2.5 ActionMessages

ActionMessages以及对应的JSP标签是Strutsl.1中新增加的内容。设计ActionMessagee 的目的就是为了代替原来的ActionErrors。但是出于向后兼容的目的,原来的AetionErrors 类还是保留在Strutsl.1中了。

那么,ActionErrors有什么问题呢?标签期望程序员将HTML标志也放到消息文件中。但是这样做使得消息很难在一个不同的上下文中(例如在JavaScript)重用。同

时,翻译消息文件的语言专家对此也感到困惑。

ActionMessages的标签(org.apache.struts.taglib.html.MessagesTag)就提供了附加的功能以便程序员不需要将消息和HTML标志混在一起(参看第10章关于Struts标签的介绍)

因为ActionMessages是ActionErrors的增强版,因此默认的消息标签还是使用ActionErrors队列。这使得那些原来使用ActionErrors的地方可以很容易改成使用ActionMessages。

如果程序员期望传递消息和错误,这也存在一个独立的ActionMessages队列。要访问该队列,仅仅需要调用saveMessages方法(而不是saveErrors方法):

saveNessages(request,messages);

同时,还需要JSP标签中进行如下设定:message=true ,例如:

“消息已经发出”。这样我们就可以使用errors队列仅传递类似于“休斯顿,我们有麻烦了”这样的警告信息。这样,同样一个页面既可以使用消息队列也可以使用下面的代码来显示错

身并不是区域敏感的组件。ActionMessages或者ActionErrom从默认的MessageResources对象中获取本地化的消息,而标签将该消息从ActionMessages或者ActionErrors中取出交给输出。

6.2.6 区域敏感JSP标签

正如表6-6所示,Struts标签库中包含了好几个区域敏感的标签。这些标签可以从资源包中获取字符串消息,同时为当前用户显示客户化的信息

表6-6区域敏感的标签

这些标签大多数都使用关键字来获取提示性的字符串以及该元素的标题。那些和图像相关的标签还可以通过另外一个键值来本地化图像及其提示性字符串。表6-7总结了那些区域敏感标签通常使用的属性名。使用这些属性的标签也在表中列出。

, , , , 以及

1.

是最主要用来产生本地化消息和标签的JSP标签。尽管其他的标签可以用来生成错误或者确认信息,在HTML表单中还是最常用的:

2.

在Struts1.1 中添加了Format属性。该属性使得我们可以使用标准的格式化模版来格式化要输出的数据。

同时也可以使用formatKey属性来从资源包中获取格式化模版:

同时,也可以使用自己的区域对象,而不是框架结构的默认对象。locale属性指定了在

Struts技巧不要使用客户化的标签来格式化数据,而将本地化数据存放在ActionForm或者业务层(这样更好)。对于程序员而言,将Struts的Locale对象传递给ActionForm(或者业务层对象),并在它们的get方法中进行本地化会更好。要将用户的Locale对象传递给ActionForm,需要在ActionFora中增加一个locale属性,然后在其reset方法中增加如下代码:

使用属性来转换输出结果。

1.

针对用户的区域都根据错误队列中等待处理的错误信

息来自动输出对应的资源。并不需要其他的动作来进行本地化,一切都自动完成。请参看第10章了解如何在应用程序中使用

2.

很多浏览器(或者用户应用程序)都支持本地化。应用程序可以进行本地化的那些元素包括:

●Glyph变量(来生成高质量的印刷品).

●行情表.

●对于连字符、连字弧线和空格的决定.

为了告诉应用程序的页面使用哪一个语言,你可以在标准的标签中包括lang元素。当Struts可以进行本地化操作时,对应的JSP 标签就可以自动创建该元素。

因此根据用户区域的不同,可以产生如下得结果

->

或者

->

实际上,在页面上就算是没有包括该元素也可以很好地进行本地化,但是这样可以给于程序员一个很恨好的提示,同时也可能避免以后的麻烦。

1.

基于Web的应用程序中的Image一般都包含语言元素。图像一般也和特定的地区或者文化相关。提供的属性可以帮助你在应用程序中对图像或者图像按钮进行本地化。

对图像或者按钮进行本地化时,要考虑如下的三个因素:

●二进制的图像文件位置

●和该图像相关联的提示字符串

●和该元素相关联的建议标题

注意对于一个图像而言,alt和title属性角色重叠。请参看HTML规范来了解如何使用这些属性。

表6-8显示了标签的属性。其中的page属性允许使用应用程序相关的格式来定义图像的URL。

符串或者路径。表6-9 说明了这些属性。

表6-9 altKey、titleKey、srcKey和pageKey属性

中。这样用户可以为不同的区域指定不同的图像文件以及翻译后的alt和title元素。

2.

一般接受text和value属性。text属性显示给用户看的。如果某个选项被选中,则对应的value值会被提交给服务器。为了本地化标签,我们可以指定一个键值而不是直接使用字符串。对于当前用户,可以在资源文件中寻找对应的键值,然后将对应的值插入到结果中。

3.其他属性

这些属性——message、wirte、error、messages、image、img和option都可以使用另外两个属性(如表6-10所示)。这些属性可以用来进行本地化。

因为程序员有时候针对特定的元素(例如图像)使用单独的资源包,所以使用这些属性。在这种情况下,有时候也使用一个可替换的local属性。另外,当程序员需要从另外一个本地化应用程序移植到Struts时,也需要使用这些属性。

6.3 本地化Struts应用程序

现在我们将这些步骤集成在一起,一步步地将Struts应用程序本地化。

6.3.1 允许本地化

对于Struts本地化,要对以下三点进行检查:

●servlet的locale 参数设置是否正确?

●默认的application资源设置是否正确?

●是使用标签来本地化JSP页面吗?

1.设置locale参数

默认情况下,Struts框架结构会在每个用户的session中提供一个locale对象来供区域敏感模块使用。该对象是否被自动创建时由ActionServlet中locale参数进行控制。该值在应用程序的部署文件进行设置。

默认的值是真,这样就允许应用程序本地化。

2.设置应用程序资源servlet参数

Struts中区域敏感模块依赖于MessageResources类,而该类也依赖于框架结构的Locale对象以及默认的应用程序资源包。应用程序资源文件的位置也是由StrutsServlet的参数进行指定。默认的配置文件中的资源文件位置时空白字符串,因此指定该文件位置很重要。

区域,则ActionServlet会寻找一个名为application_xx_XX_propertice的文件,其中xx_XX是某个区域(类似于fr_CA或者es_US)也可以指定默认的资源包在某个压缩包中:

上面的例子暗含可以在下面的地方找到资源文件。

通常,你希望保持属性文件和源文件一致。因此你需要使用Ant来将这些文件拷贝到类路径上。如果源文件处于/WEB-INF/src/java目录下,则对应的Ant任务可能为:

如果书信文件不是存放在/WEB-INF下,这对资源书信文件进行任何修改后,都要对应的程序重新一次变异。那些被修改的资源文件需要部署到类路径上,以便应用程序可以找到这些文件,至于这些更新的资源报是否可以被自动装载,依赖于容器的实现。

Struts技巧使用Ant来构造和部署应用程序。除了变异Java类以外,Ant还可以将源文件书中的源文件、配置文件和JSP文件拷贝到目标文件树上。请参看第15章的Artimus例子应用程序作为例子。

6.3.2 使用框架结构Locale对象

当开启了本地化功能后,Struts的ActionServlet会在用户的Session中存放一个Locale 对象。整个应用程序都可以使用该对象。正如我们在13.2小节中所说的,当Local对象可用时,Struts的il8n模块可以自动使用该对象。同时自己编写的模块也可以自动使用该对象。

1.检查用户的区域

用户可以使用如下的语句来获取框架结构的Locale对象:

Locale locale = request.getSession().getAttribute(Action.LOCALE_KEY);

如果程序中的Action是基于Scaffoid包中的BaseAction类,泽可以用如下的语句:

Locale locale = getLocale(request); // BaseForm版本

然后就可以将该Locale传递给那些对区域敏感的方法(包含标准的java.text包中的方法)。这使得在Action中创建本地化数据以及将这些数据传递给表现层来显示的工作更加轻松。

3.改变用户的区域

但第一次创建用户的session时,ActionServlet会为该用户创建一个默认的Locale对象。如果该用户所处的区域和服务设置的默认区域不一样,则应用程序需要替换用户的Locale 对象。因为Locale对象不能改变,所以你不得不使用一个新的Locale对象来代替原有的

如果Action类是基于Scaffold包的BaseAction类,则可以使用如下的代码:

如果应用程序仅仅需要用“语言”来本地化,则可以使用一个空白字符串来指定代“国家”代码。

3.使用S truts的区域敏感模块

当开启Struts的本地化功能后,用户框架结构的Locale对象的属性就设定了,并且Struts 的区域敏感模块会对数据自动进行本地化。

6.3.3将标签和消息存放在属性文件中

默认情况下。Struts使用标准的属性文件来存放应用程序使用的标签和消息。该属性文件可以使用任何文本编辑器进行编辑。该文件本身由一系列键/值组成。其中的键值是应用程序用来请求资源的。其中的值是返回的标签和消息。参看13.2.3中关于默认属性文件的介

绍。

6.3.4 创建语言相关的属性文件

应用程序需要为每一个提供支持的区域都定义一个对应的属性文件。如果该属性文件被正确命名了,则这些文件可以被正确地自动装载。你所要做的仅仅是翻译属性文件中的值,然后;将新的文件存放在应用程序可以找到的一个地方(请参看13.3.1 小节)。如果应用程序不在用户区域的属性文件中找到对应的键值,则会使用默认的区域属性文件。

6.3.5在可以本地化模块中指定恰当的键值

正如在13.2小节中概述的那样,针对每一个用户,Struts中那些本地化敏感的模块使用资源包中对应的一个键值来输出恰当的标签和消息。请参看13.2小节中关于该点的细节。

6.3.6其他模块使用

对于那些并没有内建本地化特性的模块,可以使用标签来提供本地化消息。例如,要创建一个本地化的取消按钮可以这样使用按钮:

对于一个德国的用户,这会生成一个标签为Abbrechen的按钮。对于一个挪威的用户,则标签会为Kanseller。

6.4 本地化其他模块

要完成国际化任务,我们还需要保证应用程序的其他部分也要进行本地化。这些部分包括Struts的附件,例如StrutsV alidator和Tiles,以及要传递给HTML元素的Action集合。6.4.1本地化Struts Validator

在本书第12章中介绍的V alidator使用一个XML格式的配置文件对用户的输入进行校验。同时该配置文件使用JSP标签生成JavaScript的客户端校验器。Struts的ActionForm类的V alidate方法也是使用同样的配置文件。

V alidator的配置文件是由一个或者多个FormSet元素组成,每一个FormSet都是针对Struts配置文件中的form-bean元素。每一个FormSet元素都由一系列的Field域组成。每一个Field域都可以定义自己的校验设定。因为校验可能会失败,因此该校验设定中还包括在校验失败时显示给用户的标签和消息。

V alidator使用的全部标签和消息都自动链接到Struts的资源文件上,并且会自动被本地化。如果需要附加的本地化操作,例如需要对于邮政编码或者电话号码进行格式化,你也可以定义一个区域敏感的FormSet元素。一个区域敏感的FormSet元素可以看成是默认的FormSet的一个子集——你仅仅需要定义那些需要被改变的域。

假设默认的FormSet如下:

6.4.2 本地化Tiles

正如我们已经了解的。Tiles的强大之处在于它从很小的部分起就可以定义构造应用程序页面的结构描述。类似于Struts和Struts validator,Tiles的配置文件也可以存放在一个XML 格式文件中。

正如你可以针对每一个特定的区域定义一个属性文件一样,你也可以针对每一个区域定义一个Tiles配置文件。定义该文件的方法和定义属性文件的方法一样。如果是针对一个使用法语的加拿大地区,则可以配置文件定义为tiles_fr_CA.xml,并且将它和默认的tiles.xml 文件存放在同一个地方。

在区域敏感的配置文件中,我们仅仅需要改变那些需要的定义。如果应用程序不能在该用户的区域配置文件中找到关于定义的配置信息,则就会在默认的配置文件中进行寻找。

这一特性使用创建一个区域敏感的子站点的工作很容易。仅仅需要针对每一个区域都创建一个tiles定义文件,并且在定义中改变对应的路径使得它们都指向每一个Tiles的本地化版本就可以了。这样,我们就可以重用整个站点俄框架定义使得整个站点具有一致的观感,但是对于每一个区域而言,其内容都是根据区域进行改变的。

6.4.3 本地化集合

一些Struts的JSP标签基于集合给用户显示选择框中的可选项。因为这些集合时从Action传递给页面的,因此Action在将它们传递给页面前有机会将它们进行本地化。

1.

支持两个并列的列表:一个是值(该域要返回给服务器的值)一个是标签(用户所看见的)。因此挑战就是在不需改值的区域敏感区的方式来选择标签。

在Action中,可以HTTP请求属性名为values来为值创建一个数组或者ArrayList (java.util.ArrayList)。同时,在属性名为labels下创建一个对应的数组或者ArrayList,它根据用户的Locale在MessageRseource中寻找对应的标签值。

可以以如下的方法从servlet中获取MessageRseource:

org.apache.struts.utils.MessageResources resources =servlet.getResources();

用户的Locale对象可以这样获得:

Locale locale = equest.getSession().getAttribute(Action.LOCALE_KEY);

将两者的联合起来,就可以针对每一个值获取本地化消息:

为了减少编写代码量,Scaffold包在MessageUtils类中提供了getMessages方法来完成同样的工作:

String[] messages = MessageUtils.getMessages(resources,locale,keys);

如果你喜欢,也可以用以下的方法来返回一个LabeV alueBeans的集合。

ArrayList labelValueBeans =MessageUtils.getLabelValueBeans(resources,locale,keys);

2.

使用一系列的值来生成一系列的检查元素。如果值和标签匹配,这可以使用如下的代码来生成一系列的检查框:

如果需要对于检查框进行本地化,则可以使用MessageUtils.getLabelV alueBean()来创建本地化的标签,如下所示:

项目管理实战

项目管理实战 课程背景 企业中项目越来越多,大到工程建设,小到一次年会,项目已逐渐成为企业业务发展的载体,企业的成功则赖于每个项目的成功。然而,现在企业项目的成功率并不高,多数项目都面临着进度延后、费用超支、质量不高的困境。引入项目管理模式,提高项目成功率刻不容缓。提升项目经理和项目核心团队的项目管理水平和项目执行力,则是促进项目可持续成功的关键要素。 课程目标 此次为期2天的培训课程,旨在帮助参与者: ①清楚地掌握项目管理的理念; ②加强项目团队意识,学会在项目管理过程中人的管理策略和技巧; ③了解项目管理的过程,全面掌握项目管理的方法和工具,保证项目的进度、预算、质量等能够按计划实现; ④具备项目管理的全局观,加强项目管理的风险意识,提高项目的执行力。 课程收益 1、了解项目管理的理念及框架(五大过程); 2、了解项目管理的要素,掌握项目管理常用工具和方法; 3、分享标杆企业项目管理的经验; 4、了解理解层次模型,清晰认知项的目经理角色;探讨项目经理能力提升的方法 5、分析本公司项目管理的现状,找到项目管理优化改进的方向。 课程大纲 一、项目管理认知 前言: ◇项目与日常运作有哪些区别? ◇为什么项目经理要重视干系人的管理? ◇为什么要学习项目管理? 1、项目与项目管理 a)什么是项目 l项目的特点 l哪些是项目 l项目与日常运作性工作 b)什么是项目管理 l项目管理目标 l项目管理之干系人管理 l项目管理的精髓 l项目管理九大知识领域与五大过程组 l中西式项目管理的区别 2、项目经理的身份职责 (1)项目的第一责任人 (2)项目干系人的管理者 (3)项目经理是问题管理与推动解决者 (4)带领团队达成目标 3、理解项目干系人的身份职责 (1)站队:屁股决定脑袋 (2)合作:完成项目目标 (3)斗争:区分工作界面 (4)沟通:确保配合畅顺 二、项目管理要点(按照项目管理五大过程来展开) 前言: ◇项目管理工作的总体框架是什么? ◇项目管理各个阶段的工作重点是什么? ◇如何编制出一个项目主计划(核心计划)? ◇虽然按照计划在做,但执行结果总是跟原计划有明显差距,我怎么能控制得住项目使它基本按计划实现呢? ◇如何在项目收尾阶段做好干系人的沟通与案例总结

java图形界面之电子算盘

Java图形用户界面 院系: 计算机系姓名:后人好乘凉 一实验目的 ●使学生综合运用图形用户界面设计的概念; ●使学生熟悉使用中间面板,组成层次复杂的GUI界面; ●使学生掌握使用事件驱动编程; 二实验环境及实验准备 ●所需硬件环境为微机; ●所需软件环境为JDK、Eclipse; ●掌握Java下界面容器与基本组件的基本知识与应用; ●掌握Java下事件处理模型; ●掌握Java下图形绘制的方法; 三实验内容 (一)、设计实现电子算盘,并完成测试; [题目描述及要求] 给小朋友设计一个电子算盘。要求绘制电子算盘界面,设计并实现打珠算过程(界面参考如下图示)。 电子算盘参考界面示意 程序源代码: package calculator;

import java、awt、Color; //导入 import java、awt、GridLayout; import java、awt、Container; import javax、swing、JLabel; import javax、swing、JButton; import javax、swing、ImageIcon; import javax、swing、JPanel; import javax、swing、JFrame; import javax、swing、JTextField; import java、awt、event、*; public class Calculator extends JFrame{ public int totalNumber; public int t = 0; public boolean[] isAddFive = new boolean[5]; public int number[] = new int[5]; public ImageIcon picture = new ImageIcon(System、getProperty("user、 dir") + "/算珠、jpg" ); //添加图片 public ImageIcon picture1= new ImageIcon(System、getProperty("user、 dir") + "/算珠1、jpg" ); Container con = getContentPane(); JPanel j1 = new JPanel(); JPanel j2 = new JPanel(); JPanel j3 = new JPanel(); JPanel time=new JPanel(); JLabel q = new JLabel(); JLabel nA = new JLabel(); JLabel Time=new JLabel(new ImageIcon("、/时钟、jpg")); //添加时钟标签的图片 JTextField a = new JTextField(); JButton Buttons_1[][] = new JButton[2][5]; JButton Buttons_2[][] = new JButton[5][5]; GridLayout gl_1 = new GridLayout(2,5); GridLayout gl_2 = new GridLayout(5,5); GridLayout gl_3 =new GridLayout(); public Calculator() { super("电子算盘"); setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE); setBounds(100,100,600,400); setVisible(true); setLayout(null); AbacusPanel(); } public void AbacusPanel() // 算盘面板

《JAVA语言程序设计》期末考试试题及答案

《JAVA语言程序设计》期末考试试题及答案1 (应考必备题库) 一、单选择题 1、编译Java Application源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为(B )。 A. java B. .class C. html D. .exe 2、设x = 1 , y = 2 , z = 3,则表达式y + = z --------- /+ + x 的值是( A )。 A. 3 B. 3. 5 C. 4 D. 5 3、不允许作为类及类成员的访问控制符的是( C )。 A. public B. private C. static D. protected 4、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( A )。 A. static void method( ) B. public void method() C. final void method( ) D. abstract void method() 二、填空题 1、开发与运行Java程序需要经过的三个主要步骤为 _编辑源程序_________ 、 _编译生成字节码 ______ 和_______ 解释运行字节码 ________ 。 2、在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码占 用____ 2—字节内存空间,这样,无论是中文字符还是英文字符,都是占 用____ 2 ___ 字节内存空间。 3、设x = 2,则表达式(x + + ) /3的值是 __________ 0 ____ 。 4、若x = 5,y = 10,贝Ux < y和x >= y的逻辑值分别为true ___ 和___ fals」。 5、__ 抽象(abstract)-方法是一种仅有方法头,没有具体方法体和操作实现的 方法,该方法必须在抽象类之中定义。最终(fin al)_方法是不能被当前类的子类重新定义的方法。 6、创建一个名为MyPackage的包的语句是package MyPackage ; _, 该语句应该放在程序的位置为:—应该在程序第一句___________________ 。

项目管理最佳实践案例

项目管理最佳实践案例 主讲:陈宝光(通用管理、内训师培养高级讲师) 课程对象:企业中层管理者、项目总监、项目经理、项目工程师、项目相关参与人员。 【课程背景】 项目是遗憾的艺术:每次结束的时候都觉得本来还可以发挥更大的价值。即便技术质量指标都达到了要求,使用部门或者公司领导也还有不满意的地方,为什么会这样呢?其实每个项目在运行过程中,总会出现这样或那样的问题,比如:项目管理者的鼓励和推动不够 项目总监一开始就没有想透彻,项目团队的专家没有帮助领导整理思路 项目团队有经验的人手不足 中期设计开发的时候谁都有新要求 后期上线的时候大家方才如梦初醒:怎么是这么个东西 随着生产规范化、流程化,以及企业管理国际化的大环境下,越要求企业面向项目化管理。而在每一个项目运行过程中,项目经理都充当着非凡的角色,需要他们能够: 能够充分协调资源,保障项目有效运行, 制定详细的项目运行计划; 对项目各阶段的内容实施与进行动态跟踪; 促进多部门的沟通协作; 有效控制项目各阶段风险…… 以保证每个项目能够在预定的时间、预算和质量要求下达到的最终成功。 特别推出《项目管理最佳案例实践》课程,重点面向企业中高层经理,项目经理、核心项目组员,通过培训,帮助受训人员掌握现代的项目管理知识和运用方法,并结合万千项目实例,指导管理人员梳理和优化现有项目管理流程,建立有效的项目运行和控制体系。学会运用国际先进项目管理思想,熟练使用项目管理模版工具,进行实际项目练习,有效提高可操作性。 【课程价值】

全面认识项目管理,理解并掌握项目管理思维。 掌握项目管理工具及方法使用。 提高项目规划及管理能力。 提高项目计划能力,加强对项目的实施和控制能力。减少项目成本,提升管理效率。 【培训内容】 导入: 目管理的好处 第一单元:项目管理概论 有关项目活动的知识、技能、工具和技术的运用 视频案例: PMI与PMP PMI在项目管理的经验教训有哪些 第二单元:项目管理五大流程及项目流程之间的关系 1、启动流程 2、项目文件的展开 3、项目任务书 4、目标确定的标准 5、项目范围管理

java图形界面以及链接数据库

import java、awt、*; import java、awt、event、*; import javax、swing、*; import java、sql、*; public class NoteTextArea extends JFrame implements ActionListener { private JPanel jp=new JPanel(); private JButton[] jb = new JButton[4]; private JComboBox box; private JTextArea jt=new JTextArea(); private JScrollPane js=new JScrollPane(jt,ScrollPaneConstants、VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants、HORIZONTAL_SCROLLBAR_NEVER); private String[] obj; private JTextField text = new JTextField(); public NoteTextArea() { jp、setLayout(null); String[] obj = new String[]{"微笑","生气","难过","得意"}; box = new JComboBox(obj); JLabel j1 = new JLabel("留言版"); JLabel j2 = new JLabel("您"); JLabel j3 = new JLabel("地说:"); jb[0] = new JButton("清屏"); jb[1] = new JButton("至顶"); jb[2] = new JButton("至尾"); jb[3] = new JButton("提交"); for(int i = 0;i < 3;i++) { jb[i]、setBounds(650,i*75+55,100,50); } for(int i = 0;i < 3;i++) { jp、add(jb[i]); } j1、setBounds(280,10,50,30); j2、setBounds(20,375,30,50); box、setBounds(55,385,80,30); j3、setBounds(160,375,40,50); text、setBounds(210,385,300,30); jb[3]、setBounds(520,365,75,50); js、setBounds(10,50,600,300); jp、add(j1); jp、add(j2);

Java程序员认证考试题库

第一部分 基础知识练习 目标 本章对应于《学生指南》各章的内容分别提供了练习题集,包括: ●第一章Java入门 ●第二章数据类型和运算符 ●第三章流程控制与数组 ●第四章封装 ●第五章继承 ●第六章抽象类与接口 ●第七章多态 ●第八章异常 ●第九章多线程机制 ●第十章输入输出流 ●第十一章使用泛型和集合框架 ●第十二章基于Swing的图形用户界面(GUI)设计 ●第十三章Java事件驱动编程

第一章练习题(Java入门) (C)1.下列哪项不是JDK所包含的内容?(选一项)A.Java编程语言 B.工具及工具的API C.Java EE扩展API D.Java平台虚拟机 2.下列关于JDK、JRE和JVM的描述。哪项正确?A.JDK中包含了JRE,JVM中包含了JRE B.JRE中包含了JDK,JDK中包含了JVM C.JRE中包含了JDK,JVM中包含了JRE D.JDK中包含了JRE,JRE中包含了JVM 3.下列哪个工具可以编译java源文件? A.javac B.jdb C.javadoc D.junit 4.JDK工具javadoc的作用是哪项? A.生成Java文档 B.编译Java源文件 C.执行Java类文件 D.测试Java代码 5.以下哪些包是Java标准库中常用的包?(选三项)A.java.lang B.javax.servlet .http C.j ava. io D.java.sql

6.使用JDK工具生成的Java文档的文件格式是? A.XML格式 B.自定义格式 c.二进制格式 D.HTML格式 (AC)7.以下关于JVM的叙述,哪项正确?(选两项) A.JVM运行于操作系统之上,它依赖于操作系统 B.JVM运行于操作系统之上,它与操作系统无关 C.JVM支持Java程序运行,它能够直接运行Java字节码文件D.JVM支持Java程序运行,它能够直接运行Java源代码文件 8.以下关于支持Java运行平台的叙述,哪项错误? A.Java可在Solaris平台上运行 B.Java可在Windows平台上运行 C.Java语言与平台无关。Java程序的运行结果依赖于操作系统D.Java语言与平台无关。Java程序的运行结果与操作系统无关 (B)9.以下关于Applet和Java程序之间关系的叙述,哪项错误? A.-个Applet就是一段Java程序 B.Applet是一种特殊的Java程序,它需要运行在Web服务器上C.Applet是一种特殊的Java程序,它需要运行在Web浏览器上D.Applet是一种Java SE平台的应用程序 (AD)10.以下关于Java HotSpot的描述,哪两项错误?(选两项)A.Java HotSpot是一种热编译技术,在编译Java源程序时会被使用B.Java HotSpot是一种热编译技术,在运行Java代码时会被使用C.Java HotSpot是一种热编译技术,它只对程序的部分字节码进行优化D.Java HotSpot是一种热编译技术,它会对程序的全部字节码进行优化

全国计算机二级考试Java第6章练习题

全国计算机二级考试Java第6章练习题:异常处理第六章异常处理 1下列对异常包含内容正确的说法是_________. (C) A) 程序中的语法错B)程序在编译或运行中发生的异常事件 C) 程序中预先定义好的异常事件D)程序在编译时发生的错误 2 如程序段中有多个catch语句,程序会__________. (C) A) 对每个catch语句都执行一次 B) 对每个符合条件的catch语句都执行一次 C) 找到匹配的异常类型的catch执行后不再执行其他catch语句 D) 找到匹配的异常类型的catch 执行后再执行其他catch语句 3 以下自定义的异常类的父类是____________. (D) A) Erroe B)AWTError C)VirtualMachineError D)Exception及其子类 4 当需要将异常传递给调用方法时,用___________. (A) A)声明异常B)运行异常 C)捕获异常D)抛出异常 5 对于catch语句的正确排列是___________ . (A) A)父类在先,子类在后B)子类在后,父类在后 C)有继承的异常不能在同一个try段内D)排列无关 6 在下列程序的下划线处,填入适当语句使程序能正确执行: Import java.io.*; Public class Exceptionone { Static void situate(int sit) { System.out.println(“---情况”----+sit+”----”);

Try { If(sit==0) { System.out.println(“无异常捕获”); Return; } Else if (sit==1) { Int i=0; Int j=6/I; } Else if (sit==2) { Int iArray[]=new int [4]; iArray[10]=3; } }__________________________________________ System.out.println(“Catch”+e); } Catch(ArrayIndexOutOfBoundsException e) { System.out.println(“Catch”+e);} Catch(Exception e) {system.out.println(“不会执行”);} Finally {system.out.println(“在situate 中”); }

项目管理实战10步法

《项目管理实战(10步法)》 培训对象: 新任经理、后备经理、骨干员工 授课学时:14学时 培训目标: 当本课程学习结束时,学员能够掌握项目管理的10个核心步骤以及每个步骤所使用的工具、方法和技巧,其中重点能够掌握: 项目评价的工具和方法 任务分解的工具和方法 进度规划的工具和方法 成本规划的工具和方法 HR 规划的工具和方法 风险管理的工具和方法 真实、参与、体验,一步一步、手把手地教你学会管理项目的工作和方法 培训大纲: 请您准备:一份企业正在进行的真实的培训项目案例 第一步:如何启动一个项目? 1. 回顾:PMI项目管理体系的介绍 2. 讲解:如何进行项目经济性评估? 3. 练习:依据案例测算3个经济指标 4. 讲解:项目章程草拟和发布的要点 5. 练习:依据案例草拟和发布项目章程(小组呈现、学员提问、老师点评) 6. 模拟:召开项目启动会

第二步:如何分解项目的任务? 1. 回顾:PMI范围管理的核心理念 2. 讲解:起草培训项目范围说明书的要点 3. 分享:一份真实的项目范围说明书 4. 讲解:培训项目WBS分解的步骤和和要点 5. 练习:依据案例完成项目的WBS分解(小组呈现、学员提问、老师点评) 6. 总结:培训项目WBS分解的5个要诀 第三步:如何规划项目的进度? 1. 回顾:PMI进度管理的核心理念 2. 讲解:什么是PERT网络技术? 3. 练习:依据案例完成PERT网络图 4. 讲解:培训项目三种历时估算的方法和要点 5. 练习:依据案例估算各任务的历时 6. 讲解:如何用关键路径(CPM)法规划进度 7. 练习:依据案例计算项目关键路径CPM(小组呈现、学员提问、老师点评) 8. 讲解:培训项目工期压缩的方法和技巧 9. 研讨:依据案例研讨培训项目哪种方法压缩工期最有效,体验QRT的三重制约关系? 第四步:如何估算项目的成本? 1. 回顾:PMI成本管理的核心理念 2. 讲解:培训项目成本估算的4种方法和要点 3. 练习:依据案例完成项目成本预算表 4. 讲解:如何制作成本控制S曲线 5. 练习:依据案例绘制项目的成本S曲线(小组呈现、学员提问、老师点评)第五步:如何控制项目的风险? 1. 回顾:PMI风险管理的核心理念 2. 讲解:如何识别培训项目的风险? 3. 练习:依据案例用头脑风暴法识别项目风险 4. 讲解:如何评估培训项目的风险? 5. 练习:依据案例用P-I矩阵评估项目的风险

java考试题库第五章

5-1 下列关于容器的描述中,错误的是D A.容器是由若干个组建和容器组成的 B.容器是对图形界面中界面元素的一种管理 C.容器是一种对指定宽和高的矩形范围 D.容器都是可以独立的窗口 5-2 下列界面元素中,不是容器的是A A.List B.Frame C.Dialog D.Panel 5-3 下列关于实现图形用户界面的描述中,错误的是D A.放在容器中的组件首先要定义,接着要初始化 B.放在容器中的多个组件是要进行布局的,默认的布局策略是FlowLayout C.容器中所有组件都是事件组件,都可以产生事件对象 D.事件处理是忧监听者定义的方法来实现的 5-4 下列关于组件类的描述中,错误的是A A.组件类中包含了文本组件类(TextComponent)和菜单组件类(MenuComponent) B.标签(Label)和按钮(Button)是组件类(Component)的子类 C.面板(Panel)和窗口(Window)是容器类(Container)的子类 D.文本框(TextField)和文本区(TextArea)是文本组件类(TextComponent)的子类 5-5 在对下列语句的解释中,错误的是C but.addActionListener(this); A.but是某种事件对象,如按钮事件对象 B.t his表示当前容器 C.A ctionListener是动作事件的监听者 D.该语句的功能是将but对象注册为this对象的监听者 5-6 所有事件类的父类是C A.ActionEvent B.AwtEvent C.KeyEvent D.MouseEvent 5-7 所有GUI标准组件类的父类是C A.Buttom B.List C.Component D.Container 5-8 下列各种布局管理器中Window类、Dialog类和Frame类的默认布局是C A.FlowLayout B.CardLayout C.BorderLayout D.GridLayout 5-9 在下列各种容器中,最简单的无边框的又不能移动和缩放的只能包含在另一种容器中的容器是D A.Window B.Dialog C.Frame D.Panel 5-10 下列关于菜单和对话框的描述中,错误的是C A.Frame容器是可以容纳菜单组件的容器 B.菜单条中可包含若干个菜单,菜单中又可包含若干菜单项,菜单项中还可包含菜单子项 C.对话框与Frame一样都可作为程序的最外层容器 D.对话框内不含有菜单条,它由Frame弹出

全球最成功的项目管理实战案例

向波音公司学项目管理--------读《全球最成功的项目管理实战案例》 携手合作、梦想蓝图、明确目标、项目计划、人人参与、从数据求解 放、透明管理、适度抱怨是可以接受的、提出计划-寻求办法、彼此倾听-相互帮助、保持心情愉快、享受工作乐趣,美国著名项目管理专家詹姆斯?刘易斯的著作《全球最成功的项目管理实战案例》,主要从波音公司的777飞机研制项目的成功完成,总结出成功项目管理的黄金法则,分别是:携手合作、梦想蓝图、明确目标、项目计划、人人参与、从数据求解放、透明管理、适度抱怨是可以接受的、提出计划-寻求办法、彼此倾听-相互帮助、保持心情愉快、享受工作乐趣,这十二个法则指导了777飞机项目从启动、计划到执行控制、最后顺利交付客户的全过程,历经5年、遍布44个国家、涉及人员成千上万。777的成功不仅仅是工程技术上的成功,也使得整个波音公司在项目管理水平上取得了长足的进步。作为传统的家电制造企业,我们可以从波音公司学到哪些项目管理的理念和技能呢? 777项目的成功首先是项目战略定义的正确。这里有两个要素:一是要和该项目所有干系人进行充分的沟通,了解、分析、过滤与项目任何相关的信息;二是要将项目战略和最大干系人的需求紧密结合起来。在777项目启动之初,项目团队就与设计人员、市场销售人员、采购、法律顾问、客服人员及工程人员一起合作,了解什么样的飞机更适合消费者的需求、对消费者更加友好,如何便于制造,如何方便维修等等,然后将收集到的信息进行分析、过滤。在对所有的信息进行前期处理之后,还要进行权重的排序,把最大干系人(消费者)的要求和项目目标紧密结合起来。项目战略类似于我们公司做的产品规划,项目战略的成功可以保证我们是在“做正确的事”,即做适合市场的产品,不做完美的产品,不做“无头小鸡”项目(杀鸡时先去掉脑袋后身子还在动,而实际上鸡已经死了,因为死亡信息的传递太慢了,意指注定死亡的项目还要继续做)。在制定项目战略的过程中,“携手合作”是波音公司一条人人自觉遵循的行为准则,也是保证制定正确的项目战略的要求之一。 我们了解了波音公司如何制定项目战略之后,再来看看他们是如何描绘项目目标即“梦想蓝图”的。在PMI的专用教材PMBOK的定义里,项目目标要做到“SMART”原则,即具体的、可测量的、可达到的、现实的、有时间限制的,分别是以这五个英文单词为开头的字母组成。在777项目启动之初,项目经理艾伦?穆拉利就为人们描绘了项目目标:“炎热一日跨越丹佛和火奴鲁鲁”,并且把它制成卡通形的徽章给成员佩戴,以便让大家时刻了解团队的“梦想蓝图”。一旦定下了项目目标,就不能随便偏移,一定要“咬住青山不放松”,“以终为始”,让它成为我们一切工作的出发点。在史蒂芬?柯维博士的《高效能人士7个习惯》中,他提出了一个有趣的观点:任何创造实际是经过2个层次,一次是“心智的创造”,在项目管理过程中可以指制定项目的目标,另一次才是“实际的创造”即执行项目目标。其中心智的创造(制定目标)尤为重要,因为它是做事的源头和起始,难度更大,更为难能可贵。在我们平常的项目管理过程中,我们的产品一般也会以按财季上市为目标(例如2006年4月10日完成量试,2006年4月20开始批量),这就是我们团队的目标,我们的“梦想蓝图”,应该让公司内外所有的项目干系人都了解这个目标并且要考虑自己该如何去做才能最终达成我们的“梦想蓝图”。 没有目标就无法做计划,没有计划就无法去控制,因为你不知道你现在身处的地方和你应该在的地方是不是同一个地方。在有项目运作的组织里,我们经常会听到这样的话:“时间太紧了,哪有时间做计划,赶紧干吧”。有一份调查,当被问及项目成功最密切的因素是什么时,被调查者的回答显示好的计划和对客户需求的正确理解高居前两位。人们总是有时间去返工而没有时间去做计划,在公司传统的开发流程中,也是奉行着项目任务来了就开干的作风,很少有人去考虑项目组成员坐在一起大家来制定一个可行的计划。而在国际领先的产品开发流程IPD中,在概念阶段就严格规定了所有项目成员都要参与制定计划,并且在计划阶段还要进行调整。在波音公司,项目计划的制定是一个人人参与的过程,协同的项目计划使所有人的步调一致,大家的语言一致,因此可以避免项目中出现不规则的“布朗运动”。 有了计划,我们就有了路标,就要去执行,就要去“正确的做事”。执行的方法可以通过流程去引导,执行的效果可以通过计划去控制,但在项目执行的过程中,有一些大家公认的、形成习惯的行为模式也是必要的。在波音公司,倡导的是“从数据求解放、透明管理、适度抱怨是可以接受的、提出计划-寻求办法、彼此倾听-相互帮助”等管理法则。基础数据的整理和分析是一个比较烦琐的过程,但对于及时发现一些项目风险和遗漏之处以及提高项目管理水平等方面都有益处,同时,也可以作为历史的经验库供后来者借鉴,提升整个公司的项目管理成熟度水平。“透明管理”在波音公司的由来是在一次777项目例会上,有一个人报告了本部门的工作进展,当他结束发言时,来自另外一个部门的人说:“我们不这么认为”,并给出了一些相反的陈述。然后第一个人承认自己没有完全说出目前项目面临的问题。于是大家就提出“不能一边保密,一边管理,如果大家都保守秘密的话,那干脆都回家去好了”。这就是这个法则“透明管理”

java实验报告实验六Java图形用户界面

信息工程学院 Java程序设计实习报告 JAVA图形用户界面 实验六Java图形用户界面 1.实验目的 (1)掌握图形用户界面基本组件。 (2)了解如何使用布局管理器对组件进行管理。 (3)掌握Java事件处理机制。 2.实验内容 实验题 1 编写一个模拟计算器的程序,使用面板与网格布局,添加一个文本框,10个数字按钮(0-9),4个加减乘除按钮,一个等号按钮,一个清除按钮,要求将计算公式与结果显示在文本框中。 运行结果: 实验报告的内容与格式按任课教师的要求书写。

加法: 主要代码: private void initComponents() { jButton1 = new javax、swing、JButton(); jButton2 = new javax、swing、JButton(); jButton3 = new javax、swing、JButton(); jButton4 = new javax、swing、JButton(); jButton5 = new javax、swing、JButton(); jButton6 = new javax、swing、JButton(); jButton7 = new javax、swing、JButton(); jButton8 = new javax、swing、JButton(); jButton9 = new javax、swing、JButton(); jButton10 = new javax、swing、JButton(); jButton11 = new javax、swing、JButton(); jButton12 = new javax、swing、JButton(); jButton13 = new javax、swing、JButton(); jButton14 = new javax、swing、JButton(); jButton15 = new javax、swing、JButton(); jTextField1 = new javax、swing、JTextField(); setStub(null); jButton1、setText("3"); jButton1、addActionListener(new java、awt、event、

通用项目管理实战操作

通用项目管理实战操作 招生对象 --------------------------------- 项目经理、项目组核心成员、职能部门主管、公司管理者 【主办单位】中国电子标准协会w w w . w a y s . o r g . c n 【咨询热线】0 7 5 5 – 2 6 5 0 6 7 5 7 1 3 7 9 8 4 7 2 9 3 6 李生 【报名邮箱】martin#https://www.360docs.net/doc/2d2468068.html, (请将#换成@) 此课程常年循环各地举办公开课程,也可以进行相关企业内训,详情请咨询我们。 课程内容 --------------------------------- 培训收益: 1、了解理解层次模型,清晰认知项的目经理角色; 2、了解项目管理的要素,掌握项目管理常用工具和方法; 3、分享项目管理的经验; 4、分析本公司项目管理的现状,找到项目管理优化改进的方向。 课程大纲: 第一天上午:培训需求汇总分析、项目经理角色认知、项目管理认知 第一天下午:项目管理要点:五大过程之启动、计划部分 第二天上午:项目管理要点:实施与监控、收尾部分 项目管理经验分享: "高效运作的典型案例分享 "流程化、规范化运作的典型案例分享 "精细化管理的典型案例分享 第二天下午:项目管理专题研讨: "进度管理篇、问题管理篇、项目经理管理意识与能力提升篇 "头脑风暴:某公司项目管理现状分析与优化改进建议探讨 前言:培训需求汇总和分析 "企业主营业务是什么? "哪些业务用项目的方式在运作? "项目运作过程中有哪些困难和问题?

"项目管理培训的需求有哪些? "根据问卷调查与电话访谈的结果来定制培训的内容?大家还有什么需求? 一、项目经理角色认知(这一模块可选) 前言: "作为一位管理者,你的职责是什么? "项目经理的角色(职责)应当如何界定? 1、认知工具:理解层次模型 (1)理解层次的理论模型 (2)理解层次的管理应用 "管理自己 "管理他人 (3)理解层次的认知应用 "微软唐骏的沟通案例 2、项目经理的身份职责 (1)项目的第一责任人 (2)项目干系人的管理者 (3)项目经理是问题管理与推动解决者 (4)带领团队达成目标 案例研讨:项目经理李经理被客户投诉! "李经理是合格的项目经理吗?为什么? "李经理如何改进管理? 二、项目管理认知 前言: "项目与日常运作有哪些区别? "为什么项目经理要重视干系人的管理? "为什么要学习项目管理? 项目与项目管理 1) 什么是项目 "项目的特点 "哪些是项目 "项目与日常运作性工作 2) 什么是项目管理 "项目管理目标 "项目管理之干系人管理 "项目管理的精髓 "九大知识领域与项目管理阶段 "项目管理知识领域与过程组 "项目管理认证 "中西式项目管理的区别 三、项目管理要点(按照项目管理五大过程来展开)前言: "项目管理工作的总体框架是什么? "项目管理各个阶段的工作重点是什么? "如何编制出一个项目主计划(核心计划)?

java图形界面以及链接数据库

import .*; import .*; import .*; public class NoteTextArea extends JFrame implements ActionListener { private JPanel jp=new JPanel(); private JButton[] jb = new JButton[4]; private JComboBox box; private JTextArea jt=new JTextArea(); private JScrollPane js=new JScrollPane(jt,,; private String[] obj; private JTextField text = new JTextField(); public NoteTextArea() { (null); String[] obj = new String[]{"微笑","生气","难过","得意"}; box = new JComboBox(obj); JLabel j1 = new JLabel("留言版"); JLabel j2 = new JLabel("你"); JLabel j3 = new JLabel("地说:"); jb[0] = new JButton("清屏"); jb[1] = new JButton("至顶"); jb[2] = new JButton("至尾"); jb[3] = new JButton("提交"); for(int i = 0;i < 3;i++) {

jb[i].setBounds(650,i*75+55,100,50); } for(int i = 0;i < 3;i++) { (jb[i]); } (280,10,50,30); (20,375,30,50); (55,385,80,30); (160,375,40,50); (210,385,300,30); jb[3].setBounds(520,365,75,50); (10,50,600,300); (j1); (j2); (j3); (box); (text); (jb[3]); (js); for(int i=0;i<=3;i++) { jb[i].addActionListener(this); } (false); (true); ("留言内容:");

Java笔试题库及其答案

一.单选题 1) 在中,要判断D盘下是否存在文件,应该使用以下()判断语句。(选择一项) a) ( (“”) () = =1) b) ((“”) = =1) c) ( (“”) ( ) ) d) ((“)) 答案 2) 在中,()对象可以使用键/值的形式保存数据。(选择一 项) a) b) c) d) 答案 3)给定代码,如下: ( b1, b2){ ; }

要使用这段代码能够编译成功,横线处可以填入()。(选择一项) a)() (b12) b)() b12 c) b12 d) () b12 答案 4)在中,在包下定义一个类,要让包下的所有类都可以访问这个类,这个类必须定义为()。(选择一项) a) b) c) d) 答案 5)在中,下列()语句不能通过编译。 (选择一项) a) “”+ “”+ “”; b) “”+3; c) 3+5 d) 5+5.5; 答案

6)给定代码如下,运行时,会产生()类型的异常。(选择一项) s=; (“”); a) b) c) d) 答案 7)给定如下代码,编译运行之后,将会输出()。 { ( []){ 5; (21) ?(1) /22) ; } } (选择一项) a)1 b)2 c)2.5 d)3

答案 8) 程序中,方法的格式正确的是()。(选择一项) a)([] ) b)([] ) c)([]s) d)([] ) 答案 9)以下语句中, = “123456789” (1,3);执行后中的值为。 (选择一项) a) “23” b)“123” c) “12” d) “234” 答案 10)给定如下代码,编译运行时,结果是()。(选择一项) { ( []) {

项目管理实战训练培训(2天)

项目管理实战训练培训 ●课程背景 21世纪是项目管理的时代!当今社会,项目繁多,项目带动战略、项目带动企业发展的观念已深入人心。无论是政府、企业或各种组织,都在建立以项目为导向的战略模式来寻求更好的发展。因此,以项目管理为核心的管理与运做就成了企业与个人最为关心的管理技能。 该课程以“项目管理知识体系PMBOK”为指南,详细诠释项目管理九大知识领域的体系、方法与工具,把项目管理的理论与培训公司的实际案例相接合,使学员真正掌握项目管理的精髓。 ●培训对象 项目总监、项目经理、项目组核心成员、公司CEO、董事长、总经理、副总经理、部门总监、部门经理、工程师、技术员、企业骨干等 ●培训时间 2天,参加培训的企业可在课前准备好本公司即将开始运作和未来将要运作的项目,老师将以企业的实际项目展开项目管理的实操练习 ●课程收获 1.了解项目管理的理念及框架(五大过程); 2.掌握项目管理的要素,掌握项目管理常用工具和方法; 3.学会项目进度管理的四大技术; 4.清晰认知项目经理角色,探讨项目经理能力提升的方法; 5.分析本公司项目管理的现状,找到项目管理优化改进的方向。 ●课程大纲 第一章项目管理概述 一.两大项目管理组织简介 二.项目的4大特征 三.项目与日常运作的比较

四.项目的类型 五.项目管理的关键 六.项目的三种制约与三种目标 七.什么是成功的项目? 八.项目进度管理四大技术 1.箭线图法(ADM) 2.前导图法(PDM) 3.关键路径法(CPM) 4.甘特图法(Gantt) 九.项目生命周期 十.过程组与知识领域体系PMBOK 第二章项目管理的启动过程 一.定义项目和目标 二.项目里程碑 三.样例:提出可行性报告和管理者支持 四.组建项目小组 五.项目小组的五种组织形式 六.样例-项目启动过程 第三章项目管理的计划过程 一.分解工作任务 1.如何分解工作任务 2.样例-里程碑计划 3.样例-工作任务分解表WBS 二.分析依赖关系 1.工作任务的依赖关系 2.样例-网络图PDM 三.估计资源状况-责任矩阵图 1.样例-资源矩阵图 2.样例-责任矩阵图

java考试题库第六章.docx

第六章异常和异常处理 一选择题 6?1 .下列关于异常的描述中,错误的是(B) A.异常是一种经过修正后程序仍可执行的错误 B.异常是一种程序在运行中出现的不可恢复执行的错误 C.不仅Java语言有异常处理,C++语言也有异常处理 D.岀现异常不是简单结束程序,而是执行某种处理异常的代码,设法恢复程序的执行 6?2.下列关于异常处理的描述中,错误的是(D) A.程序运行时异常由Java虚拟机自动进行处理 B.使用try-catch-finally语句捕获异常 C.使用throw语句抛出异常 D.捕获到的异常只能用当前方法中处理,不能用其他方法中处理 6?3.下列关于try-catch-finally语句的描述中,错误的是(A) A?try语句后面的程序段将给出处理异常的语句 B?catch ()方法跟在try语句后面,它可以是一个或多个 C. catch ()方法有一个参数,该参数是某种异常类的对彖 D?finally语句后面的程序段总是被执行的,该语句起到提供统一接口的作用 6?4.下列关于抛出异常的描述中,错误的是(D) A.捕捉到发牛的异常可在当前方法中处理,也可以抛到调用该方法的方法中处理 B.在说明要抛出异常的方法吋应加关键字throw<异常列表〉 C.v异常列表〉中可以有多个用逗号分隔的异常 D.抛岀异常的方法中要使用下述抛出异常语句:throw<异常名〉;其中,v异常名>是异常类的类名6?5.下列关于用户创建自己的异常描述中,错误的是(D) A.创建自己的异常应先创建一个异常类 B.为实现抛出异常,须在可能抛出异常的方法中书写throw语句 C.捕捉异常的方法是使用try-catch-finally语句格式 D.使用异常处理不会使整个系统更加安全和稳定 二判断题 6?1 .异常是一种特殊的运行错误的对象。(对) 62异常处理可以使整个系统更加安全和稳定。(对) 6?3.异常处理是在编译时进行的。(错) 6-4.Java语言中异常类都是https://www.360docs.net/doc/2d2468068.html,ng.Throwable的子类。(对) 6-5.Throwable类有两个子类:Enor类和Exception类。前者由系统保留,后者供应用程序使用。(对)6?6.异常通常是指Error类和Exception类。(错) 6-7.Exception 类只有一个子类为RuntimeException o(错) 68在异常处理屮,出现异常和抛出异常是一回事。(错) 6?9.运行时异常是在运行时系统检测并处理的。(错) 6-10.使用try-catch-finally语句只能捕获一个异常。(错) 6?11 ?捕获异常时try语句后面通常跟有一个或多个catch ()方法用来处理try块内牛成的异常事件。(对)6?12?使用finally语句的程序代码为该程序提供一个统一的的出口。(对) 6?13.抛出异常的方法说明中要加关键字throws,并在该方法屮还应添加throw语句。(对) 6?14.创建异常类时要给出该异常类的父类。(对) 6J5.如果异常类没有被捕获将会产生不正常的终止。(对) 三分析程序的输出结果 6?1. Exer6_l.java public class Exer6_l

相关文档
最新文档