java web 一次请求编码设置的过程

简单的认为:pageEncoding是jsp文件本身的编码;contentType的charset是指服务器发送给客户端时的内容编码。例如:pageEncoding="GBK"。这句话的意思是,告诉JVM 这个jsp本身采用的"GBK"编码,在JSP编译成Servlet传给JVM的时候,就用“GBK”的编码方式将Jsp网页源文件翻译成统一的UTF-8形式的Java字节码。如果不加设定,则JVM默认的用ISO-8859-1这种编码方式。contentType里的charset=gbk,指的是此网页文件输出到浏览器的输出方式为gbk。在这个过程中,一个JSP的源文件需要经过三个阶段,两次编码,才能完成一次完整的输出。第一阶段:将jsp编译成Servlet(.java)文件。用到的指令是pageEncoding,根据pageEncoding=“XXX”的指示,找到编码的规则为“XXX”,服务器在将JSP文件编译成.java文件时会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8编码的JAVA源码(即.java)。
第二阶段:从Servlet文件(.java)到Java字节码文件(.class),从UTF-8到UTF-8。在这一阶段中,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。JAVAC用UTF-8的encoding读取java源码,编译成UTF-8编码的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。这一过程是由JVM的内在规范决定的,不受外界控制。
第三阶段:从服务器到浏览器,这在一过程中用到的指令是contentType。服务器载入和执行由第二阶段生成出来JAVA二进制码,输出的结果,也就是在客户端可见到的结果,在这次输出过程中,由contentType属性中的charset来指定,将UTF8形式的二进制码以charset的编码形式来输出。如果没有人为设定,则默认的是ISO-8859-1的形式。

原文地址:https://www.cnblogs.com/liqing-weikeyuan/p/8313040.html

时间: 2024-08-29 07:46:50

java web 一次请求编码设置的过程的相关文章

Java Web 涉及到的编码

对于使用中文来说,有 I/O 的地方就会涉及到编码,前面已经提到了 I/O 操作会引起编码,而大部分 I/O 引起的乱码都是网络 I/O,因为现在几乎所有的应用程序都涉及到网络操作,而数据经过网络传输都是以字节为单位的,所以所有的数据都必须能够被序列化为字节.在 Java 中数据被序列化必须继承 Serializable 接口. 这里有一个问题,你是否认真考虑过一段文本它的实际大小应该怎么计算,我曾经碰到过一个问题:就是要想办法压缩 Cookie 大小,减少网络传输量,当时有选择不同的压缩算法,

java web中get请求中文乱码在filter中解决

之前已经讲过get或者post方法的中文乱码问题,之前都是在每个方法中编写设置编码.如果程序变大,就会很繁琐,使用filter可以避免这种繁琐. 1)写一个encodingFilter进行编码设置 public class encodingFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain arg2) throws IOExce

java web前端发送请求的4种方式

表单 action, 链接href,js 绑定按钮 ajax绑定标签 <h1>通过表单提交参数</h1> <form action="/day46_v1/ServletDemo01?method=addUser" method="post"> 用户名:<input type="text" name="username"/><button>提交</button&g

[Java][Web]Request 获取请求头和数据

获取方式一 InputStream in = request.getInputStream(); int len = 0; byte buffer[] = new byte[1024]; while((len = in.read(buffer)) > 0) { System.out.println(len); System.out.println(new String(buffer,0,len)); } 获取方式二 String value  = request.getParameter("

[Java.Web][Servlet]常用请求头

response.setStatus(302); response.setHeader("location", "/day04/1.html"); 这段代码可以实现 页面重定向到  "/day04/1.html" String data = "aaaaa"; System.out.println("原始数据大小:" + data.length()); ByteArrayOutputStream bout =

Java web应用中的常见字符编码问题的解决方法

以下是 Java Web应用的常见编码问题 1. html页面的编码 在web应用中,通常浏览器会根据http header: Content-type的值来决定用什么encoding, 比如遇到Content-Type: text/html; charset=UTF-8, 页面使用的就UTF-8编码. 但是考虑到离线的html(用户可能把页面html保存到本地), 打开离线的html的时候就要在meta指定编码,当然不指定也会有default值,那么不指定有时就可能出现乱码. Meta标签 <

常用java web容器http长连接超时设置

1.http长连接相关知识 http长连接对我们来说并不陌生,但长连接并不是永远不会关闭.对于HTTP长连接需要注意下面几点: keepalive_timeout指的是web服务器发送完最后一个响应报文后,开始计时,如果在keepalive_timeout指定的时间内还没有收到该连接上的下次请求,则关闭该连接. http长连接的keepalive_time和tcp连接的keepalive_timeout不同. http keep-alive与tcp keep-alive,意图不一样.http k

Java几种常见的编码方式

Java综合 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言.由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解.我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语.这个翻译的过程就是编

Java Web(三) Servlet详解

什么是Servlet? servlet 是运行在 Web 服务器中的Java 程序.servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求.Java Web应用程序中所有的请求-响应都是由Servlet完成. Servlet的工作流程 浏览器与服务器之间的请求和响应都是遵循HTTP协议的(上一篇有介绍HTTP).Tomcat会接受并解析HTTP请求文本,然后封装成HttpServletRequest对象,所有的HTTP头数据都可以通过request相应的方法查询