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).rar"就是一个典型的例子,它利用Java Applet技术和SQL数据库,为酒店提供了全面、高效的运营解决方案。下面,我们将深入探讨这个系统的主要功能及其背后的技术原理。 首先,让...
Java Applet是Java语言的一个子集,主要用于创建可嵌入到网页中的小程序。在酒店管理系统中,Java Applet用于构建用户界面,使得用户可以在浏览器环境下直接与系统交互,进行各项操作。Java Applet具有跨平台特性,...
毕业设计基于javaapplet+SQL的阳光酒店管理系统的实现.zip 目的 本文档为阳光酒店管理系统需求分析报告,为阳光酒店管理系统的设计的主要依据,主要针对阳光酒店管理系统的概要设计和详细设计人员,作为项目验收的...
阳光酒店管理系统(javaapplet+SQL) 1、散客开单:完成散客的开单,可一次最多开5间相同类型的房间。 2、团体开单:完成团体的开单,开放数量没有限制,可同时开不同类型的房间。 3、宾客结帐:自动统计每个登记客人...
【Java试题小结】 1. **Applet生命周期与方法**: - 在Java中,Applet的生命周期包括初始化、启动、绘画、停止和销毁几个阶段。`init()`方法用于初始化Applet所需资源,`paint()`方法负责在屏幕上绘制图形,如线条...
### Java技巧小结荟萃 #### Javadoc API 文件产生器 Javadoc 是一款非常重要的工具,主要用于生成文档,能够从源代码注释中提取出有用的文档信息。这不仅有助于提高代码的可读性,还方便其他开发人员快速理解类、...
◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...
◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...
◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...
七、小结 本文的漂亮时钟 Java 完整代码为我们提供了一个完整的 Java 应用程序示例,涵盖了 Java Applet、Java 图形用户界面编程、Java 多线程编程、Java 音频处理、Java 图像处理和 Java 时间处理等多个知识点。...
◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...
小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程...
另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。 Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口...
小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 ...
小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程...
本章小结/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...
本章小结/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...
本章小结/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...