web开发学堂之解决JSP页面乱码

    作者:课课家更新于: 2019-03-14 18:58:45

    Web开发

      在进行Web开发的过程中相信大家都会遇到过JSP页码出现乱码的情况,面对这些乱码我们有没有快速简便的方法来处理它们呢?为此本次的讲解课课家笔者主要为大家讲解如何处理在进行web开发遇到乱码时处理的方法和步骤。

    web开发学堂之解决JSP页面乱码_web开发_JSP_乱码解决_课课家

      根据以往的经验总结,笔者得出JSP编程中网页显示出现乱码的情况基本上可以归为以下五种:

      ①JSP页面显示乱码。

      ②Servlet接收Form/Request传递的参数时显示为乱码

      ③JSP接收Form/Request传递的参数时显示为乱码

      ④用时页面显示乱码

      ⑤数据库存取的时候产生乱码。

      下面笔者就逐个为大家给出相对应的解决方法:

      ◎JSP页面显示乱码

      对于JSP页面显示乱码,下面笔者给出两种解决办法:

      ①在页面的开头加上:<%@pagelanguage="java"contentType="text/html;charset=GBK"pageEncoding="GBK"%>

      PS:有时候若是我们不在页面开头加上这句,则页面中无法保存中文字符并提示:中文字符在不能被iso-8859-1字符集mapped。之所以出现这种情况主要由于默认情况下JSP是用iso-8859-1来编码的,解决办法是我们可以在Window->Preferences->General->ContentType选项下,在右边的窗口选择Text->Jsp,然后在下面的DefaultEncoding由默认的iso-8859-1改为GBK,点击update就可以解决了。但是这种方式会带来一个问题:由于这一句在其他文件include该文件的时候不能被继承,所以include它的文件也需要在文件开头加上这句话,此时如果用的是pageEncoding="gbk"则会出现问题,类似于org.apache.jasper.JasperException:/top.jsp(1,1)Pagedirective:illegaltohavemultipleoccurrencesofcontentTypewithdifferentvalues(old:text/html;charset=GBK,new:text/html;charset=gbk).。另外如果两个文件一个用的是gbk,一个用的是gb2312也会出现问题。

      ②在项目的web.XML中添加以下片段:

      

      

      

      SpecialpropertygroupforJSPConfigurationJSPexample.

      

      JSPConfiguration

      *.jsp

      true

      GBK

      false

      

      

      

      

      

      SpecialpropertygroupforJSPConfigurationJSPexample.

      

      JSPConfiguration

      *.html

      true

      GBK

      false

      

      

      

      

      ◎Servlet接收Form/Request传递的参数时显示为乱码

      同样面对Servlet接收Form/Request传递的参数时显示为乱码的情况,笔者也给大家提供两种解决办法。

      ①在用到request方法的前面加上这条语句:request.setCharacterEncoding("GBK");

      同样这也会由于页面设置中GbK或gB2312大小写不同或者采用不同的汉语字符集而发生错误。

      ②添加一个名为SetCharacterEncodingFilter的filter。filter的源文件为(参见apach安装目录下\\webapps\\jsp-examples\\WEB-INF\\classes\\filters中的SetCharacterEncodingFilter.java文件):

      packagecom.filters;importjava.io.IOException;

      importjavax.servlet.Filter;

      importjavax.servlet.FilterChain;

      importjavax.servlet.FilterConfig;

      importjavax.servlet.ServletException;

      importjavax.servlet.ServletRequest;

      importjavax.servlet.ServletResponse;

      importjavax.servlet.UnavailableException;

      publicclassSetCharacterEncodingFilterimplementsFilter{

      protectedStringencoding=null;

      protectedFilterConfigfilterConfig=null;

      protectedbooleanignore=true;

      publicvoiddestroy(){

      this.encoding=null;

      this.filterConfig=null;

      }

      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);

      }

      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;

      }

      protectedStringselectEncoding(ServletRequestrequest){

      return(this.encoding);

      }

      }

     同时我们在web.xml中添加一下片段:

      

      SetCharacterEncoding

      com.filters.SetCharacterEncodingFilter

      

      encoding

      GBK

      

      

      

      SetCharacterEncoding

      /*

      

      ◎JSP接收Form/Request传递的参数时显示为乱码

      若是我们按照第二种乱码的解决方式修改了web.xml并添加了filter之后,有时候我们会发现Sevlet接收Form/Request传递的参数可以正常显示了,但是jsp页面接受Form/Request传递的参数却仍然显示为乱码。举个例子,笔者在用Form发送信息的页面采用了这样的html:

      

      姓名

      选出你喜欢吃的水果:

      苹果

      西瓜

      桃子

      葡萄

      

      

      通过观察我们可得知原因在于没有指定form的method属性,Form的默认mothod属性为get,而get是通过在发送请求的url后面加“?”,然后再加参数和值来传递数据的(编码格式为ASCII)。这就要求我们在传递的数据中有非ASCII字符或是超过了100个字符且使用到method="post",否则就会出现乱码。所以具体的解决方式为:第二种乱码的解决方式+在发送页面的Form中指定method为post

      ◎用时页面显示乱码

      这个乱码产生的原因和其他几个乱码的产生原因不同,它的原因在于我们用eclipse编辑要forward的html或者jsp文件时,采用的编码是可以产生中文乱码的编码而不是GBK或者GB2312,所以解决方式就是把eclipse编辑器的编码方式改为GBK或者GB2312就可以了。

      ◎数据库存取的时候产生乱码的解决方式

      我们知道在写数据库时要保正数据库的编码与其它一致:在系统盘Windows目录下的my.ini文件,在文件中插入一行default-character-set=GBK。另外关于如何创建一个基于中文编码的数据库,下面笔者给大家介绍一下在DOS下创建中文编码数据库的方法:在进入数据库的时候用MySQL--default-character-set=gbk-uroot-p这句话进入mysql,然后就可以创建基于中文编码的数据库了,比如:createdatabaseadmin;。

      需要大家注意的一点是,用连接数据库的时候读出的数据也可能是乱码,其解决方法为在我们建立数据库连接的时候把URL设置成下面这个样子就可以了:URL=jdbc:mysql://localhost:3306/my_database?useUnicode=true&characterEncoding=GBK。最后我们把各种地方的编码统一起来,所在的乱码问题就都解决了。

      本次的web开发学堂之解决JSP页面乱码的讲解到此就暂告一段落了,如果以后有什么相关的内容进行补充或者修改的话,笔者会继续在此进行相关的内容的补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后笔者希望本次的讲解对大家学习web开发能够起到一定的帮助作用!

课课家教育

未登录

1