`
zlotus
  • 浏览: 54162 次
  • 性别: 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(有可能影响其他应用,所以不推荐)。

  

 

 

 

 

 

分享到:
评论

相关推荐

    编译原理知识点总结

    ### 编译原理知识点总结 #### 一、程序设计语言概览 1. **程序设计语言的作用**:作为人类与计算机交互的工具,通过程序设计语言指挥计算机执行特定任务,如进行运算、处理数据、显示信息等。 2. **最早的语言**:...

    化工原理知识点总结.pdf

    "化工原理知识点总结" 化工原理知识点总结.pdf 是一份详细的化工原理知识点总结文件,涵盖了流体力学、输送、离心泵、往复泵、流体输送机械分类、流体体积随压力变化而改变的性质等多方面的知识点。 一、流体力学...

    编译原理考试知识点总结.docx

    编译原理考试知识点总结 本文档旨在总结编译原理考试的主要知识点,涵盖编译原理的基本概念、词法分析、语法分析、语义分析、中间代码生成、目标代码生成、错误管理等方面。 一、编译原理构成 编译原理是编译器的...

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

    "操作系统原理知识点总结" 操作系统是一组控制和管理计算机硬件和软件资源、合理的对各类作业进行调度以方便用户的程序集合。操作系统的目标是为了方便性、有效性、可扩展性、开发性。操作系统的作用是作为计算机...

    数据库系统原理重点知识点概念总结

    数据库系统原理涵盖了许多重要的知识点,这里将按照标题和描述中的要点进行详细解释: 1. 数据与信息的区别:数据是信息的载体,是符号记录下来的可识别的信息,而信息是数据的含义,反映了现实世界的存在方式或...

    计算机组成原理知识点总结(一)

    ### 计算机组成原理知识点总结(一) #### 1.1 计算机的发展和系统结构 **1.1.1 要点归纳** ##### 1. 计算机的发展 - **第一代计算机 (1946~1957年) —— 电子管时代** - 特点:采用电子管作为运算和逻辑元件,...

    西北农林科技大学《会计学原理》知识点总结.pdf

    根据提供的文件信息,标题与描述明确指出这是一份关于西北农林科技大学《会计学原理》课程的知识点总结。然而,在给出的部分内容中并未包含实际的会计学知识点,而是重复了“创创大帝”这一非相关词汇。因此,我将...

    人工智能AI2章确定性知识系统.pptx

    总结来说,确定性知识系统在人工智能中扮演着核心角色,通过知识的表示和推理实现智能决策。深入理解和掌握这些概念对于开发和优化AI系统至关重要,尤其在管理信息化领域,能够帮助我们构建更加智能化的管理和决策...

    微机原理基本知识

    总结来说,微机原理涉及的内容广泛,包括微处理器结构、总线系统、特定CPU如8086的特性,以及存储器地址的概念。这些基础知识构成了现代计算机科学的基石,对于学习和理解计算机硬件和软件的工作原理有着不可替代的...

    数据库原理知识点总结.doc

    数据库原理知识点总结 本文将对数据库原理的知识点进行总结,涵盖数据库系统概述、数据管理技术的发展、概念模型、实体及属性、实体间的联系、概念模型表示、数据模型等多方面的内容。 一、数据库系统概述 ...

    组成原理重要概念的详细知识点总结

    以下是对标题和描述中提及的重要概念的详细知识点总结: 1. **指令系统**:计算机能够执行的所有基本操作都是通过一组指令集来实现的,这些指令构成了计算机的指令系统。指令系统决定了计算机能做什么,其设计直接...

    GIS算法原理知识点总结.docx

    GIS算法原理知识点总结 ...GIS算法原理知识点总结包括算法设计原则、算法复杂性、算法概念、计算几何基础、矢量数据压缩等多个方面的知识点,这些知识点是GIS技术的基础部分,对GIS技术的发展和应用具有重要的意义。

    计算机组成原理知识点总结.doc

    计算机组成原理知识点总结 计算机组成原理是计算机科学中的一门重要学科,它研究计算机系统的基本结构、组成部分、工作原理和性能等方面的知识。以下是计算机组成原理知识点总结: 软件和硬件 计算机软件可以分为...

    编译原理课程总结

    编译原理课程总结是编译原理课程的总结性笔记,涵盖了课程的主要内容、学习体会和心得。编译原理旨在编译程序构造的一般原理和基本方法,其内容主要包括语言和文法、词法分析、语法分析、中间代码生成、代码优化和...

    编译原理的心得及小结

    编译原理的心得及小结 编译原理是计算机科学中的一门重要课程,它涉及到程序设计语言的编译和解释。以下是对编译原理的一些心得和小结: 一、词法分析 词法分析是编译过程的第一步,它的主要任务是将源程序的字符...

    计算机组成原理(知识体系完整总结).md

    标题和描述中所提到的“计算机组成原理(知识体系完整总结)”涵盖了计算机科学中的基础概念与原理。这份总结不仅适合学生、老师和在职人员学习,也体现了计算机组成原理的全面性和深入性。 计算机组成原理是计算机...

    计算机组成原理知识点总结——详细版.doc

    "计算机组成原理知识点总结" 计算机组成原理是计算机科学的基础课程,涵盖计算机系统的基本结构、组成部分、工作原理、设计方法和应用技术等方面的知识。 一、计算机软件的分类 计算机软件可以分为两大类:系统...

    TI大学计划数据转换原理与设计总结手册AD-DA选型.pdf

    本手册名为“TI大学计划数据转换原理与设计总结手册AD-DA选型.pdf”,由德州仪器(TI)中国大学计划为中国大学生创新活动量身定做,主要针对模数转换器(ADC)与数模转换器(DAC)的选型指南,内容覆盖了ADC和DAC的...

Global site tag (gtag.js) - Google Analytics