JB8一个jsp文件编写、保存BUG的原因及修改

js

在JB8中编写、保存的jsp文件的时候通常会出现这种错误(在状态栏中提示)
com.borland.primetime.util.AssertionException: gbk
而并不能正确保存jsp文件。

个人修改办法如下:

这个问题我在用JB8编写jsp文件时候发现的,现在本人已基本解决(但是改动了jdk类库里一些代码)

首先我解析一下原因:

JB8这个问题只出现在jsp文件中,而java代码则没有问题
我们用JB(所有JB8以前的版本)编写程序的时候,项目的编码(Encoding)应该是GBK(注意是大写)
这样我们编写Java代码的时候用的就是GBK,在JB8以前版本中,java文件和jsp文件的用的都是项目编码

(如:GBK),因此所有文件都用GBK编写

到了JB8就把java文件和jsp文件分开了,java继续用项目的编码,而jsp则根据jsp文件头的
<%@ page contentType="text/html;charset=[encoding]"%>
中[encoding](如GBK、gb2312)来读取、编写和写入文件,如果没写明则用ISO-8859-1(这个编码的写

法也有问题,后面会有说明修改的方法),但这里用GBK编写代码的时候则JB8莫名其妙的把GBK改为小写

gbk(borland程序员写错还是其他原因?!谁知道!),而在jdk类库中并没有这中编码(java是区分大

小写的),因此就出现以上的错误:
com.borland.primetime.util.AssertionException: gbk

解决方法:
在用我的修改方法前,大家错好能找些关于java字符集(支持的编码)的资料(论坛精华区有资料)
我这里修改的jdk的类库,并不修改JB8的代码(JB8太庞大,找起来不好找)
在jdk类库中负责编码别名转换类是sun.io.CharacterEncoding(在rt.jar包中,jdk目录是jdk1.4\jre\

lib)

这解析一下别名,
java中支持的编码比较多,如:ISO8859_1,gb2312,GBK等,而java是区分大小写的,如果我把ISO8859_1

写成iso8859_1,java会出错的,就像JB8把GBK写成gbk就出错了,那java错了一些容错处理,当他读到

某些并不是自己支持的编码是就会去找sun.io.CharacterEncoding,看看这里有没有对应的编码转换,

如果有则转成标准的编码,这里我们这些写得并不标准得编码成为编码得别名,而编码得别名可能会有

很多(这个跟操作系统有关,如ISO8859_1就有很多中写法:iso_8859-1,iso8859_1)
别名具体的英文名字解析我不记得了,我自己按自己的理解把它叫做别名

接着我简要说明一下sun.io.CharacterEncoding是怎样实现别名的转换
说起来很简单,就是用一个HashMap做key与value的对应表
sun.io.CharacterEncoding部分编码如下(用jad反编译出来的)
        ((HashMap) (obj)).put("us-ascii", "ASCII");
        ((HashMap) (obj)).put("ascii", "ASCII");
        ((HashMap) (obj)).put("646", "ASCII");
        ((HashMap) (obj)).put("iso_646.irv:1983", "ASCII");
        ((HashMap) (obj)).put("ansi_x3.4-1968", "ASCII");
        ((HashMap) (obj)).put("iso646-us", "ASCII");
        ((HashMap) (obj)).put("default", "ASCII");
        ((HashMap) (obj)).put("ascii7", "ASCII");
        ((HashMap) (obj)).put("8859_1", "ISO8859_1");
        ((HashMap) (obj)).put("iso_8859-1:1987", "ISO8859_1");
        ((HashMap) (obj)).put("iso-ir-100", "ISO8859_1");
        ((HashMap) (obj)).put("iso_8859-1", "ISO8859_1");
        ((HashMap) (obj)).put("iso-8859-1", "ISO8859_1");
        ((HashMap) (obj)).put("iso8859-1", "ISO8859_1");
。。。。。

这个对应表比较大,但找起来并不困难
对照前面jb8的问题,我们很容易就找到原因所在,这个对应表中并没有gbk和GBK的对应!!!!
那我们就知道如何解决了,自己加!!!
((HashMap) (obj)).put("gbk", "GBK");
(【现在不知道有没有记错】后来我同时发现JB8也写错了一个编码ISO-8859_1,这个在对应表中也没有

,所以建议大家也加上:
((HashMap) (obj)).put("ISO_8859-1", "ISO8859_1");

然后编译自己sun.io.CharacterEncoding,然后加到JB8的jdk1.4的rt.jar包中即可
(怎样操作请参考jar.exe的说明,在命令窗口运行jar就有帮助)

以后JB8就不会出错了!哈哈 :)

