Java程序员从笨鸟到菜鸟之(二十三)常见乱码解决以及javaBean基础知识_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java程序员从笨鸟到菜鸟之(二十三)常见乱码解决以及javaBean基础知识

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

 2012/4/23 12:40:40  qcyycom  程序员俱乐部  我要评论(0)
  • 摘要:乱码问题应该是做javaWeb开发人员都遇到过的问题吧,这个问题当时还影响了我学习java的想法,甚至有过想放弃的想法,没办法,当时年轻,呵呵。其实产生乱码问题的原因有很多,解决乱码的问题也有很多,现在就一一来看一下:出现乱码的地方大致可以分为以下三种:1jsp页面中2jsp页面之间相互传参的参数3与数据库中数据的存取解决方案大致可以分为三种:1出现在jsp页面中,是由于没有设置jsp页面的中文字符编码。2出现在jsp页面之间相互传参,是由于参数没有设置正确的字符编码。3以上2个问题解决了
  • 标签:程序 程序员 解决 Java 基础知识

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

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

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

??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 plaincopy
  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 plaincopy
  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 plaincopy
  1. <filter>??
  2. ??<description>缓存过滤</description>??
  3. ??<filter-name>Encoding?</filter-name>??
  4. ??<filter-class>??
  5. ???filter.Encoding??
  6. ??</filter-class>??
  7. ?</filter>??
  8. ?<filter-mapping>??
  9. ??<filter-name>Encoding?</filter-name>??
  10. ??<url-pattern>*</url-pattern>??
  11. ?</filter-mapping>??
[html]?view plaincopy
  1. </filter>??



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的范围在<jsp:useBean?scope=”….>标志中右边进行表示。将产生一个JavaBean的快捷参考。?说明:jsp服务器引擎将剥离<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方法返回。? 

发表评论
用户名: 匿名