原因:
最近我的SSH老项目使用的编码格式还是GBK,经常有反应说不支持生僻字。那咋办,升级呗,果断把项目中的GBK修改为了UTF-8。
升级编码思路:
1、在web.xml中有编码拦截器,这个首当其冲要修改的。
2、jsp文件格式都是GBK的,需要升级UTF-8,这么多文件能不能统一管理编码,不能把所有jsp页面中的
<%@ page contentType="text/html; charset=GBK" pageEncoding="GBK" language="java" %> // 第一想法是把上面的代码直接修改为: <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %> // 后来又要求,这个系统能随时修改编码格式,咋办!!! // 所有我做了以下试验,结果都失败;重点!!! 下面的代码是错误,不要尝试; // 定义常量类文件:MyChar.java package com.dali.common; public class MyChar{ public static final String CHARSET = "UTF-8"; } // 于是修改jsp的page指令中的编码格式 <%@ page contentType="text/html; charset=<%=com.dali.common.MyChar%>" pageEncoding="<%=com.dali.common.MyChar%>" language="java" %> // 结果运行失败了,编码解析错误 // 再经过其他方案都是无效的,说明page指令不能这么修改的。放弃该方案吧,在想其他的。 // 后来查看jsp编译的***_jsp.java文件后,突发奇想如下: // 经查看***—jsp.java文件内如: public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=GBK");//重点是这个地方,如果我可以重写会怎么样?于是我尝试怎么重写。 pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; 以下代码省略************** } //我经过多次尝试后,发下可以使用下面代码替换 把:<%@ page contentType="text/html; charset=GBK" pageEncoding="GBK" language="java" %> 替换为: <% request.setCharacterEncoding(com.dali.common.MyChar); response.setContentType("text/html; charset="+ com.dali.common.MyChar); response.setCharacterEncoding(com.dali.common.MyChar); %> //再去查看***_jsp.java public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=GBK");//重点是这个地方,如果我可以重写会怎么样?于是我尝试怎么重写。 pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("rnrnrnrn"); request.setCharacterEncoding(com.dali.common.MyChar); response.setContentType("text/html; charset="+com.dali.common.MyChar); response.setCharacterEncoding(com.dali.common.MyChar); 以下代码省略************** }
上面终于解决了通过常量来,继续优化,怎么方便把下面代码写一遍,其他jsp文件引用就行了。
于是找了关于
// 新增commonChar.jsp 内容如下: <% request.setCharacterEncoding(com.dali.common.MyChar); response.setContentType("text/html; charset="+ com.dali.common.MyChar); response.setCharacterEncoding(com.dali.common.MyChar); %> // 在***.jsp中把 <%@ page contentType="text/html; charset=GBK" pageEncoding="GBK" language="java" %> // 替换为 <%@ include file="/common/charset.jsp"%>
!!!!!! 此处不要以为解决完了,还没有呢,结果发现运行的时候,在jsp页面中的中文内容,在编译后乱码了,我的天啊,咋回事呢,
经多次测试发现:
// 经查看这样编辑后的***_jsp.java 发现中文确实是乱码的。 public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { 以上代码省略************** out.write("'; //?????????????ywlxdmrn var isGroup = '"); 以下代码省略************** } // 然后就在***.jsp页面中增加了 <%@ page pageEncoding="GBK" %> // 在查看编辑后的***_jsp.java public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { 以上代码省略************** out.write("'; //这是中文测试代码内容rn var isGroup = '"); 以下代码省略************** }
这时我再向,能不能通过什么配置,不用在每个jsp页面增加
<%@ page pageEncoding="GBK" %>
于是搜索好多资料终于找到了
是让在web.xml中增加以下代码:
*.jsp GBK
后来发现不生效,那很奇怪啊,人家说的应该没有问题。
再去查资料,才发现:jsp-property-group 是要求web.xml 2.4版本以上才支持的。什么是web.xml 2.4呢,资料大致是这样的:
web.xml v2.3
XXXXXXX应用
web.xml v2.4
XXXXXXX应用
web.xml v2.5
XXXXXXX应用
web.xml v3.0
XXXXXXX应用
以上不同的版本,对jdk版本的要求和jsp-api.jar版本不同。
web.xml v2.4 要求:jdk版本1.5及以上(再低的版本没有试过),jsp-api中的jsp_2_0.xsd 的
其他的可以咋IDEA中,一个个都能试。
jsp-property-group 要求最低的jsp_2_0.xsd是满足的。
所以此处需要更新web.xml,把web.xml升级2.4即可。
----------------- 完结 --------------------
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)