学习jsp中的一些小结

语法:
==========================
1.<%=%>表达式操作,=号后的值只能是String类型
2.把类、函数、变量声明在<%! %>中
3.注释用<%-- --%><%-- --%>

服务端内置静态对象:
==========================
1. out.println(string) 和 System.out.println(string)区别:
out.println从javax.servlet.jsp.JspWriter类继承,用于客户端网页内容的直接输出
System.out.println(string)是用于向服务端Java系统控制台的输出
2. 要在多个jsp页面中共享变量(传递参数),使用Request对象setAttribute和getAttribute。
3. session和Application对象中绑定的数据类型只能是Java对象:String、Integer、Vector等。
而不能是普通数据类型,如int、double、float等。

字符编码:
==========================

这一次是日文字符编码问题:(中文字符编码问题在下文中也可找到问题所在)


先搞清楚静态和动态日文字符

静态日文字符是不在jsp语句块<%%>, <%!%>等中的,动态日文字符与此相反。

问题描述:

JSP页面中所有静态的日文字符,在输出至客户端后都变成了类似 /u5117/u6125...字符,

问题最有可能出现在下面几个步骤:
首先,JSP页面先转换为java中间文件,这一步需要进行字符重新编码,然后,java中间文件在编译为class文件时,需要进行字符重新编码.
上面这两步都和当前JVM系统所支持的字符编码集有关。我的机器是windows2000中文操作系统,且控制面板>区域设置中没有安装日文字符集,这或许就是问题所在,操作系统的JVM不支持shift_jis日文字符集编码,未经日文字符集编码的日文字符串被默认编码为UNICODE字符输出,而从数据库中取出的动态的日文字符,不经过java和class这两步的转换,而直接输出到页面上--显示是正确的日文字符。

解决:
日文是MBCS(多字节字符集编码),即一个字符串中可能有两个字节组合的字符,也可能有一个字节的字符,必须经过内码转换,参见下面的内码转换函数,用该函数把日文重新编码,最后输出至客户端,就能够正确显示日文。

String trans(String str)
{
  String strResult = null;
  byte tmp[];
  try{
    tmp = str.getBytes();
    strResult=new String(tmp, "shift_jis");
  }
  catch(Exception e)
  {
    System.out.println(e.getMessage());
  }
  return strResult;
}

事实上,要做的只是利用该转换函数将最后输出的用UNICODE码表现的静态日文字符重新编码为shift_jis日文字符,最后输出,例如,可以这么写:<%=trans("日文字符")%>

 

再谈jsp页面编码问题(以日文编码为例,中文可参考):
1. <@page contentType="text/html; charset=shift_jis">
这一句话只是指示浏览器:当前页面的字符集是shift_jis日文编码,也就是说客户端的页面源代码是按日文编码进行解释的。

2. <% request.setCharacterEncoding("shift_jis"); %>
这一句话指示jsp页面接受的请求参数值需要重新编码为shift_jis日文格式

3. 什么情况下需要转换编码的函数?
只有当最终输出到客户端页面的字符不是日文编码时,才会用到转换函数。<%=trans("日文字符")%>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值