深爱那片海 发表于 2015-1-18 11:27:13

JAVA网页设计Java Servlet/Jsp多言语办理计划(一)

有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。js|servlet|办理JavaServlet/Jsp多言语办理计划

由于一向不信Java竟会有不克不及混排显现多国言语的BUG,这个周末研讨了一下Servlet、
Jsp的多国言语显现的成绩,也就是Servlet的多字符集成绩,因为我对字符集的观点还
不是很明晰以是写出的工具一定是正确的,我是如许了解Java中的字符集的:在运转时
,每一个字符串对象中存储的都是编码为UNICODE内码的(我以为一切的言语中都是有响应
编码的,由于在盘算机外部字符串老是用内码来暗示的,只不外一样平常盘算机言语中的字
符串编码时平台相干的,而Java则接纳了平台有关的UNICODE)。
  Java从一个byte流中读取一个字符串时,将把平台相干的byte变化为平台有关的Un
icode字符串。在输入时Java将把Unicode字符串变化为平台相干的byte流,假如某个Un
icode字符在某个平台上不存在,将会输入一个?。举个例子:在中文Windows中,Jav
a读出一个"GB2312"编码的文件(能够是任何流)到内存中机关字符串对象,将会把GB2
312编码的笔墨变化为Unicode编码的字符串,假如把这个字符串输入又将会把Unicode字
符串转化为GB2312的byte流或数组:"中文测试"----->"u4e2du6587u6d4bu8bd5"--
--->"中文测试"。
以下例程:
byte[]bytes=newbyte[]{(byte)0xd6,(byte)0xd0,(byte)0xce,(byte)0xc4,(b
yte)0xb2,(byte)0xe2,(byte)0xca,(byte)0xd4};//GBK编码的"中文测试"
java.io.ByteArrayInputStreambin=newjava.io.ByteArrayInputStream(bytes);
java.io.BufferedReaderreader=newjava.io.BufferedReader(newjava.io.Inpu
tStreamReader(bin,"GBK"));
Stringmsg=reader.readLine();
System.out.println(msg)
  这段程序放到包括"中文测试"这四个字的体系(如中文体系)中,能够准确地打印
出这些字。msg字符串中包括了准确的"中文测试"的Unicode编码:"u4e2du6587u6d4
bu8bd5",打印时转换为操纵体系的默许字符集,是不是能够准确显现依附于操纵体系的
字符集,只要在撑持响应字符集的体系中,我们的信息才干准确的输入,不然失掉的将
会是渣滓。
  话进正题,我们来看看Servlet/Jsp中的多言语成绩。我们的方针是,任一国度的客
户端经由过程Form向Server发送信息,Server把信息存进数据库中,客户端在检索时仍旧能
够看到本人发送的准确信息。现实上,我们要包管,终极Server中的SQL语句中保留的时
包括客户端发送笔墨的准确Unicode编码;DBC与数据库通信时接纳的编码体例能包括客
户端发送的笔墨信息,现实上,最好让JDBC间接利用UNICODE/UTF8与数据库通信!如许
就能够确保不会丧失信息;Server向客户端发送的信息时也要接纳不丧失信息的编码方
式,也能够是Unicode/Utf8。
  假如不指定Form的Enctype属性,Form将把输出的内容按照以后页面的编码字符集u
rlencode以后再提交,服务器端失掉是urlencoding的字符串。编码后失掉的urlencodi
ng字符串是与页面的编码相干的,如gb2312编码的页面提交"中文测试",失掉的是"%D6
%D0%CE%C4%B2%E2%CA%D4",每一个"%"后跟的是16进制的字符串;而在UTF8编码时失掉的
倒是"%E4%B8%AD%E6%96%87%E6%B5%8B%E8%AF%95",由于GB2312编码中一个汉字是16位的
,而UTF8中一个汉字倒是24位的。中日韩三国的ie4以上扫瞄器均撑持UTF8编码,这类方
案一定包容了这三国言语,以是我们假如让Html页面利用UTF8编码那末将最少能够撑持
这三国言语。
  可是,假如我们html/Jsp页面利用UTF8编码,由于使用程序服务器大概不晓得这类
情形,由于假如扫瞄器发送的信息不包括charset信息,最多Server晓得读到Accept-La
nguage哀求招标,我们晓得仅靠这个招标是不克不及获知扫瞄器所接纳编码的,以是使用程
序服务器不克不及准确剖析提交的内容,为何?由于Java中的一切字符串都是Unicode16位
编码的,HttpServletRequest.request(String)的功效就是把客户端提交的Urlencode编
码的信息转为Unicode字符串,有些Server只能以为客户真个编码和Server平台不异,简
单地利用URLDecoder.decode(String)办法间接解码,假如客户端编码刚好和Server不异
,那末就能够失掉准确地字符串,不然,假如提交地字符串中包括了外地字符,那末将
会招致渣滓信息。
  在我提出的这个办理计划里,已指定了接纳Utf8编码,以是,能够制止这个成绩
,我们能够本人定制出decode办法:
publicstaticStringdecode(Strings,Stringencoding)throwsException{
StringBuffersb=newStringBuffer();
for(inti=0;i<s.length();i++){
charc=s.charAt(i);
switch(c){
case+:
sb.append();
break;
case%:
try{
sb.append((char)Integer.parseInt(
s.substring(i+1,i+3),16));
}
catch(NumberFormatExceptione){
thrownewIllegalArgumentException();
}
i+=2;
break;
default:
sb.append(c);
break;
}
}
//Undoconversiontoexternalencoding
Stringresult=sb.toString();
byte[]inputBytes=result.getBytes("8859_1");
returnnewString(inputBytes,encoding);
}
  这个办法能够指定encoding,假如把它指定为UTF8就满意了我们的必要。好比用它
剖析:"%E4%B8%AD%E6%96%87%E6%B5%8B%E8%AF%95"就能够失掉准确的汉字"中文测试"的
Unicode字符串。
如今的成绩就是我们必需失掉客户端提交的Urlencode的字符串。关于method为get的fo
rm提交的信息,能够用HttpServletRequest.getQueryString()办法读到,而关于post方
法的form提交的信息,只能从ServletInputStream中读到,现实上尺度的getParameter
办法被第一次挪用后,form提交的信息就被读掏出来了,而ServletInputStream是不克不及
反复读出的。以是我们应在第一次利用getParameter办法前读取并剖析form提交的信息



有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。

谁可相欹 发表于 2015-1-21 07:02:42

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

乐观 发表于 2015-1-27 07:50:35

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

飘飘悠悠 发表于 2015-2-1 16:21:48

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

只想知道 发表于 2015-2-7 02:29:25

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

山那边是海 发表于 2015-2-16 19:52:50

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

不帅 发表于 2015-2-27 21:12:56

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

灵魂腐蚀 发表于 2015-3-8 11:45:23

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

透明 发表于 2015-3-15 22:26:19

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
页: [1]
查看完整版本: JAVA网页设计Java Servlet/Jsp多言语办理计划(一)