`
zlotus
  • 浏览: 51573 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

原理性知识总结

    博客分类:
  • Web
阅读更多

1.spring框架bean

 

 

bean配置http://spinlock.blog.51cto.com/607469/327794

bean实例化http://developer.51cto.com/art/200907/137884.htm

 

1.Servlet生命周期

http://book.51cto.com/art/200808/84955.htm

http://developer.51cto.com/art/200907/133673.htm

 

 

2.ServletConfig和ServletContext参数访问浅析

http://developer.51cto.com/art/200907/134184.htm

http://www.cnblogs.com/7days/archive/2010/06/07/1753552.html

 

 

 

3.JSP和Servlet中的几个编码的作用及原理

http://developer.51cto.com/art/200906/132667.htm

如果在jsp页面中,例如设定<%@ page language="java" contentType="text/html;charset=gbk" pageEncoding="gbk"%>
   和<%@ page language="java" contentType="text/html;charset=gbk"%>效果一样,同<%@ page language="java" contentType="text/html;charset=gbk" pageEncoding="utf-8"%>
   效果也一样,所以我推断,在jsp页面中如果设定了contentType="text/html;charset=gbk"则pageEncoding的值不论设不设都不起作用,其值与charset=gbk设定的一样;如果不设定
   charset=gbk,pageEncoding的设定才起作用

< Meta http-equiv="Content-Type" content="text/html; charset=gb2312" >告诉浏览器网页所识别的文件类型及语言类型.eg让浏览器识别HTM/HTML类型的简体中文网面

JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。

  第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。

  第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。

  JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。

  第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效

 

首先,说说JSP和Servlet中的几个编码的作用。

在JSP和Servlet中主要有以下几个地方可以设置编码,pageEncoding="UTF-8"、contentType="text/html;charset=UTF- 8"、request.setCharacterEncoding("UTF-8")和 response.setCharacterEncoding("UTF-8"),其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet中。

 

1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。

众所周知,JSP在服务器上是要先被编译成Servlet的。pageEncoding="UTF-8"的作用就是告诉JSP编译器在将JSP文件编译成Servlet时使用的编码。通常,在JSP内部定义的字符串(直接在JSP中定义,而不是从浏览器提交的数据)出现乱码时,很多都是由于该参数设置错误引起的。例如,你的JSP文件是以GBK为编码保存的,而在JSP中却指定pageEncoding="UTF-8",就会引起JSP内部定义的字符串为乱码。

另外,该参数还有一个功能,就是在JSP中不指定contentType参数,也不使用response.setCharacterEncoding方法时,指定对服务器响应进行重新编码的编码。

2、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。

在不使用response.setCharacterEncoding方法时,用该参数指定对服务器响应进行重新编码的编码。

3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。

该方法用来指定对浏览器发送来的数据进行重新编码(或者称为解码)时,使用的编码。

4、response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。

服务器在将数据发送到浏览器前,对数据进行重新编码时,使用的就是该编码。

其次,要说一说浏览器是怎么样对接收和发送的数据进行编码的

response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。同时,浏览器也是根据这个参数来对其接收到的数据进行重新编码(或者称为解码)。所以在无论你在JSP中设置response.setCharacterEncoding("UTF-8")或者 response.setCharacterEncoding("GBK"),浏览器均能正确显示中文(前提是你发送到浏览器的数据编码是正确的,比如正确设置了pageEncoding参数等)。读者可以做个实验,在JSP中设置response.setCharacterEncoding("UTF-8"),在IE中显示该页面时,在IE的菜单中选择"查看(V)"à"编码(D)"中可以查看到是" Unicode(UTF-8)",而在在JSP中设置response.setCharacterEncoding("GBK"),在IE中显示该页面时,在IE的菜单中选择"查看(V)"à"编码(D)"中可以查看到是"简体中文(GB2312)"。

浏览器在发送数据时,对URL和参数会进行URL编码,对参数中的中文,浏览器也是使 response.setCharacterEncoding参数来进行URL编码的。以百度和GOOGLE为例,如果你在百度中搜索"汉字",百度会将其编码为"%BA%BA%D7%D6"。而在GOOGLE中搜索"汉字",GOOGLE会将其编码为"%E6%B1%89%E5%AD%97",这是因为百度的response.setCharacterEncoding参数为GBK,而GOOGLE的的 response.setCharacterEncoding参数为UTF-8。

浏览器在接收服务器数据和发送数据到服务器时所使用的编码是相同的,默认情况下均为JSP页面的response.setCharacterEncoding参数(或者contentType和pageEncoding参数),我们称其为浏览器编码。当然,在IE中可以修改浏览器编码(在IE的菜单中选择"查看(V)"à"编码(D)"中修改),但通常情况下,修改该参数会使原本正确的页面中出现乱码。一个有趣的例子是,在IE中浏览GOOGLE的主页时,将浏览器编码修改为"简体中文(GB2312)",此时,页面上的中文会变成乱码,不理它,在文本框中输入"汉字",提交,GOOGLE会将其编码为"%BA%BA%D7%D6",可见,浏览器在对中文进行URL编码时,使用的就是浏览器编码。

弄清了浏览器是在接收和发送数据时,是如何对数据进行编码的了,我们再来看看服务器是在接收和发送数据时,是如何对数据进行编码的。

对于发送数据,服务器按照response.setCharacterEncoding—contentType—pageEncoding的优先顺序,对要发送的数据进行编码。

对于接收数据,要分三种情况。一种是浏览器直接用URL提交的数据,另外两种是用表单的GET和POST方式提交的数据。

因为各种WEB服务器对这三种方式的处理也不相同,所以我们以Tomcat5.0为例。

无论使用那种方式提交,如果参数中包含中文,浏览器都会使用当前浏览器编码对其进行URL编码。

对于表单中POST方式提交的数据,只要在接收数据的JSP中正确request.setCharacterEncoding参数,即将对客户端请求进行重新编码的编码设置成浏览器编码,就可以保证得到的参数编码正确。有写读者可能会问,那如何得到浏览器编码呢?上面我们提过了,在默认请情况下,浏览器编码就是你在响应该请求的JSP页面中response.setCharacterEncoding设置的值。所以对于POST表单提交的数据,在获得数据的JSP页面中request.setCharacterEncoding要和生成提交该表单的JSP页面的response.setCharacterEncoding设置成相同的值。

对于URL提交的数据和表单中GET方式提交的数据,在接收数据的JSP中设置request.setCharacterEncoding参数是不行的,因为在Tomcat5.0中,默认情况下使用ISO-8859-1对URL 提交的数据和表单中GET方式提交的数据进行重新编码(解码),而不使用该参数对URL提交的数据和表单中GET方式提交的数据进行重新编码(解码)。要解决该问题,应该在Tomcat的配置文件的Connector标签中设置useBodyEncodingForURI或者URIEncoding属性,其中useBodyEncodingForURI参数表示是否用request.setCharacterEncoding参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,在默认情况下,该参数为false(Tomcat4.0中该参数默认为true);URIEncoding参数指定对所有GET方式请求(包括URL提交的数据和表单中GET方式提交的数据)进行统一的重新编码(解码)的编码。URIEncoding和 useBodyEncodingForURI区别是,URIEncoding是对所有GET方式的请求的数据进行统一的重新编码(解码),而 useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。所以对于URL提交的数据和表单中GET方式提交的数据,可以修改URIEncoding 参数为浏览器编码或者修改useBodyEncodingForURI为true,并且在获得数据的JSP页面中request.setCharacterEncoding参数设置成浏览器编码。

下面总结下,以Tomcat5.0为WEB服务器时,如何防止中文乱码。

1、对于同一个应用,最好统一编码,推荐为UTF-8,当然GBK也可以。

2、正确设置JSP的pageEncoding参数

3、在所有的JSP和Servlet中设置contentType="text/html;charset=UTF-8"或response.setCharacterEncoding("UTF-8"),从而间接实现对浏览器编码的设置。

4、对于请求,可以使用过滤器或者在每个JSP和Servlet中设置request.setCharacterEncoding("UTF-8")。同时,要修改Tomcat的默认配置,推荐将 useBodyEncodingForURI参数设置为true,也可以将URIEncoding参数设置为UTF-8(有可能影响其他应用,所以不推荐)。

  

 

 

 

 

 

分享到:
评论

相关推荐

    数据库系统原理总结.pdf

    ⽤来查询多个表 存储过程:通过创建存储过程,可以执⾏多条SQL语句 触发器:是⼀种特殊的存储过程,并发性 关于这些基础知识的理解,我画了张图,请⼤家指正: 总结:数据库管理系统是对数据进⾏管理的,学⽣信息...

    通信原理-第七版-樊昌信-知识总结

    通信原理_第七版_樊昌信_知识总结 考研复试时整理的一些常识性知识点。涵盖通信原理_第七版_樊昌信整本书。仅供参考

    哲学原理与方法论总结

    1.自然界客观性原理 【原理内容】:自然界的存在与发展是客观的。 【方法论】:①承认自然界的客观性是人类有意识地处理人与自然关系的基本前提。②我们在利用自然、改造自然的时候,务必要尊重自然、服从自然、保护...

    编译原理知识点总结(xinhua)

    文法二义性的理解,二义性文法是不是可以判定的?如何说明一个文法是二义性的? 给定一个文法G,如果在它产生的语言L(G)中存在某个句子对应两棵或两颗以上分析树,则称文法G是二义性的。(不存在算法在有限的步骤中...

    操作系统原理知识点总结.doc

    6、分时技术特性:多路性、交互性、独立性、及时性,目标:对用户响应的及时性 7、实时系统:及时响应外部请求,在规定时间内完成事件处理,任务类型:周期性、非 周期性或硬实时任务、软实时任务 8、操作系统基本...

    数据库原理概论理论知识点总结.pdf

    数据库原理概论理论知识点总结 数据库概论 ⼀.绪论 1.1 数据库系统概述 数据是描述事物的符号记录,是数据库中存储的基本对象。 数据的解释是指对数据含义的说明,数据的含义称为数据的语义,数据与其语义是不可分割...

    现代通信系统原理网络教材_

    本章知识点小结 第二章 信道与噪声 2.1 信道的基本概念 2.2 恒参信道及其对所传信 号的影响 2.3 随参信道及其对所传信 号的影响 2.4 信道的加性噪声 2.5 通信中的常见噪声 2.6 信道...

    导波光学全面知识总结

    《导波光学》通过对各类光导波性质及器件原理的学习,培养学生的自主创新精神,提高学生分析问题和解决问题的能力,因此《导波光学》总结作者多年来在光波导领域工作研究成果;分析转移矩阵和微扰是《导波光学》运用...

    计算机组成原理实习报告课程设计

    计算机组成原理》是一门理论性和实践性非常强的课程,学生仅仅通过课堂教学来获取理论知识是远远不够的,必须加强实践教学,通过亲自动手,巩固课堂知识、提高综合运用所学的理论知识和方法独立分析和解决问题的能力...

    springboot知识点整理

    2.11 自动配置原理 37 2.12 @Conditional派生注解 41 3 Spring Boot与日志 42 3.1 日志框架分类和选择 42 3.2 SLF4j使用 43 3.3 其他日志框架统一转换成slf4j+logback 44 3.4 Spring Boot日志使用 45 3.5 Spring ...

    编译原理电子书

    本书系统性强,概念清晰,内容简明通俗,每章章首配有本章学习导读,章末配有本章小结、自测练习题和习题,附录中给出了自测练习题和习题的参考答案,还给出了编译实验内容、要求、参考算法和C语言编译实验程序框架...

    北邮数字音视频原理讲义缩水版

    该讲义是北京邮电大学大三上电子信息工程的一门必修课数字音视频原理的最后复习,老师所总结的一份简略性的讲义,供学弟学妹们参考参考。虽然,这门课听着玄玄乎乎的,但是不要放弃啊!!!最后好好看看讲义,看看...

    EMC基础知识总结!从原理到设计,接地,滤波,PCB设计面面俱到.docx

    2、容性耦合 -在干扰源与干扰对称之间存在着耦合的分布电容而产生,干扰量是变化的电场,即变化的电压du/dt。 3、感性耦合 -在干扰源与干扰对称之间存在着互感而产生,干扰量是变化的磁场,即变化的电流di/dt。 -...

    java的基础性小结与笔记

    随笔记录java的一些基础知识,不停更新中.... 各个章节稍微有点乱,想起来的时候,可以查看一些知识点。 能简单帮助自己复习一下基础知识与原理性知识。

    计算机应用基础知识总结大全精编.docx

    计算机应用基础知识总结大全精编 Document number:WTT-LKK-GBB-08921-EIGG-22986 Document number:WTT-LKK-GBB-08921-EIGG-22986 计算机应用基础知识总结大全精编全文共34页,当前为第1页。计算机应用基础知识总结...

    CISA知识点总结

     一般 准则 :基本的 审计 指导原理 指导原理  执行 准则 :涉及 任务的执行和管理 任务的执行和管理 任务的执行和管理  报告 准则 :落实 :落实 报告类型、沟通方式和信息 报告类型、沟通方式和信息 报告...

    王建辉-自动控制原理(国家精品课程教材)

    修订的基本思想是更新观念,深化改革,提高知识起点,努力拓宽专业口径,以增强培养人才的适应性。  本书既可以作为高等学校自动化、仪表、电气传动、计算机、机械、化工、航天航空等相关专业的教材,也可供有关...

    西安理工大学 微机原理课件

    各章知识要点、小结 第一章 微型计算机系统概述 本章知识要点: • 微型计算机的发展。 • 微型计算机的特点。 • 微型计算机系统的组成。 • 微型计算机的主要性能指标。 本章小结: 本章首先介绍了微型计算机的...

    数据挖掘原理与算法

    本书是一本全面介绍数据挖掘和知识发现技术的专业书籍,它系统地阐述了数据挖掘和知识发现技术的产生、发展、应用以及相关概念、原理和算法,对数据挖掘中的主要技术分支,包括关联规则、分类、聚类、序列、空间以及...

    开关电源设计资料大全DCDC电源硬件设计原理图电源文档资料共180个.zip

    AC-DC 5V1A专用小功率开关电源DK106(PCB源文件+变压器参数+BOM清单) Buck型开关电源_芮法成.pdf DC24V仪用开关电源的原理和维修.doc DK106 5V1A电源适配器IC方案52x32元件清单.pdf LED反激式电源之UC3842恒流恒压...

Global site tag (gtag.js) - Google Analytics