繁体中文
设为首页
加入收藏
当前位置:JSP技术首页 >> 资料/其它 >> 关于JSP中,中文问题(泛指字符问题),以及常见错误调试手记

关于JSP中,中文问题(泛指字符问题),以及常见错误调试手记

2005-04-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:关于JSP中,中文问题(泛指字符问题),以及常见错误调试手记 sports98写于2001-1-9 序言: 在论坛中,生活中,工作中,有不少和我一样属于鸟级的用户,在面对着不明白的问题的时候就盲目了,多交流,多写写日记...

关于JSP中,中文问题(泛指字符问题),以及常见错误调试手记

sports98写于2001-1-9

序言:

在论坛中,生活中,工作中,有不少和我一样属于鸟级的用户,在面对着不明白的问题的时候就盲目了,多交流,多写写日记就好的多了

文章内容关于:2001-01-08日,编写/调试[用户注册程序]

编写环境:WIN2K(简体中文版) server sp2 + TOMCAT4.0 + J2SDK1.3+MYSQL4.0(alpha)

检测数据库内容环境:WIN2K(简体中文版) server sp2 + IIS5.0 + PHP4.0+MYSQL4.0(alpha)+PHPMYADMIN2.0

程序代码(最终程序代码):

----------------------------------------------------------------------------------------------------------------------

<%@ page import="java.sql.*" contentType="text/HTML;charset=gb2312" %>

<%//获取提交信息

String reg_name=new String();

String reg_nick=new String();

String reg_pws=new String();

String reg_pws_rp=new String();

String reg_sex=new String();

String reg_email=new String();

String reg_email_rp=new String();

String reg_address=new String();

String reg_tel=new String();

String reg_hand=new String();

String reg_counter=new String();

String reg_city=new String();

String reg_zip=new String();

String reg_company=new String();

String reg_calling=new String();

String reg_place=new String();

String reg_question=new String();

String reg_answer=new String();

String reg_submit=new String();

String reg_check=new String();

String reg_momo=new String();

String SQL=new String();

String reg_teminfo=new String(); //欢迎信息,在论坛内将要使用

int flag_system;

int flag=1; //定义注册用户标记,1为活动用户,0为非活动拥护

int up=0; //定义用户登陆情况,注册时候默认为0次

//转换字符设置将ISO8859-1字符转为GBK字符,这样符合MYSQL字符,解决TOMCAT服务器下中文问题

reg_name=new String(request.getParameter("reg_truename").getBytes("GBK"),"ISO8859-1"); //用户真实名称

reg_nick=new String(request.getParameter("reg_name").getBytes("GBK"),"ISO8859-1"); //用户昵称

reg_pws=new String(request.getParameter("reg_pws").getBytes("GBK"),"ISO8859-1"); //用户密码

reg_pws_rp=new String(request.getParameter("reg_pws_rp").getBytes("GBK"),"ISO8859-1"); //校验密码

reg_sex=new String(request.getParameter("reg_sex").getBytes("GBK"),"ISO8859-1"); //用户性别

reg_email=new String(request.getParameter("reg_email").getBytes("GBK"),"ISO8859-1"); //电子邮件

reg_email_rp=new String(request.getParameter("reg_email_rp").getBytes("GBK"),"ISO8859-1"); //校验电子邮件

reg_address=new String(request.getParameter("reg_address").getBytes("GBK"),"ISO8859-1"); //详细地址

reg_tel=new String(request.getParameter("reg_tel").getBytes("GBK"),"ISO8859-1"); //联系电话

reg_hand=new String(request.getParameter("reg_hand").getBytes("GBK"),"ISO8859-1"); //手机或其他联系方式

reg_counter=new String(request.getParameter("reg_counter").getBytes("GBK"),"ISO8859-1"); //国家

reg_city=new String(request.getParameter("reg_city").getBytes("GBK"),"ISO8859-1"); //城市

reg_zip=new String(request.getParameter("reg_zip").getBytes("GBK"),"ISO8859-1"); //邮政编码

reg_company=new String(request.getParameter("reg_company").getBytes("GBK"),"ISO8859-1"); //公司名称

reg_calling=new String(request.getParameter("reg_calling").getBytes("GBK"),"ISO8859-1"); //职位性质

reg_place=new String(request.getParameter("reg_place").getBytes("GBK"),"ISO8859-1"); //职位

reg_question=new String(request.getParameter("reg_question").getBytes("GBK"),"ISO8859-1"); //机密问题

reg_answer=new String(request.getParameter("reg_answer").getBytes("GBK"),"ISO8859-1"); //机密答案

reg_submit=new String(request.getParameter("reg_submit").getBytes("GBK"),"ISO8859-1"); //提交变量

reg_check=new String(request.getParameter("reg_check").getBytes("GBK"),"ISO8859-1"); //是否检测过姓名标记

reg_momo=new String(request.getParameter("reg_momo").getBytes("GBK"),"ISO8859-1"); //用户简单信息MOMO

////////////////////////

reg_teminfo="论坛内欢迎信息";

reg_teminfo=new String(reg_teminfo.getBytes("GBK"),"ISO8859-1");

int reg_temflag=1; //在论坛内寻找该字段以便弹出即时信息

boolean temp=reg_check.equals("120980"); //判断标记,以后采用SESSION进行保存判断值

try{

if(temp)

{

%>

注册

<%

//////////////////////////////////////////判断用户注册信息////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////

java.lang.String strConn;

Class.forName("org.gjt.mm.mysql.Driver").newInstance(); //声明驱动程序For mysql

//声明连接对象 Connection C------C 为连接对象 Connection 为声明语句

Connection C = DriverManager.getConnection("jdbc:mysql://localhost/news?user=mysql&password=mysql&useUnicode=true&characterEncoding=8859_1"); //连接到数据库

Statement s=C.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet rs=s.executeQuery("select * from reg where nick='"+reg_name+"'"); //声明执行对象

if(rs.next())

{

%>

错误:非法操作注册程序!

提示:您已经注册或正在非法浏览本页面
本页面不允许刷新!

<%

}

else

{

SQL="INSERT INTO reg (id,flag, name, nick, sex, pws, email, address, tel, hand, city, zip, company, counter, momo, teminfo, temflag, calling, place, question, answer, up) VALUES ('','"+flag+"', '"+reg_name+"', '"+reg_nick+"', '"+reg_sex+"', '"+reg_pws+"', '"+reg_email+"', '"+reg_address+"', '"+reg_tel+"', '"+reg_hand+"', '"+reg_city+"', '"+reg_zip+"', '"+reg_company+"', '"+reg_counter+"', '"+reg_momo+"', '"+reg_teminfo+"', '"+reg_temflag+"', '"+reg_calling+"', '"+reg_place+"', '"+reg_question+"', '"+reg_answer+"', '"+up+"')";

s.executeUpdate(SQL);

%>



恭喜!您已经注册成功,您的基本信息为...

用户名:<%=new String(reg_nick.getBytes("ISO8859-1"),"GBK")%>

真实姓名:<%=new String(reg_name.getBytes("ISO8859-1"),"GBK")%>

性别:<%=reg_sex%>

密码:<%=reg_pws%>

电子邮件:<%=reg_email%>

详细地址:<%=new String(reg_address.getBytes("ISO8859-1"),"GBK")%>

联系电话:<%=new String(reg_tel.getBytes("ISO8859-1"),"GBK")%>

第二联系方式:<%=reg_hand%>

所在城市:<%=reg_city%>

邮政编码:<%=reg_zip%>

公司名称:<%=new String(reg_company.getBytes("ISO8859-1"),"GBK")%>

国家:<%=reg_counter%>

工作性质:<%=reg_calling%>

职务:<%=reg_place%>

提示:您已经登陆本站<%=up%>次,您可以使用本帐户直接登陆论坛...

返回主页进入论坛

<%

}

%>

<%

}

else

{

%>

Error



抱歉!非法的操作步骤!

Sorry!YOU have nullity at register!please register again!

<%

}

}

catch (Exception t) {

out.println("

错误:本页不允许刷新!
或您执行了非法操作!
Error:This page can't refresh!
you have error");

}

%>

本程序依照

协议-----》预注册(判断呢称是否被注册)-----》成功(打印注册项目)-----》提交

(重新选择呢称)↑ |(失败)

|_________|

提交后-》判断是否为正常注册(temp为检测标记)

提交成功-》打印注册基本资料,添加COOKIE

注册失败-》打印失败(有可能是服务器问题)。

至此,程序完成

碰到问题:

按照调试阶段碰到的问题先后攥写,

1、 数据正常添加,但使用PHPMYADMIN查看数据库内,所有的汉字均显示为?????????。

2、 数据正常添加,但JSP页面没有按照设定的程序打印出资料。

3、 不可以刷新,一刷新程序重复执行一次,而发生数据库内字段冲突,导致JSP报错!

调试过程:

在这里,首先感谢[令少爷][ wayne.xiao]以及关心咱这只“鸟“的朋友们

关于第一个碰到的问题,

问题1、

首先调试了程序,并且在executeUPdate前后都加上OUT来查看是否是程序造成的(转换类型),但是输出的均为正常。

进入PHPMYADMIN查看数据,所有的汉字均为?????。

具体内容可以查看

http://www.dev-club.com/club/bbs/showAnnounce.ASP?id=1123399帖子

后经令少爷提示以及帮助,将字符改成GBK字符集合

(后来发现从数据库内提取出来的就要转换成ISO8859-1字符集了,要不也是?????!!头疼的字符问题)

到此,问题告一段落!

问题2

无法正常显示!当我按上面将需要输入与输出的字符均转为字符集后,却发现注册后无法显示信息。所显示的页面的HTML的默认的输出空页面(但executeUpdate已经执行,数据库内资料已经添加)!找了半天没找到问题,赶快求救!:J:JJJJJJJ

经过提示,先将所有的执行步骤加入 try内,然后查看出错在哪里,发现出错在打印注册成功资料那里?左看右看没发现什么啊!!!

“GBK“靠!又是字符集问题!!!我把”GBK“给写成”GDK”l了LLLLLLLLL

(很严重哦!!才学程序设计的时候所有的书本都说不要写错啊)

那是变量的名称,没想到只因为一个字符集合的名称害得我忙了2个小时!!

所有的鸟,不论大鸟,小鸟,可不要再犯我这个低级错误了啊!

至此问题解决

问题3、

页面刷新问题,由于2问题的解决采用了TRY,这个问题也就解决了,

在catch (Exception t) {}中捕获错误(数据库报出的错误!)另外在TRY中也有个捕捉错误的地方,不过我这里有时候他能报错有时候不报错!很讨厌,不过由于用catch (Exception t) {}捕获这个错误,所以这个问题也就解决了。

小结:

程序设计,很枯燥,不过也很美丽,当你完成她的时候,感觉是非常的爽!

不过大姑娘绣花要心细点~~ 低级错误尽量避免,拼写的时候要注意不要错了哦!

还有,下步准备将程序写到BEAN里,这样的写法对于页面来说不容易布置,

对于代码的安全,少了一个安全级,对于错误的处理,增加了麻烦,所以吗~~大家自己看了

责任编辑:admin
相关文章