|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
关于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) { %> <html> <head><title>注册</title> </head> <style type="text/css"> body {font:9pt;color:black;margin:0} td {font:9pt;color:black} </style> <body> <center> <% //////////////////////////////////////////判定用户注册信息//////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// 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()) { %> <table width=100% cellpadding=0> <tr><td height=100px></td> <tr><td align=center><font color=red>错误:非法操作注册程序!</font> <tr><td height=30px></td> <tr><td align=center><font color=red>提示:您已经注册或正在非法浏览本页面<br>本页面不答应刷新!</td> <tr><td height=30px></td> <tr><td align=center><button onclick="javascript:window.close()">关闭本页面</button></td> </table> <% } 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); %> <br><br> <table width="400" cellpadding=0 cellspacing=0 style="border:1 solid black "> <tr><td colspan=2 height=15px></td> <tr><td colspan=2 align=center>恭喜!您已经注册成功,您的基本信息为... <tr><td colspan=2 height=15px></td> <tr><td align=right width="30%">用户名:<td align=left width="70%"><%=new String(reg_nick.getBytes("ISO8859-1"),"GBK")%> <tr><td align=right>真实姓名:<td align=left><%=new String(reg_name.getBytes("ISO8859-1"),"GBK")%> <tr><td align=right>性别:<td align=left><%=reg_sex%> <tr><td align=right>密码:<td align=left><%=reg_pws%> <tr><td align=right>电子邮件:<td align=left><%=reg_email%> <tr><td align=right>具体地址:<td align=left><%=new String(reg_address.getBytes("ISO8859-1"),"GBK")%> <tr><td align=right>联系电话:<td align=left><%=new String(reg_tel.getBytes("ISO8859-1"),"GBK")%> <tr><td align=right>第二联系方法:<td align=left><%=reg_hand%> <tr><td align=right>所在城市:<td align=left><%=reg_city%> <tr><td align=right>邮政编码:<td align=left><%=reg_zip%> <tr><td align=right>公司名称:<td align=left><%=new String(reg_company.getBytes("ISO8859-1"),"GBK")%> <tr><td align=right>国家:<td align=left><%=reg_counter%> <tr><td align=right>工作性质:<td align=left><%=reg_calling%> <tr><td align=right>职务:<td align=left><%=reg_place%> <tr><td colspan=2 height=15px></td> <tr><td colspan=2 align=center>提示:您已经登陆本站<font color=red><%=up%></font>次,您可以使用本帐户直接登陆论坛... <tr><td colspan=2 height=15px></td> <tr><td align=center><a href="/">返回主页</a><td align="center"><a href="">进入论坛</a></td> </table> <% } %> </center> </body> </html> <% } else { %> <html> <head> <title>Error</title> </head> <body><center><br><br> <font face="黑体" size=5 color=red>抱歉!非法的操作步骤!</font><br> <font face="impact" color=black>Sorry!YOU have nullity at register!please register again!</font> </center> </body> </html> <% } } catch (Exception t) { out.println("<br><br>错误:本页不答应刷新!<br>或您执行了非法操作!<br>Error:This page can\\\'t refresh!<br>you have error</center></body></html>"); } %> 本程序依照 协议-----》预注册(判定呢称是否被注册)-----》成功(打印注册项目)-----》提交 (重新选择呢称)↑ |(失败) |_________| 提交后-》判定是否为正常注册(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里,这样的写法对于页面来说不轻易布置, 对于代码的安全,少了一个安全级,对于错误的处理,增加了麻烦,所以吗~~大家自己看了 返回类别: 教程 上一教程: JAVA经典实例--连接字符串 下一教程: 预加载与JavaScript的Image()对象 您可以阅读与"关于JSP中,中文问题(泛指字符问题),以及常见错误调试手记"相关的教程: · 菜鸟调试手记一(sql server 中文问题) · 关于JSP中文问题的解决方式 · 关于JSP中文问题 · JSP常见错误 · MYSQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方式总结 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |