`
uuhorse
  • 浏览: 64164 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Java Applet小结

    博客分类:
  • Java
阅读更多
1. Applet基础
 在网页中嵌入Applet程序:
<applet codebase= "."
code= "com.webtec.graph.TopGraphApplet.class"
archive="topview20111202.jar"
width=800   height=600>
<param name=width value="800">
<param name=height value="600">
</applet>
 Codebase: applet程序位置(.表示页面和applet在同一位置)
 Code: applet类的全名
 Archive:引入的jar包,多个用","隔开
 <param name=width value="800">指定向applet传入的参数

 Applet程序:
 getParameter("width"), 从Apple获取参数对应值,未设置返回null
 getCodeBase (),返回当前applet的路径,即applet的目录的URL。
这里犯了个错误,想要从properties文件中读取服务器配置,在applet中配置连接服务器的路径,但是applet是服务器端下载的,不能访问客户端的文件系统,不可能读到properties文件,最后用getCodeBase()方法替代了。要配置用户属性,可以在param标签配置。
 Validate(),在applet中动态添加组件,不显示,调用了一下Validate()方法,然后图形出来了,repaint()、doLayout()都不得行,也不是很明白,时间紧急没有细究。

2. Applet与服务器交互
准备在applet程序中绘制图形,图形数据从数据库中获取出来的,开发的时候直接访问了数据库,还用了JPA,在Eclipse里面发现运行起来很正常,很强大,发布的时候发现又做错了。
Applet是运行在客户端的,需要客户端的java类库支持,开发的时候直接把很多包放到了类路径下,发现用户要从网页运行不可能下载所有的jar包支持运行,所以不要把applet功能做得太过强大,主要是用来展示的。
Applet可以直接访问数据库,但是需要JDBC的支持,但是最好不要这样做。一方面客户端是没有jdbc包的,直接放到applet一起会增加用户访问时的网络负担;另一方面,数据库服务器不一定能够从客户端直接连通,主要是网络问题,可能数据库位于内外或者其他安全考虑。
最终不得不考虑从远程Http服务器获取图形数据,代码如下:
/**
* 从服务器读取数据绘制TOP图的数据
* */
public static String getGraphicData() {
String graphicData = "";
//服务器servlet或Action请求路径(绝对路径)
String urlString = Common.ActionAddress.getGraphDataUrl();
byte buffer[] = new byte[4096];
StringBuffer data = new StringBuffer();
HttpURLConnection conn = null;
try {
URL url = new URL(urlString);
conn = (HttpURLConnection) url.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
int len = 0;
while((len = is.read(buffer))>0){
data.append(new String(buffer, 0, len));
}
is.close();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null,
"Error: " + "Error occurs when request to : \n" +
urlString + "\nReason: " + e.getLocalizedMessage(),
"Applet Message", JOptionPane.ERROR_MESSAGE);
}
return graphicData;
}
在开发环境中测试一切正常,但是发布到网页中无法执行。上面的代码表面上看只有IOException,所以一开始只捕获了IO异常,开发环境中运行正常,但是网页加载后执行正常,Java控制台无任何异常信息,调了很久不知道为什么。后来只好将IOException改成Exception,捕获到了java.net.SocketPermission,提示Access Denied,发现是applet无法使用网络资源,是java security机制的原因,applet无法访问客户端的网络、文件等资源,所以只好在客户端修改配置了,配置方法在下一节。
网络异常解决了,程序还是无法执行,检查到java.lang.reflect.ReflectPermission异常,可能是在给Filed设置值是设置了私有成员,最终没有解决,网上查不到资料,自己改不来,只好吧那部分代码换了,用了点低级的代码先把功能实现了再说。
还有一个问题不能解决的是Applet的字符编码问题,服务器端用的是UTF-8的编码格式,在页面测试正常,开发环境中的Applet测试正常,但是发布到网页测试不正常,说是Applet运行的时候用的是操作系统的默认字符集,最后只好把它从GBK转了一遍,勉强凑合,但是没有完全去除乱码,GBK2312和GBK18030直接抛异常,没搞懂为什么,期待高手指点。

3. Applet安全设置
 Applet访问网络,抛出异常:
java.security.AccessControlException: access denied (java.net.SocketPermission server1 resolve)
这个错误的通知你访问被拒绝。这就是说,由于 applet 程序试图在没有获得正确的权限的情况下访问系统资源,括号中代码表示,若要纠正这种情况,您需要一个向数据库所在计算机(主机名为server1) 授予 applet 访问权限的 SocketPermission。
 解决办法:
 创建policy策略文件,内容如下:
grant {
  permission java.net.SocketPermission "server1", "resolve";
permission java.net.SocketPermission "127.0.0.1:8080", "connect, resolve";
};
将该文件保存成ASCII文件,命名为netconnect.policy,存于${JRE_HOME}/lib/security/目录下(主要是为方便后面路径填写)。

 修改Java安全配置:
创建了策略文件后,修改${JRE_HOME}/lib/security/java.security文件,在
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
下添加一行
policy.url.3= file: ${java.home}/lib/security/netconnect.policy
再次访问页面的applet,又捕获到如下异常:
java.security.AccessControlException: access denied(java.net.SocketPermission 127.0.0.1:8080 connect,resolve)
网络访问仍受限,不能访问服务器127.0.0.1:8080,在前面生成的策略文件中加入
permission java.net.SocketPermission "10.6.1.16:1521", "connect, resolve";
再次访问,运行成功。

还有种说法是为applet添加安全证书,用keytool工具,暂时没有时间去研究没搞懂,过段时间可以去研究一下。
分享到:
评论

相关推荐

    毕业设计基于javaapplet+SQL的阳光酒店管理系统的实现.zip

    毕业设计基于javaapplet+SQL的阳光酒店管理系统的实现.zip 目的 本文档为阳光酒店管理系统需求分析报告,为阳光酒店管理系统的设计的主要依据,主要针对阳光酒店管理系统的概要设计和详细设计人员,作为项目验收的...

    JAVA清华大学教程

    ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...

    JAVA 清华大学 教程

    ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...

    Java编程语言详细教程

    ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...

    清华大学JAVA教程

    ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...

    Java数据结构和算法中文第二版

    小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程...

    超详细Java入门到精通自学视频课程-10、继承:构造器特点、this、super小结.rar

    另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。 Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口...

    Java数据结构和算法(第二版)

    小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 ...

    java数据结构与算法第二版

    小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程...

    JAVA案例开发集锦.part1

    本章小结/49 第2章 Java与特效/50 第3章 XML与其他/110 第4章 Java与游戏/156 第5章 Java与文件操作/220 第6章 Java与安全/266 第7章 Java与数据库/312 第8章 Java与Servlet/354 第9章 Java与网络/400 第10章 Java...

    JAVA案例开发集锦.part2

    本章小结/49 第2章 Java与特效/50 第3章 XML与其他/110 第4章 Java与游戏/156 第5章 Java与文件操作/220 第6章 Java与安全/266 第7章 Java与数据库/312 第8章 Java与Servlet/354 第9章 Java与网络/400 第10章 Java...

    JAVA案例开发集锦.part3

    本章小结/49 第2章 Java与特效/50 第3章 XML与其他/110 第4章 Java与游戏/156 第5章 Java与文件操作/220 第6章 Java与安全/266 第7章 Java与数据库/312 第8章 Java与Servlet/354 第9章 Java与网络/400 第10章 Java...

    Java服务器程序设计

    用java进行客户端的applet (小程序)开发的技术已广为使用,而用java进行服务器端的servlet(服务器小程序)开发则尚需揭开其神秘的面纱,本书正是基于这样的目的编写的。全书从java服务器的体系...15.6 小结[/font]

    Java数据结构和算法中文第二版(1)

    小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 ...

    java基础入门教程

    所 以 有 人 说 :"现 在 第 三 方 的 开 发 商 都 团 结 在 Java大旗 周 围了 !",纷 纷 推 出 用Java 开 发 的 各 种 软 件 产 品 ,以 期尽 快 地 占 领 市 场 。 四 、 Java 语 言 的 应 用 前 景 Java 语 言 ...

    Java SE实践教程 pdf格式电子书 下载(四) 更新

    感谢大家的支持,我终于升级了,上传限制得到提升,所以把资源整合下!希望大家一如既往 Java SE实践教程 pdf格式电子书 下载(一) 更新 ...Java SE实践教程 pdf格式电子书 下载(二) 更新 ...13.4 小结 387

    Java语言程序设计

    Java语言基础知识 1.1 Java语言与面向对象的程序设计 1.1.1 面向对象的程序设计思想 1.1.2 Java语言的特点 1.1.3 Java类库 1.2 Java程序概述 1.2.1 Java开发环境 1.2.2 Application举例 1.2.3 Applet举例 ...

    疯狂JAVA讲义

    1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...

    Java典型模块

    1.4 小结 第2章 Java面向对象编程 2.1 面向对象的一些概念 2.1.1 面向对象涉及的概念 2.1.2 类和对象 2.2 面向对象的一些特性 2.2.1 继承特性 2.2.2 多态特性 2.2.3 封装特性 2.3 Java中实现的面向对象特性 2.3.1 ...

Global site tag (gtag.js) - Google Analytics