JAVA编程:Mysql与JSP网页中文乱码成绩的办理计划...
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。js|mysql|办理|网页|成绩|中文|中文乱码自从之前进修JSP入手下手,中文乱码成绩就一向不休,苦不胜言。此次在项目入手下手之前,我们要办理的第一个成绩就是把mysql的中文乱码成绩弄定。经由多天的勉力,终究乐成的办理了中文乱码成绩,特写在这里,以备后用。软件及情况:WindowsXP(2000),j2sdk1.4.2,Tomcat5.0.25,mysql4.1,EMSMysqlManager2(便利建表,版本2.8.5.1),驱动为mysql-connector-java-3.1.4-beta-bin.jar。
方针:在该情况下,完成中文的一般显现,读取与拔出数据库。
注:我只在此情况下测试经由过程,其余体系及分歧版本未测试
要点:一致字符集(JSP页面编码,mysql建库时字符集选择,毗连数据库URL,request设定等)
上面我以GBK为例解说。假如要利用utf-8,只需在响应的GBK处换成utf-8便可
---------------------------步骤1以GBK字符集建库建表-------------------------------------
我利用EMS来建mysql的数据库及表,由于它是图形界面,便利操纵(就像SQLSERVER2000中的企业办理器一样)。
建库时,从EMS菜单当选createDatabase...新建一个数据库,CharacterSet选gbk_bin(另外一个gbk_chinese_ci不晓得与这个有甚么区分,我找材料也没有找到。假如你晓得,请告知我,我增补在这里)。不要把工具栏上有一个加号和数据库容貌的图标当做新建数据库了,谁人新注册一个已存在的数据库。
前面建表时,也要选择一样的字符集。
建好后,此时不要用EMS向内里拔出数据,不然你看到的中文仍然是乱码。
---------------------------步骤2毗连数据库的URL后加些参数-------------------------------
假定我新建的数据库是testdb,那末我毗连数据库的url应当为:
jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=gbk
此时要注重:假如我是把这个url写在JAVA代码中,就间接如许写。但假如是在xml设置文件中(如struts-config.xml,web.xml等),要把个中的&改成&才行,不然会堕落。也就是:
jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=gbk
---------------------------步骤3每一个JSP页面都要声明该中笔墨符集----------------------------
在每一个JSP页面的最下面都加上一句
<%@pagelanguage="java"contentType="text/html;charset=GBK"%>
如许才干包管JSP页面中的中文显现一般
---------------------------步骤4加一个传送参数时设定request字符集的filter类-----------------------
由于收集中字符在传送的时分,都是一致以iso-8859-1的编码传送,以是我们必需对request从头设定字符集,才干一般显现中文。假如接纳filter类来完成,我们不必在每次取中文参数时都要从头设定。
filter类的内容:
/*
*====================================================================
*
*JavaWebStudio开源项目
*
*Struts_dbv0.1
*
*====================================================================
*/
packagecom.strutsLogin.util;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
/**
*中文过滤器
*/
publicclassSetCharacterEncodingFilterimplementsFilter{
//-----------------------------------------------------InstanceVariables
/**
*Thedefaultcharacterencodingtosetforrequeststhatpassthrough
*thisfilter.
*/
protectedStringencoding=null;
/**
*Thefilterconfigurationobjectweareassociatedwith.Ifthisvalue
*isnull,thisfilterinstanceisnotcurrentlyconfigured.
*/
protectedFilterConfigfilterConfig=null;
/**
*Shouldacharacterencodingspecifiedbytheclientbeignored?
*/
protectedbooleanignore=true;
//---------------------------------------------------------PublicMethods
/**
*Takethisfilteroutofservice.
*/
publicvoiddestroy(){
this.encoding=null;
this.filterConfig=null;
}
/**
*Selectandset(ifspecified)thecharacterencodingtobeusedto
*interpretrequestparametersforthisrequest.
*
*@paramrequestTheservletrequestweareprocessing
*@paramresultTheservletresponsewearecreating
*@paramchainThefilterchainweareprocessing
*
*@exceptionIOExceptionifaninput/outputerroroccurs
*@exceptionServletExceptionifaservleterroroccurs
*/
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)
throwsIOException,ServletException{
//Conditionallyselectandsetthecharacterencodingtobeused
if(ignore||(request.getCharacterEncoding()==null)){
Stringencoding=selectEncoding(request);
if(encoding!=null)
request.setCharacterEncoding(encoding);
}
//Passcontrolontothenextfilter
chain.doFilter(request,response);
}
/**
*Placethisfilterintoservice.
*
*@paramfilterConfigThefilterconfigurationobject
*/
publicvoidinit(FilterConfigfilterConfig)throwsServletException{
this.filterConfig=filterConfig;
this.encoding=filterConfig.getInitParameter("encoding");
Stringvalue=filterConfig.getInitParameter("ignore");
if(value==null)
this.ignore=true;
elseif(value.equalsIgnoreCase("true"))
this.ignore=true;
elseif(value.equalsIgnoreCase("yes"))
this.ignore=true;
else
this.ignore=false;
}
//------------------------------------------------------ProtectedMethods
/**
*Selectanappropriatecharacterencodingtobeused,basedonthe
*characteristicsofthecurrentrequestand/orfilterinitialization
*parameters.Ifnocharacterencodingshouldbeset,return
*<code>null</code>.
*<p>
*Thedefaultimplementationunconditionallyreturnsthevalueconfigured
*bythe<strong>encoding</strong>initializationparameterforthis
*filter.
*
*@paramrequestTheservletrequestweareprocessing
*/
protectedStringselectEncoding(ServletRequestrequest){
return(this.encoding);
}
}//EOC
该代码来自于www.javawebstudio.com,特此感激!
然后我们在web.xml中加一些设置,就能够了,设置以下:
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>javawebstudio.struts_db.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
放在web.xml的符合地位。一样平常在最初,<jsp-config>标签之前(假如有的话)
经由以上步骤,JSP和mysql的中文显现及拔出就都一般了。在STRUTS中也一般。
可是,此时假如你用EMS或mysql的命令行把持台来看表中的数据,却发明它们都是????。这是怎样回事呢?
不必忧虑,只需我们运转上面的这几行命令,就可以看到一般的中文了!
SETcharacter_set_client=gbk;
SETcharacter_set_connection=gbk;
SETcharacter_set_database=gbk;
SETcharacter_set_results=gbk;
SETcharacter_set_server=gbk;
SETcollation_connection=gbk_bin;
SETcollation_database=gbk_bin;
SETcollation_server=gbk_bin;
假如你用的是mysql的命令行,则间接输出就好。
假如是EMS,则在工具栏中有一个ShowSQLEditor按钮,点一下,把下面的命令输出,再按一个"execute"的按钮,就好了!
并且在这类情形下,你能够乃至能够用中文名来建数据库,表名和字段名!!!!
----------------------------------------------------------------------------------------------------
可是有一点要出格注重!
像GBK,UTF-8如许的名字,在mysql与JAVA中有分歧的划定,写的时分要分外注重,不然会堕落。
好比GBK,在JAVA中要写成GBK,但在mysql中要写成gbk(毗连数据库的URL)
好比UTF-8,在JAVA中要写成UTF-8,但在Mysql中要写成utf8
别的的字集符也有相似的区分
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
页:
[1]