国际化与ajax

来源:互联网 发布:程序员图片 编辑:程序博客网 时间:2024/06/02 04:20
国际化
问题:什么是国际化,国际化作用?
软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,
提供相应的、符合来访者阅读习惯的页面或数据。
国际化又称为 i18n:internationalization

对于程序中固定使用的文本元素,例如菜单栏、导航条等中使用的文本元素、或错误提示信息,状态信息等,
需要根据来访者的地区和国家,选择不同语言的文本为之服务。
对于程序动态产生的数据,例如(日期,货币等),软件应能根据当前所在的国家或地区的文化习惯进行显示。

可以提供更友好的访问习惯。

问题:怎样实现国际化?
针对于不同的国家与地区要显示的信息,都配置到配置文件中,
根据当前访问者的国家或语言来从不同的配置文件中获取信息,
展示在页面上。

问题:关于配置文件?
所谓的配置文件就是一组properties文件,它们叫做资源包。

相关的概念:
对于软件中的菜单栏、导航条、错误提示信息,状态信息等这些固定不变的文本信息,可以把它们写在一个properties文件中,
并根据不同的国家编写不同的properties文件。这一组properties文件称之为一个资源包。


ResourceBundler,它是用于从资源包中获取数据的。

关于资源文件(properties)命名:
基名_语言_国家.properties

message_zh_CN.properties
message_en_US.properteis
----------------------------------------------------------
编码演示  properties文件操作以及通过ResourceBundler来获取资源包中信息.

1.资源包文件一般都放置在classpath下(对于myeclipse就是src下)

2.关于ResourceBundle使用
创建:
ResourceBundle bundle = ResourceBundle.getBundle("message");
ResourceBundle bundle = ResourceBundle.getBundle("message",Locale.US);
获取:
bundle.getString(String name);

扩展:关于properties文件中中文问题处理?
在jdk中有一个命令native2ascii.exe。

1.进行一次翻译
native2ascii 回车
中文  回车

2.批量翻译
native2ascii  源文件路径   目录文件路径
例如: native2ascii d:/a.txt  d:/a.properties

-------------------------------------------------------------------
国际化的登录页面
1.创建登录页面
2.创建配置文件
3.在登录页面上根据不同的国家获取ResourceBundle
4.在页面上需要国际化的位置,通过ResourceBundle.getString()来获取信息.

问题:在页面上使用了jsp脚本.解决方案:使用标签 。
在jstl标签库中提供了国际化标签.


------------------------------------------------------------------------
关于日期国际化
DateFormat类.
作用:
1.可以将一个Date对象格式化成指定效果的String     format方法
2.可以将一个String解析成Date对象     parse方法

1.DateFormat对象创建
DateFormat df1 = DateFormat.getDateInstance(); // 只有年月日
DateFormat df2 = DateFormat.getTimeInstance(); // 只有小时分钟秒
DateFormat df3 = DateFormat.getDateTimeInstance();// 两个都有

DateFormat df1 = DateFormat.getDateInstance(DateFormat.FULL); // 只有年月日
DateFormat df2 = DateFormat.getTimeInstance(DateFormat.MEDIUM); // 只有小时分钟秒
DateFormat df3 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.SHORT);// 两个都有

DateFormat df1 = DateFormat.getDateInstance(DateFormat.FULL,Locale.US); // 只有年月日
DateFormat df2 = DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.US); // 只有小时分钟秒
DateFormat df3 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.SHORT,Locale.US);// 两个都有

关于货币国际化
NumberFormat类
1.对数值进行格式化
NumberFormat nf = NumberFormat.getIntegerInstance();
2.对数值进行百分比
NumberFormat nf = NumberFormat.getPercentInstance(Locale.FRANCE);
3.对数值进行以货币显示
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);

----------------------------------------------------------------------------------------------------------------
MessageFormat
动态文件格式化.

MessageForamt可以对一个模板中的信息进行动态赋值.

