jsp中嵌入applet找不到类的问题解决

上一篇 / 下一篇  2012-04-19 00:34:32 / 个人分类:jsp

背景:eclipse + tomcat + webProject
问题:webProject首页中使用了applet嵌入,结果提示applet类无法查找
解决方案:在应用程序根目录下新建 applet 文件夹,将编译好的 applet.class 文件考到该文件夹下。

详细情况:
1、新建项目 MyApplet, index.jsp 源码:

  1. <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>HelloWorld! Applet</title>  
  13.  <meta http-equiv="pragma" content="no-cache">  
  14.  <meta http-equiv="cache-control" content="no-cache">  
  15.  <meta http-equiv="expires" content="0">      
  16.  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  17.  <meta http-equiv="description" content="This is my page">  
  18.  <!-- 
  19.  <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  20.  -->  
  21.   </head>  
  22.     
  23.   <body>  
  24.     This is my JSP page. <br>  
  25.     <applet code="com.defonds.applet.HelloApplet.class" width=200 height=100 ></applet>  
  26.   </body>  
  27. </html>  

2、新建 applet 类 HelloApplet 源码:
  1. package com.defonds.applet;  
  2.   
  3. import java.applet.Applet;  
  4. import java.awt.Graphics;  
  5.   
  6. public class HelloApplet extends Applet {  
  7.  public void paint(Graphics g) {  
  8.   g.drawString("Hello,Defonds!"535);  
  9.  }  
  10. }  

3、将 MyApplet 部署到 tomcat 容器下。启动 tomcat,访问 MyApplet。页面提示错误信息如下:
  1. 载入:找不到类 com.defonds.applet.HelloApplet.class。  
  2. java.lang.ClassNotFoundException: com.defonds.applet.HelloApplet.class  
  3.  at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)  
  4.  at java.lang.ClassLoader.loadClass(Unknown Source)  
  5.  at java.lang.ClassLoader.loadClass(Unknown Source)  
  6.  at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)  
  7.  at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)  
  8.  at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)  
  9.  at java.lang.Thread.run(Unknown Source)  
  10. Caused by: java.io.IOException: open HTTP connection failed:http://localhost:9999/MyApplet/com/defonds/applet/HelloApplet/class.class  
  11.  at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)  
  12.  at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)  
  13.  at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)  
  14.  at java.security.AccessController.doPrivileged(Native Method)  
  15.  ... 7 more  
  16. 异常:java.lang.ClassNotFoundException: com.defonds.applet.HelloApplet.class  

分析:applet 的 class 文件最好不要放在 web-inf 目录下,因为这是个特殊目录,所以http://localhost:9999/MyApplet/不能找到  com.defonds.applet.HelloApplet.class 这个文件。可以在 /webapps/MyApplet/ 下新建一个文件夹,将 applet 的 class 文件放在里面,在重新设置 codebase 属性。
这样,新的目录结构如下:
 测试用的 jsp     /webapps/MyApplet/index.jsp  
 jsp 中插入的applet class     /webapps/MyApplet/applet/com/defonds/applet/HelloApplet.class
URL
 
http://localhost:9999/MyApplet/index.jsp 
新的 index.jsp 源码如下:

  1. <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>HelloWorld! Applet</title>  
  13.  <meta http-equiv="pragma" content="no-cache">  
  14.  <meta http-equiv="cache-control" content="no-cache">  
  15.  <meta http-equiv="expires" content="0">      
  16.  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  17.  <meta http-equiv="description" content="This is my page">  
  18.  <!-- 
  19.  <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  20.  -->  
  21.   </head>  
  22.     
  23.   <body>  
  24.     This is my JSP page. <br>  
  25.     <applet code="com.defonds.applet.HelloApplet.class" width=200 height=100 codebase="/MyApplet/applet/"></applet>  
  26.   </body>  
  27. </html>  

redeploy 一下 tomcat,重新访问 MyApplet 项目,发现 applet 已经成功嵌入。


TAG:

 

评分:0

我来说两句

龙飞

龙飞

追随自己的梦想,永不言弃。

日历

« 2024-04-30  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 71947
  • 日志数: 62
  • 文件数: 1
  • 书签数: 4
  • 建立时间: 2011-01-27
  • 更新时间: 2012-06-16

RSS订阅

Open Toolbar