`

JAVA EE编码总结

 
阅读更多
JAVA EE的编码总结
第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。

从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码保存则要带encoding参数指明实际编码,否则出错,生成的.class文件存为系统默认编码。

从.jsp->.java->.class,先存为某种编码的.jsp文件,然后tomcat根据pageEncoding读取并转化为servlet存为系统默认编码,然后同上面.java->.class过程。

第二,IDE的encoding为对系统下文件打开的解码方式或保存的编码方式。特例:如果.jsp文件有<%@ page language="java" pageEncoding="UTF-8"%>,则eclipse会自动存为UTF-8方式,不管eclipse的encoding是什么,这也是eclipse的聪明之处。

第三,
pageEncoding="UTF-8"表示此文件的编码方式,必须与此文件存储方式一致(所以eclipse会首选根据它来存文件),tomcat根据这个来读此.jsp文件并编译为servlet。
contentType="text/html;charset=UTF-8"表示当浏览器得到此文件时以什么方式解码。例如:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
<html>
<head>
<title>test</title>
</head>
<body>
我是个好人
</body>
</html>
会产生乱码,因为存为UTF-8的文件被解码为iso8859-1,这样 如有中文肯定出乱码。

至此,页面应为:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>中文问题</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
</html>

第四,
request.setCharacterEncoding("UTF-8")是把提交内容的字符集设为UTF-8
response.setCharacterEncoding("UTF-8")可以把页面中的<%@ page contentType="text/html;charset=iso8859-1"%>换为charset=UTF-8,是给告诉浏览器我这个文件的编码方式。

第五,表单提交:无论何种表单提交都可以在后台的java文件中通过String des = new String(s.getBytes("iso8859-1"),"UTF-8");来转换成你想要的UTF-8编码方式。但如果每处都加词句太麻烦,故分post和get两种方式区分提交(tomcat5以后分开处理,之前处理方式一样,即都可以用request.setCharacterEncoding("UTF-8")方法处理,不过tomcat5以后get提交方法用此语句无效)。
1,post提交的数据:
程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

因为规范要求浏览器提交数据都要用utf8编码,所以这里设置编码方式为UTF8.

特别注意:
a,这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding);
在这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法就是把这个过滤器尽量靠前放.
b,在server.xml中不能加上<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
这个value也设置tomcat的缺省字符集为"ISO-8859-1",使setCharacterEncoding的调用失效.可能其他的value也有这个问题,我没有测试过.
如果要观察http请求参数,可以考虑用过滤器或者其他工具,例如ethereal(http://www.ethereal.com/)

2,get提交的数据:
两种情况:
a,如果从地址栏直接输入汉字,则一般编码为"GBK",需要用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出
b,如果是页面超连接连接中带的汉字,则编码根据页面编码的不同而不同,如果页面的
content="text/html; charset=utf-8",则在tomcat/conf/server.xml中的配置文件中:
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" />

加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容.
如果content="text/html; charset=GBK",需用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出,其他情况类似.

总结:
1,所有页面使用utf8编码,
2,服务器加上过滤器,
3,server.xml中不要使用
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
4,server.xml文件加上useBodyEncodingForURI="true"
这样应该可以搞定大多数前台的中文问题.至于地址栏输入中文,不支持也罢,一般的程序很少要求
从这里输入.

第六,连接数据库

1、mysql配置文件:
修改mysql在windows\my.ini里default-character-set=utf-8

2、mysql里数据库和表也都设为utf8_unicode_ci

3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
注意,关键就在于此:此句中间是'&'不是'&'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中需要用&

对于Web容器来说,如果你不设置,默认是ISO8859-1
String des = new String(s.getBytes("iso8859-1"),"UTF-8");都可以使用这个 不论哪里,有乱码就是用
分享到:
评论

相关推荐

    Java EE: XML Schemas for Java EE Deployment Descriptors

    Java EE(Java Platform, Enterprise Edition)是用于构建和部署企业级Web应用程序的框架。XML Schemas在Java EE中扮演着至关重要的角色,特别是在部署描述符(Deployment Descriptors)的定义和验证方面。本文将...

    Java EE 编码规范.docx

    ### Java EE 编码规范详解 #### 一、规范存在的意义 编码规范是软件开发过程中不可或缺的一部分,它有助...以上就是Java EE编码规范的相关知识点,通过这些规范的指导,可以帮助开发者编写出高质量、易于维护的代码。

    java EE教程

    JavaBeans是一种遵循特定编码规则的Java类,用于封装数据和业务逻辑。它们是Java EE中的可重用组件,通过属性、构造器和事件来实现组件的功能。 4. **EJB(Enterprise JavaBeans)** EJB是Java EE中的企业级组件...

    java ee 源码

    在MyEclipse中导入Java EE源码,可以便于开发人员在编码过程中实时查阅源代码,了解类库的内部实现,从而提高开发效率和代码质量。MyEclipse是一款强大的Java集成开发环境,支持Java EE项目的创建、调试和部署,拥有...

    The_Java_EE5_Tutorial.rar_Java ee5 CHM_java ee5 tutorial_java e

    Java EE 5是Java平台上用于构建分布式、企业级应用的框架,它极大地简化了开发过程,减少了编码量,并引入了许多新特性和改进。以下是一些关键知识点: 1. **Servlet和JSP**:Java EE 5中,Servlet是处理HTTP请求的...

    MyEclipse 6 Java EE 中文版

    ### MyEclipse 6 Java EE 入门级丛书知识点概览 #### 一、MyEclipse 6 Java EE 概述 - **MyEclipse**是一款面向Java EE开发者设计的强大集成开发环境(IDE),它基于Eclipse平台进行扩展,提供了丰富的功能支持,...

    java编码主要用于java编码

    14. **Java EE**:Java企业版(Java EE)提供了Web应用开发所需的一系列服务,如Servlet、JSP、EJB等,用于构建分布式企业级应用。 15. **最新特性**:随着Java的不断更新,例如Java 8引入的Lambda表达式、Stream ...

    Java EE 7 Development with WildFly

    ### Java EE 7 Development with WildFly #### 一、Java EE 7 和 WildFly 概览 在本书《Java EE 7 Development with WildFly》中,作者深入探讨了如何使用WildFly服务器进行Java EE 7应用程序开发。Java EE 7...

    Java EE 学习方向

    ### Java EE 学习方向详解 #### 一、Java核心编程技术 在Java EE的学习过程中,首先需要掌握的是Java核心编程技术。这部分内容是整个Java技术栈的基础。 **技术分类:** - **Java开发入门** - **JDK(Java ...

    Java+EE+5+平台简介与开发

    ### Java EE 5 平台简介与开发 #### 一、Java EE 5 技术简介 Java EE 5(Java Platform, Enterprise Edition 5)是Java企业版平台的一个重大更新,它带来了许多新的特性和技术改进,使得企业级应用开发变得更加...

    Pro CDI 2 in Java EE 8

    这个框架简化了企业级Java应用程序的构建,通过注入机制,可以避免硬编码依赖,实现松耦合。 2. **CDI 2.0新特性**:在Java EE 8中,CDI 2.0引入了许多增强功能,包括更强大的事件模型、支持JSR 352批处理API、对...

    Java EE & Java Se

    2. **JSF 2.0 (JavaServer Faces)**:更新的用户界面框架,提供了更好的组件模型和更简洁的编码方式。 3. **EJB 3.1 (Enterprise JavaBeans)**:降低了EJB的复杂性,引入了无状态会话bean和定时器服务,使得EJB更...

    MyEclipse_6_Java_EE.rar_JAVA EE

    【标题】"MyEclipse_6_Java_EE.rar" 是一个针对JAVA EE(Java企业版)开发的资源包,其中包含的是"MyEclipse 6"的版本,这是一个功能强大的集成开发环境(IDE),专为Java EE应用程序的开发而设计。MyEclipse是基于...

    精通Java EE:精通Java EE 整合应用案例随书光盘案例数据库部分

    Java EE,全称为Java Platform, Enterprise Edition,是Java平台针对企业级应用开发的规范集,由Oracle公司主导维护。本书“精通Java EE”显然旨在帮助开发者深入理解和掌握Java EE技术,通过整合应用案例来增强实践...

    java EE水果管理系统 Java学习资料

    9. **过滤器(Filter)和监听器(Listener)**:在Java EE中,这两个概念用于增强应用程序的功能,比如登录验证、字符编码转换等。 10. **安全性**:Java EE提供了一系列的安全特性,如角色基础的访问控制(RBAC)...

    Java+EE学生成绩管理系统+Sql数据库Java源码.

    Java+EE学生成绩管理系统是基于Java编程语言...总的来说,这个Java+EE学生成绩管理系统展示了完整的软件开发生命周期,涵盖了从需求分析、设计、编码、测试到部署的各个环节,是学习和实践Java Web开发的一个典型实例。

    《Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)》配套资源.zip

    《Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)》是一份全面深入讲解Java企业级应用开发的教程,重点聚焦于Spring、Spring MVC和MyBatis这三个核心框架。这些技术在现代Java开发中占据着举足轻重的地位...

    java EE jsp试卷

    Java EE是企业级应用开发的重要框架,而JSP(JavaServer Pages)是其核心组成部分,用于构建动态网页。这份"java EE jsp试卷"显然旨在检验开发者对这两者的理解和运用能力。下面将详细阐述相关知识点。 1. **JSP...

Global site tag (gtag.js) - Google Analytics