JSP页面,响应和请求编码全解

JSP页面编码

Page character encoding指的是JSP文件和Tag文件本身的编码格式。

  • 如果web.xml中<jsp-config>元素中配置了<page-encoding>,页面上page指令的pageEncoding属性必须和web.xml中<jsp-config>元素中的<page-encoding>元素指定的page-encoding一致,否则会导致转换错误。也就是说<page-encoding>配置和pageEncoding属性其实是等价的。
  • 如果page指令没有pageEncoding属性和<page-encoding>配置,但有contentType属性,则最终采用contentType属性中的charset。如果contentType也没有charset ,则默认采用ISO-8859-1。
  • 如果有pageEncoding或<page-encoding>,它们的优先权比contentType属性的charset高。
  • 有一种例外情况,就是在文件中发现了byte order mark(BOM),此时BOM就相当于<page-encoding>。如果BOM映射的字符编码与pageEncoding或contentType中的charset不同,一样会导致转换错误。

总结:在判定pageEncoding时,BOM优先权最高,其次是pageEncoding和<page-encoding>,然后是page指令的contentType,最后是ISO-8859-1。

响应编码

响应的编码根本上是由ServletResponse对象的characterEncoding属性决定的。

page指令的contentType属性就是用来设定ServletResponse的charsetEncoding的。如果contentType的CHARSET没有指定,则分两种情况:

  • 如果是使用的XML语法的文档,则默认是UTF-8;
  • 使用JSP语法的文件,则取决于BOM,pageEncoding或<page-encoding>。

响应的编码只由请求的页面决定,通过include指令包含的页面不算。

总结:在判定响应的编码时,page指令的contentType中的charset优先权最高,其次是BOM,然后是pageEncoding和<page-encoding>,最后是ISO-8859-1。

另外,响应的编码受三个方法的影响,setCharacterEncoding, setContentType和setLocale。setLocale的优先级最低。

contentType属性的TYPE值如果不指定,则默认是text/html。

总结如果只设置page指令的contentType,容易保证了页面编码和响应编码的统一

page指令的contentType与<meta>元素的Content-Type的区别

在响应结果中,page指令的contentType影响的是HTTP响应头Content-Type。而<meta>元素中的Content-Type则只是一段文本内容,只有当HTTP响应头中没有Content-Type时浏览器才会检测这段文本。也就意味着在浏览器中HTTP响应头Content-Type的优先级比<meta>元素的Content-Type属性优先级高。

GET/POST请求编码

前面只讲了页面编码和响应编码,那么请求数据的编码又是由什么决定的?

不同的浏览器对URL可能使用不同的字符编码,中文版的浏览器一般会使用GBK。为了保持统一,很多网站的做法是把URL里面的中文和特殊字符用JavaScript的URL encode。

经过测试,在现在的浏览器中,GET和POST请求数据的编码只受HTML<meta>元素的Content-Type影响。

GET/POST请求数据的读取:

  • 读取通过POST传给Servlet的数据,需要给ServletRequest设置正确的characterEncoding才能读取。
  • 读取通过GET传给Servlet的数据,只有当tomcat配置文件server.xml中Connection元素的URIEncoding和数据的编码相同时才能正确读取;否则需要转码。

为什么GET和POST不同的解释:任何请求都需要先经过服务器处理,先由服务器读取URL才知道该传给什么Servlet。POST和GET的URL,都受服务器配置URIEncoding的影响,但是POST在通过URL读取成功之后,它的数据不在URL中,所以设置ServletRequest的characterEncoding才能正确读取。

XML视图格式的JSP

采用XML语法格式的JSP页面,其页面字符编码和相应字符编码永远都是UTF-8。

时间: 2024-10-07 20:51:54

JSP页面,响应和请求编码全解的相关文章

怎样设置Myeclipse的jsp页面为默认utf-8编码

作为企业级开发最流行的工具,用Myeclipse开发java web程序无疑是最合适的,Myeclipse的高耦合使得开发jsp页面变得异常的容易,由于UTF-8默认支持的语言最多,可以显示很容易的显示中文,日本语等很多国家的语言,所以我们通常将JSP编码方式设置为UTF-8. 简单介绍下MyEclipse吧!MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaE

