include 指令和 include 动作引入 jsp 页面时中文乱码 - 0820LL

时间:2024-03-08 14:43:41

include 指令和 include 动作引入 jsp 页面时中文乱码

include指令:<%@ include file="new.jsp" %>

include动作:<jsp:include page="new.jsp" flush="true" />

 

include指令,资源引入发生在JSP页面翻译时,即当JSP容器将页面转换生成Servlet时,include指令将被引入页面的JSP代码完全完全融入,两个页面融合成一个Servlet。不支持传递参数

include动作,资源引入发生在请求页面时,可以使用<jsp:param ... />传递参数

 

include指令对引入的文件扩展名不做特殊要求

include动作,若引入的文件需要以JSP页面处理,则其文件扩展名必须是.jsp;若使用.jspf为扩展名,则该页面被当做静态文件。

 

发生中文乱码的解决方法

无论是使用 include 指令还是 include 编码都会产生中文乱码

<%@ include file="header.jsp" %>  <!-- include 指令 -->
<jsp:include page="header.jsp" flush="true" />  <!-- include 动作 -->

在被引入的 jsp 文件中加入下面内容指定编码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

 

备注:

JSP 要经过三个阶段,两次的“编码”,

第一阶段会用 pageEncoding ———> 第二阶段会用 utf-8 至 utf-8 ———> 第三阶段会用 contentType 也就是在客户端浏览器中看到的

第一阶段是 JSP 文件翻译成 Servlet,也就是 .java 文件,这是容器会根据 pageEncoding 的设置读取 jsp 文件, 结果是有指定的编码方法翻译成统一的 UTF-8 的Java源代码,如果 pageEncoding 没有设定或者设定不对,就会出现中文乱码。

第二阶段是 javac 将 java 源代码编译成 java 字节码,不论 JSP 编写时用的什么编码方案,经过这个阶段的结果都是 UTF-8 编码的 java 源代码。javac 使用 UTF-8 的编码读取 java 源代码,编译成 UTF-8 编码的二进制字节码,即 .class 文件,这是 JVM 对常数字符串在二进制内表达的规范。

第三阶段是 Tomcat 或者其他容器载入和执行 java 字节码,输出的结果也就是在客户端浏览器见到的,这个阶段隐藏在第一阶段和第二阶段的 contentType 设定就发挥作用了。

include 指令就是在第一阶段, 即 JSP 页面翻译成 Servlet 时

include 动作发生在第一阶段之前

如果包含文件和被包含文件的编码不一致,在进行编码转换时就可能出现中文乱码