1.MessageFormat使用
MessageForamt.format(String pattern,Object... params);

2.说明一下关于动态文本中的占位符?
例如:{0} is required 

1.注意占位符只能使用{0}---{9}之间的数值.
2.关于占们符的格式
{argumentIndex}: 0-9 之间的数字,表示要格式化对象数据在参数数组中的索引号
{argumentIndex,formatType}: 参数的格式化类型
{argumentIndex,formatType,FormatStyle}: 格式化的样式,它的值必须是与格式化类型相匹配的合法模式、或表示合法模式的字符串。


formatType可以取的值有:number date time
formatStyle可以取的值有
number类型可以取:integer currency  percent 
date类型可以取的:short medium  full long
time类型可以取的:short medium  full long

========================================================================================================
ajax
问题:ajax是什么,它有什么用?
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。
AJAX 是一种用于创建快速动态网页的技术

使用ajax目的是为了提高用户的感受。

问题:异步是什么?

异步操作的核心 XMLHttpRequest对象.

传统web交互模型,浏览器直接将请求发送给服务器,服务器回送响应,直接发给浏览器, 
Ajax交互模型,浏览器首先将请求 发送 Ajax引擎(以XMLHttpRequest为核心),AJax引擎再将请求发送给 服务器,服务器回送响应先发给Ajax引擎,再由引擎传给浏览器显示 


1、同步交互模式,客户端提交请求,等待,在响应回到客户端前,客户端无法进行其他操作 
2、异步交互模型,客户端将请求提交给Ajax引擎,客户端可以继续操作,由Ajax引擎来完成与服务武器端通信,
   当响应回来后,Ajax引擎会更新客户页面,在客户端提交请求后,用户可以继续操作,而无需等待 。 


Google : suggest建议、邮件定时保存、map地图
----------------------------------------------------------
ajax开发步骤:
ajax核心就是XMLHttpRequest对象.