MyEclipse使用总结——在MyEclipse中设置jsp页面为默认utf-8编码

在MyEclispe中创建Jsp页面,Jsp页面的默认编码是“ISO-8859-1”,如下图所示: 在这种编码下编写中文是没有办法保存Jsp页面的,会出现如下的错误提示: 因此可以设置Jsp默认的编码为utf-8,具体步骤如下: 启动MyEclipse,点击菜单上的window--->preferences 在弹出的对话框中点击MyEclise--->Files and Editors--->JSP,如下图所示: 此时就可以看到JSP编码设置面板,如下图所示: 在Encoding那个下拉

在MyEclipse中设置jsp页面为默认utf-8编码

在MyEclispe中创建Jsp页面,Jsp页面的默认编码是"ISO-8859-1",如下图所示: 在这种编码下编写中文是没有办法保存Jsp页面的,会出现如下的错误提示: 因此可以设置Jsp默认的编码为utf-8,具体步骤如下: 启动MyEclipse,点击菜单上的window--->preferences 在弹出的对话框中点击MyEclise--->Files and Editors--->JSP,如下图所示: 此时就可以看到JSP编码设置面板,如下图所示: 在En

SpringMVC中@Control控制器返回的是Jsp页面还是控制器请求的总结

1.返回到JSP页面: return "main" --跳转到 WEB-INF/main.jsp 页面. return "redirect:/main.jsp" --重定向到main.jsp页面,redirect无法访问WEB-INF下的资源文件,因此必须加上.jsp后缀. 2.转发控制器请求: return "forward:/main" --转到 为main的请求上. return "redirect:/main" --重

tomcat 服务器全解

①B/S.C/S比较 ⑴C/S C/S结构即客户端/服务器(Client/Server),例如QQ: 需要编写服务器端程序,以及客户端程序,例如我们安装的就是QQ的客户端程序: 缺点:软件更新时需要同时更新客户端和服务器端两端,比较麻烦: 优点:安全性比较好. ⑵B/S B/S结构即浏览器/服务器(Browser/Server): 优点:只需要编写服务器端程序: 缺点:安全性较差. ②WEB资源 ⑴Web资源介绍 html:静态资源 : JSP/Servlet :动态资源.当然,除了JavaWe

如何在jsp页面里使用vue

只针对需要的 以下各类同学可以直接跳过 1.不推荐jsp和vue加一起写的 2.说直接用jq写的 3......的 4.吐槽的 5.各种解决方案的 总结以上说的都是对的,但是已经写完了页面,所以 emmmm..... 申明楼主只是个前端自己写的大部分也都是前后的分离的,不懂java不懂jsp,而且页面也是用vue写完了才知道要加入原有的jsp页面,所以记录一下全当教训了. 本文只是针对维护老项目,需要修改或者重新写新的jsp页面的同学. 开始 1. jsp 和html(vue)页面有申明区别 我

JSP页面的基本元素

JSP页面元素构成:静态内容.指令.表达式.小脚本.声明.注释. JSP指令包括: page指令:通常位于jsp页面的顶端,同一个页面可以有多个page指令. include指令:将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句. taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用定制行为. page指令语法: <%@page 属性="属性值" 属性2="属性值1,属性值2"... 属性n="属性值n"

如何避免JSP页面自动生成session对象?为什么要这么做?

JSP 在默认情况下,在对一个JSP页面发出请求时,如果session还没有建立,JSP页面会自动为请求建立一个session对象,但是session是比较消耗资源的,如果没必要保持和使用session,就不应该创建session,  例如一些只是用来宣传产品的网站,往往没必要使用session来保存信息,可以使用jsp页面指令session=”false”来避免JSP页面为每个请求都自动创建session.实例代码如下: <%@ page session=”false”>

JSP基础知识?客户端请求与服务端响应(三)

JSP客户端请求 浏览器请求服务器端,信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息: Accept:指定浏览器或其他客户端可以处理的MIME类型.它的值通常为 image/png 或 image/jpeg Accept-Charset:指定浏览器要使用的字符集.比如 ISO-8859-1 Accept-Encoding:指定编码类型.它的值通常为 gzip 或compress Accept-Language:指定客户端首选语言,servlet会优先返回以当前语言构成的结果集,如果