JSP学习笔记--国际化和本地化、JavaBean

来源:互联网 发布:asio网络库 编辑:程序博客网 时间:2024/05/12 14:34

几天前发了关于Servlet的学习笔记,现在再发关于国际化和本地化、JavaBean的学习笔记,大家看后希望能找出表述不准确或是错误的地方,共同进步。

 

关于国际化和本地化

 

国际化是实现提供多种语言支持和符合习惯应用程序的过程,因而国际化所导致的必然结果是本地化。其中最主要的是时间国际化和语言国际化,当然还有货币国际化,数字国际化等等。时间日期的国际化的具体要求是使日期的显示符合本地用户的习惯,语言也是要求应用程序能够正确读、写和操作本地化语言的文本文件。JSP国际化的基础是JAVA的国际化,即利用资源捆绑机制把资源与代码分离,通过读取相应的Locale(本地)信息,自动匹配相应的资源,并通过此就可以实现文本,时间,日期,货币以及数字等内容和格式的国际化。时间和日期的国际化,在java.text包中封装的DateFormart类,有可以方便实现日期和时间本地化。而语言的国际化比较复杂,要理解好就得从JSP程序的编译开始。JAVA语言内核是采用Unicode字符标准系统的,所以JSP页面也可以用Unicode编码序列来存储所有书面语言中常用的字符或者字符串。当客户请求一个JSP页面时,Web容器(Tomcat)调用JSP编译器编译该JSP文件。JSP编译器先查看JSP文件中是否设置有文件编码格式,如果JSP文件中没有设置JSP文件编码格式,则JSP编译器调用JDK先把JSP文件用JVM默认的字符编码格式转化为临时的Servlet类,然后在把这个java文件编译成Unicode格式的class类文件。JVM在内存中运行该Servlet类,如果Servlet在运行的过程中,需要接受客户端传来的字符,此时如果程序中此时没有设定接受参数时采用的编码格式,则Web容器会默认采用iso-8859-1编码格式来接受传入的值并在JVM中转化为Unicode格式保存在Web容器的内存中。Servlet运行后生成输出,输出的字符串是Unicode格式的,这个字符串(html标签、各种数据信息)是直接发送到客户端浏览器上。如果此时指定了发送时输出的编码格式,则Web容器会按照指定的编码格式输出到浏览器上,如果没有指定,则按照Web容器默认的iso-8859-1编码格式发送到客户电浏览器上。所以语言本地化,就是要在页面上指定接受和发送字符串的本地编码格式。

 

JSP的中文乱码问题,其根源在于:Web容器默认的字符处理编码是iso-5889-1,对于需要在浏览器页面上显示中文的JSP程序,但在程序中并没有指定中文的字符集,那么中文将在浏览器页面上显示为乱码。所以要显示中文字符在浏览器上,必须要有指定中文的字符集,也就是charset的值可以设置为gb2312UTF-8GBK,这三个字符集都包含有中文字符集。还有中文参数在JSP页面之间传递、页面与Servlet之间传递、数据库应用的乱码问题。JSP页面之间传递有<jsp:forward>标签、<jsp:include>标签和一般页面之间传递分。如果是<jsp:forward>中传递的,可以在每个页面都要加上<%request.setCharacterEncoding("GBK"); %>语句。在<jsp:include>中传递的,可以在包含页(被包含页不需要)中加上<%request.setCharacterEncoding("GBK"); %>语句。而在一般页面中,有getpost两种传送参数方式,post方式和get方式都需要取参数值时用如下语法:String param_name = new  String(request.getParameter("param_name").getBytes("iso-8859-1"),"gb2312");这个时候就是把iso-8859-1格式的值转化为gb2312格式的值,其实get方式传送参数方式也就是URL传送参数,两者是一样的意思,中文字符在get方式和URL上传送时都会在地址栏显示乱码;post还可以使用<% request.setCharacterEncoding("GBK"); %>或者<% request.setCharacterEncoding("gb2312"); %>语句也不会出现乱码。页面与Servlet之间传参数和页面与页面之间传送参数是一样的,都有getpost传送方式。

 

关于JavaBean

 

JavaBean是用Java语言描述的软件组件模型,一般可以分为可视化组件和非可视化组件两种。说白了,JavaBean实际上就是一个类,只不过这个类在可视化组件里面是简单的GUI元素,如按钮、文本框、下拉框和报表等等,用在AWT或者SWING比较多;在非可视化组件里面就是没有GUI表现形式,主要用来封装业务逻辑、数据运算、数据库操作等等。设计JavaBean时要注意以下几个方面:

1.  JavaBean类是一个公共(public)的类;

2.  JavaBean类必须有一个没有参数的构造函数;

3.  JavaBean类所有的属性都应该定义为私有的(private);

4.  属性值通过定义为publicsetXxx()getXxx()方法来操作。

这些都是JavaBean设计最基本的规范,必须要遵守的约定,方便jsp文件使用JavaBean文件而规定的。

 

JavaBean生命期有4个,分别是pagerequestsessionapplication

1.  page是指只有单个页面能够使用这个Bean,在刷新时是不变的;

2.  reqeust是指一次请求时有效,只有使用<jsp:forward><jsp:include>的页面才能共享这个Bean,否则是跟page一样的效果;

3.  session是只有一个用户在一次会话期间时使用这个Bean,也就是说当用户关闭掉整个浏览器或者在Web设置的会话时间内客户没有发出任何请求(即使会话超时)的时候都是这个Bean对象被垃圾回收;

4.  application是指一个Web应用程序,所有访问该Web应用的客户都共享这个Bean对象,当所有用户都离开这个服务器时或者Web应用关闭或者重新加载这个JavaBean时都会使这个Bean对象回收。

 

这次就写到这里先了,下次在写有关ELJSTL的内容。笔者认为不管是什么知识,能够讲出来的才是自己真正的东西,把一件事一个知识点讲清楚,本身也就是一种学习的过程。