标签:
| 文档版本 | 开发工具 | 测试平台 | 工程名字 | 日期 | 作者 | 备注 | 
|---|---|---|---|---|---|---|
| V1.0 | 2016.06.10 | lutianfei | none | 
国际化又称为 i18n:internationalization
软件实现国际化,需具备哪些特征:
针对于不同的国家与地区要显示的信息,都配置到配置文件中,根据当前访问者的国家或语言来从不同的配置文件中获取信息,展示在页面上。
对于软件中的菜单栏、导航条、错误提示信息,状态信息等这些固定不变的文本信息,可以把它们写在一个properties文件中,并根据不同的国家编写不同的properties文件。这一组properties文件称之为一个资源包。
在JavaAPI中提供了一个ResourceBundle 类用于描述一个资源包,并且 ResourceBundle类提供了相应的方法getBundle,这个方法可以根据来访者的国家地区自动获取与之对应的资源文件予以显示。
一个资源包中的每个资源文件都必须拥有共同的basename基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。例如:一个资源包的基名是“myproperties”,则与中文、英文环境相对应的资源文件名则为:  
“myproperites_zh_cn.properties”  “myproperites_en_US.properties”
资源包中所有properties文件必须具有相同基名basename, 在basename后可以通过_拼接国家和语言信息 例如:basename_语言_国家.properties 

关键字=值的形式,软件根据关键字检索值显示在页面上。一个资源包中的所有资源文件的关键字必须相同,值则为相应国家的文字。
如果与该locale对象匹配的资源包子类找不到。一般情况下,则选用操作系统默认资源文件予以显示
优先级:指定Locale > 系统默认区域和语言 > 资源包默认的
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
作用:
实例化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);// 两个都有getPercentInstance(Locale locale):以参数locale对象所标识的本地信息来获得处理百分比数值的NumberFormat实例对象
1.对数值进行格式化
// 1.数值操作
@Test
public void fun1() {
    NumberFormat nf = NumberFormat.getIntegerInstance();
    String s = nf.format(19.98765);
    System.out.println(s);
}
// 2.查分比
@Test
public void fun2() {
    NumberFormat nf = NumberFormat.getPercentInstance(Locale.FRANCE);
    String s = nf.format(0.98);
    System.out.println(s);
}
// 3.货币
@Test
public void fun3() {
    NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);
    System.out.println(nf.format(1090));
}例如:
MessageFormat 类如何进行批量处理呢?
模式字符串:
On {0}, a hurricance destroyed {1} houses and caused {2} of damage.MessageFormat类的使用
自定义Locale
占位符有三种书写方式:
@Test
public void fun2() {
    // At 12:30 pm on jul 3,1998, a hurricance destroyed 99 houses and
    // caused $1000000 of damage
    String msg = "At {0,time,short} on {0,date,long}, a hurricance destroyed {1,number,integer} houses and caused {2,number,currency} of damage";
    Calendar c = Calendar.getInstance();
    c.set(1998, 6, 3, 12, 30,0);
    Date date = c.getTime();
    MessageFormat mf = new MessageFormat(msg, Locale.US);
    String value = mf.format(new Object[] { date, 99, 1000000 });
    System.out.println(value);
}AJAX 即Asynchronous Javascript And XML(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 
使用ajax目的是为了提高用户的感受。
问题:异步是什么?
XMLHttpRequest 对象.传统web交互模型,浏览器直接将请求发送给服务器,服务器回送响应,直接发给浏览器 

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

同步交互模式,客户端提交请求,等待,在响应回到客户端前,客户端无法进行其他操作
异步交互模型,客户端将请求提交给Ajax引擎,客户端可以继续操作,由Ajax引擎来完成与服务武器端通信,当响应回来后,Ajax引擎会更新客户页面,在客户端提交请求后,用户可以继续操作,而无需等待 。
Google : suggest建议、邮件定时保存、map地图
ajax核心就是XMLHttpRequest对象.
1.创建XMLHttpRequest对象
open(method,url, asynch) :建立对服务器的调用 send(content) :向服务器发送请求onreadystatechange :状态回调函数responseText/responseXML :服务器的响应字符串status:服务器返回的HTTP状态码statusText:  服务器返回的HTTP状态信息  readyState :对象状态     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");
     }    xmlhttp.onreadystatechange=function(){        
    };3.使用open方法建立与服务器的连接
4.向服务器端发送数据 send
5.在回调函数中对返回数据进行处理
    if(xmlHttp.readyState == 4){
        // 判断数据是否正确
        if(xmlHttp.status == 200){
            // 响应有效
            ...
        }
    }客户端向服务器提交数据
关于ajax操作中请求参数的设置问题:
var xmlHttp = createXMLHttpRequest();
xmlHttp.onreadystatechange = function(){
    if(xmlHttp.readyState ==4 ){
    if(xmlHttp.status == 200){
        ...                                
        }
    }
};
xmlHttp.open("GET","checkUsername?username="+username);
xmlHttp.send(null);

1.创建一个Product类
2.创建ajax4.jsp
    <a href="javascript:void(0)" id="p">显示商品信息</a>
    <div id="d"></div>* 在回调函数中得到服务器返回的信息innerHTML到div中.
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>");    <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>第三个版本
问题:服务器返回什么样的数据格式?
    [{‘id‘:‘1‘,‘name‘:‘洗衣机‘,‘price‘:‘1800‘},{‘id‘:‘2‘,‘name‘:‘电视机‘,‘price‘:‘3800‘}]
    在js中{name:value,name1:valu1}这就是一个js对象.
    [{},{}]这代表有两个对象装入到了一个数组中。json 是一种javascript轻量级数据交互格式,主要应用于Ajax编程在java中;可以通过jsonlib插件,在java对象与json之间做转换。
