打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java程序员从笨鸟到菜鸟之(二十三)常见乱码解决以及javaBean基础知识
userphoto

2016.06.25

关注


 乱码问题应该是做javaWeb开发人员都遇到过的问题吧,这个问题当时还影响了我学习java的想法,甚至有过想放弃的想法,没办法,当时年轻,呵呵。其实产生乱码问题的原因有很多,解决乱码的问题也有很多,现在就一一来看一下:

出现乱码的地方大致可以分为以下三种:

1 jsp页面中 
2 jsp页面之间相互传参的参数
与数据库中数据的存取
解决方案大致可以分为三种:

  1 出现在jsp页面中,是由于没有设置jsp页面的中文字符编码。
  2 出现在jsp页面之间相互传参,是由于参数没有设置正确的字符编码。
  3 以上2个问题解决了,那么存到数据库中,自然就不存在乱码。除非你对存入到数据库里的数据再次进行编码。

具体的解决方法:

1.在表单页面头部设置字符编码为utf-8
<%@ page language='java' import='java.util.*' pageEncoding='utf-8'%>

加上这句解决jsp页面中的中文乱码显示,tomcat编译完后向客户端输出的html文件不是采用中文编码,所以会导致乱码产生。


 2.设置页面请求和回应的编码:

 <%request.setCharacterEncoding('utf-8');

  response.setCharacterEncoding('utf-8'); %>

加上这句解决jsp页面中的中文参数传递乱码。把浏览器默认使用的编码设置为“UTF-8”发送请求参数。

3.String(request.getParameter('name').getBytes('ISO8859_1'),'utf-8');这句的意思是,把传来的参数全部编码转换成utf-8,这样做的缺点是每次传来一个参数都要这样写,很麻烦。

同样可通过设置server.xml配置文件来实现。

[html] view plain copy print?

  1.  Connector  

  2. port ='8080'   

  3. maxHttpHeaderSize ='8192'   

  4. maxThreads ='150'   

  5.  minSpareThreads ='25'    

  6. maxSpareThreads ='75'   

  7. enableLookups ='false'   

  8.  redirectPort ='8443'    

  9. acceptCount ='100'   

  10. connectionTimeout ='20000'   

  11.  disableUploadTimeout ='true'     

  12. URIEncoding ='utf-8'/>   



但是这样就应用到整个webapp中去了。

4.还可以修改web.xml文件,配置一个过滤器。其原理都一样,只是换种方式而已

1.编写过滤器类:

[html] view plain copy print?

  1. package org.RN.util;  

  2.   

  3. import java.io.IOException;  

  4.   

  5. import javax.servlet.Filter;  

  6. import javax.servlet.FilterChain;  

  7. import javax.servlet.FilterConfig;  

  8. import javax.servlet.ServletException;  

  9. import javax.servlet.ServletRequest;  

  10. import javax.servlet.ServletResponse;  

  11.   

  12. public class Encoding implements Filter {  

  13.    @SuppressWarnings('unused')  

  14.    private FilterConfig config=null;  

  15.    String encoding=null;  

  16.  public void destroy() {  

  17.   this.encoding=null;  

  18.   this.config=null;  

  19.   

  20.  }  

  21.   

  22.  public void doFilter(ServletRequest request, ServletResponse response,  

  23.    FilterChain chain) throws IOException, ServletException {  

  24.      if(encoding!=null)  

  25.       request.setCharacterEncoding(encoding);  

  26.      chain.doFilter(request, response);  

  27.        

  28.   

  29.  }  

  30.   

  31.  public void init(FilterConfig arg0) throws ServletException {  

  32.   this.config=arg0;  

  33.   this.encoding=arg0.getInitParameter('encoding');  

  34.   

  35.  }  

  36.   

  37. }  



 2.web.xml配置

[html] view plain copy print?

  1.   

  2.   缓存过滤  

  3.   Encoding   

  4.     

  5.    filter.Encoding  

  6.     

  7.    

  8.    

  9.   Encoding   

  10.   *  

  11.    

[html] view plain copy print?

  1.   



5.还有一种常见的乱码问题就是下载时出现文件名乱码

原来处理下载的代码如下:
response.setHeader('Content-Disposition', 'attachment; filename=' + java.net.URLEncoder.encode(fileName, 'UTF-8'));

URLEncoder类包含将字符串转换为application/x-www-form-urlencoded MIME 格式的静态方法。

URLDecoderURLEncoder 类相对应的URLDecoder 类有两种静态方法。它们解码以x-www-form-url-encoded这种形式编码的string。也就是说,它们把所有的加号(+)转换成空格符,把所有的%xx分别转换成与之相对应的字符:

   

       JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 属性。

         JavaBean的任务就是: “Write once, run anywhere, reuse everywhere”,即一次性编写,任何地方执行,任何地方重用。这个任何实际上就是要解决困扰软件工业的日益增加的复杂性,提供一个简单的、紧凑的和优秀的问题解决方案。 

        JavaBean 的范围 Scope 是一个具有生命时间的变量。JavaBean的范围在标志中右边进行表示。将产生一个JavaBean的快捷参考。 说明:jsp服务器引擎将剥离<>。。。。标记。并且在最终用户的浏览器上无法显示实际代码。   

存在下面四种范围:页面page、请求request、对话session、应用application。 

对话范围:

  对话范围的JavaBean 主要应用于跨多个页面和时间段: 例如填充 用户信息。 添加信息并且接受回馈,保存用户最近执行页面的轨迹。对话范围JavaBean保留一些和用户对话 ID 相关的信息。这些信息来自临时的对话cookie,并在当用户关闭浏览器时,这个cookie将从客户端和服务器删除。 

页面/请求范围:

  页面和请求范围的JavaBean有时类似表单 的bean , 这是因为 他们大都用于处理表单。表单需要很长的时间来处理用户的输入,通常情况下用于页面接受HTTP/POST或者GET请求。另外页面和请求范围的bean可以用于减少大型站点服务器上的负载,如果使用对话bean,耽搁的处理就可能会消耗掉很多资源。 

应用:

  应用范围通常应用于服务器的部件,例如 JDBC 连接池、应用监视、用户计数和其他参与用户行为的类。 在Bean中限制HTML的产生: 理论上,JavaBean 将不会产生任何HTML,因为这是jsp层负责的工作;然而,为动态消息提供一些预先准备的格式是非常有用的。产生的HTML将被标注的 JavaBean方法返回。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
struts处理中文乱码问题
JSP HTML JAVASCRIPT 中文乱码 解决方案 大全
解决web服务器各种应用的乱码问题,欢迎补充和讨论
JSP乱码的解决
Jsp中文乱码问题的描述及解决方法
关于JSP/Servlet字符编码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服