1.得到XMLHttpRequest对象.(js对象)
在w3school文档中的 xmldom文档中就可以查找到  dom XMLHttpRequest对象.
var xmlhttp=null;
if (window.XMLHttpRequest)
{// code for all new browsers
 xmlhttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{// code for IE5 and IE6
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
2.注册回调函数
xmlhttp.onreadystatechange=function(){

};
3.open
只是用于设置请求方式 以及url,它不发送请求.

4.send
它是用于发送请求的。
send(null);null代表没有参数  如果有参数可以写成:"username=tom&password=123"


5.在回调函数中处理数据

1.XMLHttpRequest对象有一个属性  readyState
它代表的是XMLHttpRequest对象的状态。

0.代表XMLHttpRequest对象创建
1.open操作
2.send操作
3.接收到了响应数据,但是只有响应头,正文还没有接收。
4.所有http响应接收完成。


2.status
由服务器返回的 HTTP 状态代码,如 200 表示成功


3.在回调函数中可以通过以下方式获取服务器返回的数据
1.responseText
2.responseXML

--------------------------------------------------------------------------
关于ajax操作中请求参数的设置问题:

1.对于get请求方式,参数设置
直接在url后面拼接
例如:"${pageContext.request.contextPath}/ajax2?name=tom"

2.对于post请求方式,参数设置

xmlhttp.open("POST","${pageContext.request.contextPath}/ajax2");
xmlhttp.send("name=tom");

注意:如果是post请求方式,还需要设置一个http请求头。
xmlhttp.setRequestHeader("","");

例如:
xmlhttp.open("POST","${pageContext.request.contextPath}/ajax2");
xmlhttp.setRequestHeader("content-type","application/x-www-form-urlencoded");
xmlhttp.send("name=tom");

------------------------------------------------------------------------
ajax案例1--验证用户名是否可以使用

-------------------------------------------------------------------------
ajax案例2--显示商品信息
第一个版本:
1.创建一个Product类
private int id;
private String name;
private double price;

2.创建ajax4.jsp
<a href="javascript:void(0)" id="p">显示商品信息</a>
<div id="d"></div>

在回调函数中得到服务器返回的信息innerHTML到div中.

3.在Ajax4Servlet中
将List<Product>中的数据,手动拼接成了html代码,写回到浏览器端.

builder.append("<table border='1'><tr><td>商品编号</td><td>商品名称</td><td>商品价格</td></tr>");
for (Product p : ps) {
builder.append("<tr><td>" + p.getId() + "</td><td>" + p.getName()
+ "</td><td>" + p.getPrice() + "</td></tr>");
}
builder.append("</table>");

------------------------
第二个版本
创建一个product.jsp页面,在页面上去组装table,直接将数据返回了.

步骤
1.在Ajax4Servlet中
request.setAttribute("ps", ps);
request.getRequestDispatcher("/product.jsp").forward(request, response);
2.在product.jsp页面上
<table border='1'>
<tr>
<td>商品编号</td>
<td>商品名称</td>
<td>商品价格</td>
</tr>
<c:forEach items="${ps}" var="p">
<tr>
<td>${p.id }</td>
<td>${p.name }</td>
<td>${p.price }</td>
</tr>
</c:forEach>
</table>
------------------------------------------
第三个版本
在服务器端得到数据,只将要显示的内容返回,而不返回html代码
而html代码的拼接,在浏览器端完成。

问题:服务器返回什么样的数据格式?
json:它是一种轻量级的数据交换格式。

[{'id':'1','name':'洗衣机','price':'1800'},{'id':'2','name':'电视机','price':'3800'}]
在js中{name:value,name1:valu1}这就是一个json对象.
[{},{}]这代表有两个对象装入到了一个数组中。

-----------------------------------------------------------------------
关于json插件使用:
在java中,可以通过jsonlib插件,在java对象与json之间做转换。

关于jsonlib插件使用:
1.导包(6个包)

2.将java对象转换成json

1.对于数组,List集合,要想转换成json
JSONArray.fromObject(java对象); ["value1","value2"]

2.对于javaBean,Map
JSONObject.fromObject(javaBean对象); {name1:value1,name2:value2}

对于json数据,它只有两种格式
1.[值1,值2,...]  ------>这就是javascript中的数组
2.{name:value,....} ---->就是javascript中的对象。
但是这两种格式可以嵌套.
[{},{},{}]
{name:[],name:[]}

3.如果javaBean中有一个属性,不想生成在json中,怎样处理?
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] { "type" });
JSONArray.fromObject(ps, config).toString();
上述代码就是在生成json时,不将type属性包含.

-------------------------------------------------------------------------------------------------
ajax操作中服务器端返回xml处理
XMHttpRequest.resposneXML;----->得到的是一个Document对象.

操作:可以自己将xml文件中的内容取出来,写回到浏览器端。也可以请求转发到一个xml文件,将这个文件信息写回到
     浏览器端.注意   response.setContextType("text/xml;charset=utf-8");
 
问题:如果没有xml文件,我们的数据是从数据库中查找到了,想要将其以xml格式返回怎样处理?

可以使用xml插件处理  xstream,它可以在java对象与xml之间做转换.

xstream使用:
1.导包
2个.
2.使用
1.将java对象转换成xml
XStream xs=new XStream();
String xml=xs.toXML(java对象);
问题:生成的xml中的名称是类的全名.
两种方式:
1.编码实现
xs.alias("person", Person.class);
2.使用注解(Annotation)
@XStreamAlias(别名) 对类和变量设置别名
@XStreamAsAttribute  设置变量生成属性
@XStreamOmitField  设置变量 不生成到XML
@XStreamImplicit(itemFieldName = “hobbies”) 设置集合类型变量 别名


使注解生效 
xStream.autodetectAnnotations(true);
0 0
原创粉丝点击