格式一: {key:value,key:value,key:value } 键值对直接用,分开,键值之间用:,键本身必须是字符串常量 
格式二: ·[值1, 值2 ,值3 ]· 数组结构
是 java类库 ,支持 javabean map list array 转换 json格式字符串, 支持将json字符串转换 javabean对象
导入jar包(6个)
JSONArray        String[] arr = {"sada","fdssd","dfsd","sadas"};
        JSONArray jsonArray =  JSONArray.fromObject(arr);
        System.out.println(jsonArray.toString()); * 2) 将JavaBean/Map解析成JSON串:使用`JSONObject`
        Product p1 = new Product();
        p1.setName("三星手机");
        p1.setPrice(3999);
        JSONObject jsonObject = JSONObject.fromObject(p1);
        System.out.println(jsonObject);* 3) 通过JsonConfig对象 配置对象哪些属性不参与转换 
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setExcludes(new String[]{"price"});
        JSONObject jsonObject = JSONObject.fromObject(p1, jsonConfig);
        System.out.println(jsonObject);
XMHttpRequest.resposneXML;—–>得到的是一个Document对象.
操作:可以自己将xml文件中的内容取出来,写回到浏览器端。也可以请求转发到一个xml文件,将这个文件信息写回到
浏览器端,注意 response.setContextType(“text/xml;charset=utf-8”);
问题:如果没有xml文件,我们的数据是从数据库中查找到了,想要将其以xml格式返回怎样处理?
xstream,它可以在java对象与xml之间做转换.xstream使用:
XStream is a simple library to serialize objects to XML and back again.
如果实现 对象 — xml 只需要 xstream-1.3.1.jar
如果实现 xml —- 对象 需要 xstream-1.3.1.jar 、xpp3_min-1.1.4c.jar
将 xstream-1.3.1.jar 、xpp3_min-1.1.4c.jar 复制工程lib 目录下
核心方法
提供便捷注解 
@XStreamAlias(别名) 对类和变量设置别名 
@XStreamAsAttribute  设置变量生成属性 
@XStreamOmitField  设置变量 不生成到XML 
@XStreamImplicit(itemFieldName = “hobbies”) 设置集合类型变量 别名
使注解生效  
xStream.autodetectAnnotations(true);
使用 xmlHttp.responseXML 接收解析成为 document对象
eval()转换。 <title>ajax开发---json返回</title>
<script type="text/javascript"
    src="${pageContext.request.contextPath}/my.js"></script>
<script type="text/javascript">
    var jsonObj; //声明全局,因为要在多个函数中使用.
    window.onload = function() {
        var province = document.getElementById("province");//省份下拉框
        //第一步:得到XMLHttpRequest对象.
        var xmlhttp = getXmlHttpRequest();
        //2.设置回调函数
        xmlhttp.onreadystatechange = function() {
            //5.处理响应数据  当信息全部返回,并且是成功
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                jsonObj = eval("(" + xmlhttp.responseText + ")");
                //得到省份名称
                for ( var i = 0; i < jsonObj.length; i++) {
                    var pname = jsonObj[i].name;
                    var option = document.createElement("option");
                    option.text = pname;
                    province.add(option);
                }
            }
        };
        //post请求方式,参数设置
        xmlhttp.open("GET", "${pageContext.request.contextPath}/ajax2");
        xmlhttp.send(null);
    };
    //创建一个函数,用于向城市下拉框中添加值.
    function fillCity() {
        var province = document.getElementById("province");//省份下拉框
        var city = document.getElementById("city");//城市下拉框.
        //每一次向城市中添加信息时,将信息重置。
        city.innerHTML = "<option>--请选择城市--</option>";
        var pname = province.options[province.selectedIndex].text;
        for ( var i = 0; i < jsonObj.length; i++) {
            var pElementName = jsonObj[i].name;
            if (pname == pElementName) {
                var citys = jsonObj[i].citys;
                for ( var j = 0; j < citys.length; j++) {
                    var cname = citys[j].name;
                    var option = document.createElement("option");
                    option.text = cname;
                    city.add(option);
                }
            }
        }
    }
</script>    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/xml;charset=utf-8");
        // 1.得到数据
        List<Province> ps = new ArrayList<Province>();
        Province p1 = new Province();
        p1.setName("黑龙江");
        List<City> citys1 = new ArrayList<City>();
        City city1 = new City();
        city1.setName("哈尔滨");
        City city11 = new City();
        city11.setName("齐齐哈尔");
        City city111 = new City();
        city111.setName("大庆");
        citys1.add(city1);
        citys1.add(city11);
        citys1.add(city111);
        p1.setCitys(citys1);
        Province p2 = new Province();
        p2.setName("吉林");
        List<City> citys2 = new ArrayList<City>();
        City city2 = new City();
        city2.setName("长春");
        City city22 = new City();
        city22.setName("吉林");
        City city222 = new City();
        city222.setName("四平");
        citys2.add(city2);
        citys2.add(city22);
        citys2.add(city222);
        p2.setCitys(citys2);
        ps.add(p1);
        ps.add(p2);
        // 转换成json
        String json = JSONArray.fromObject(ps).toString();
        response.getWriter().write(json);
        response.getWriter().close();
    }标签:
原文地址:http://blog.csdn.net/lutianfeiml/article/details/51643733