如果对本人理解不认同或有更好的解决方法请指出,欢迎讨论。

时间: 2024-09-28 17:11:47

JB8一个jsp文件编写、保存BUG的原因及修改的相关文章

保存一个JSP文件运行是出错用的myeclipse

问题描述 保存一个JSP文件运行是出错用的myeclipse W ception in thread ""main"" java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory at org.apache.catalina.startup.Bootstrap.(Bootstrap.java:52)Caused by: java.lang.ClassNotFoundException: org

新手 帮忙 网页-用一个JSP页面编写一个猜数字游戏

问题描述 用一个JSP页面编写一个猜数字游戏 系统内部生成一个0-100之间的随机数,提供一个表单让用户来猜这个数字是多少,若猜大了,出现"大了"的提示,若猜小了,出现"小了"的提示,直到用户猜到正确的数字时,提示"猜对了!",并统计用户猜了几次才猜对. 我的代码: **<%@ page language="java" import="java.util.*" pageEncoding="U

dynamic-我建立的是Dynamic Web Project ,然后就建立一个jsp文件,但是就报错404

问题描述 我建立的是Dynamic Web Project ,然后就建立一个jsp文件,但是就报错404 我建立的是Dynamic Web Project ,然后就建立一个jsp文件,什么都没有改变 运行就报404 求指教 解决方案 你项目发布到到哪儿去了,看看你发布上去了,访问路径也看看. 解决方案二: 访问路径写详细了它就好了 解决方案三: 路径问题 解决了

在.jsp文件里面,通过jquery load方法加载另一个.jsp文件,请问这2个.jsp文件是否共享数据呢?

问题描述 1.问题里面的共享数据是指,在.jsp里的脚本代码 定义的变量/对象等举例,<%Cart cart = request.getAttribute("cart");--%>2.再打个比方----包含文件,有2种方法:1).jsp指令<jsp:include page="XXX.jsp"/> //这样包含进来的.jsp文件不共享数据,因为2个.jsp文件 各自独立!2).jsp标准动作<%@ include file="

jsp-JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答

问题描述 JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答 背景: 楼主使用Myelipse新建了一个Web项目,在编写一个JSP文件的时候遇到一个问题,首先是使用了img,并且写了一个事件,代码如下: <imgclass="poke" src="poke/back.jpg" title="hit" id="play_id_3" onClick="change_pic()&qu

服务器-jsp文件,在浏览器中打开是空白页,其他jsp文件,可以显示,就这一个不行,是什么问题?

问题描述 jsp文件,在浏览器中打开是空白页,其他jsp文件,可以显示,就这一个不行,是什么问题? jsp文件编写完之后,在浏览器中打开,显示空白页,但是其他jsp文件可以访问数据库,并且可以显示页面,唯独这一个不行,数据库没有问题,连接池也没有问题,服务器已经重新安装并且配置,依然解决不了问题,是什么问题?怎么解决? <%@ page contentType=""text/html; charset=gb18030"" language="&quo

创建JSP文件和ActionForm Bean

js|创建    本例中,视图包括两个组件:    ·一个JSP文件:hello.jsp    ·一个ActionForm Bean: HelloForm Bean    下面分别讲述如何创建这两个组件.     创建JSP文件     hello.jsp提供用户界面,能够接受用户输入的姓名.此外,本Web应用的所有输出结果也都由hello.jsp显示给用户.图2-1显示了hello.jsp提供的网页. 图2-1 hello.jsp的网页     在图2-1中,用户输入姓名"Weiqin&quo

jsp文件操作之读取篇

js 文件操作是网站编程的重要内容之一,asp关于文件操作讨论的已经很多了,让我们来看看jsp中是如何实现的. 这里用到了两个文件,一个jsp文件一个javabean文件,通过jsp中调用javabean可以轻松读取文本文件,注意请放置一个文本文件afile.txt到web根目录的test目录下,javabean文件编译后将class文件放到对应的class目录下(tomcat环境). Read.jsp <html> <head> <title>读取一个文件</t

jsp文件操作之追加篇

js 文件操作是网站编程的重要内容之一,asp关于文件操作讨论的已经很多了,让我们来看看jsp中是如何实现的. 这里用到了两个文件,一个jsp文件一个javabean文件,通过jsp中调用javabean可以轻松追加数据到文本文件,如果大家读了上写入篇的话,会发现这篇文章同上一篇有很多相似之处,读起来也很容易了. 注意请放置一个文本文件afile.txt到web根目录的test目录下,以便程序追加数据,javabean文件编译后将class文件放到对应的class目录下(tomcat环境). w