在Web应用程序中运行applet

我想在我的Web应用程序中使用html applet标签运行简单的applet,但它给出了错误

java.lang.ClassNotFoundException:MyApplet

请尽可能给我样品申请…..

问题是applet引擎无法在你定义的代码库中找到你的MyApplet类。

这可能是因为您在/ WEB-INF / classes目录中有课程。 该目录受servlet引擎保护,因为它不能从外部资源加入(可以是JSP / HTML页面上的applet标记)。

有几种方法可以解决这个问题。 最简单的方法是将您的MyApplet类打包为一个jar文件(让我们称之为myapplet.jar ),并将其保存在一个可访问的目录(即Web应用程序的jsp文件夹)中。 例如,假设您为Web应用程序提供了以下文件夹:

 /MyWebApp/jsp /MyWebApp/applet /MyWebApp/WEB-INF 

客户端浏览器可以访问jsp和applet文件夹的内容。

然后,将myapplet.jar保存在applet文件夹中,并像这样设置applet标签配置(假设您的Web上下文是MyWebApp):

   

在这里您可以找到有关applet标签的更多信息: http : //docs.oracle.com/javase/tutorial/deployment/applet/index.html

老线程,我知道……但我想出了一个小hack,它允许你提供WEB-INF / classes文件夹中的applet,这样你的项目就不需要额外的jar了(而且你可以更快地重新部署您的applet)。 这样做的缺点是你不能签署你的applet(因为它是一个.class而不是jar)。 让我们切入这里追逐……

首先,创建一个为applet提供服务的小servlet(它需要Javassist):

 public class AppletServlet implements Servlet { ... ClassPool pool = ClassPool.getDefault(); @Override public void init(ServletConfig config) throws ServletException { pool.insertClassPath(new ClassClassPath(this.getClass())); } public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { String className = ((HttpServletRequest) req).getPathInfo().substring(1); try { CtClass cc = pool.get(className.replace("/", ".").replace(".class", "")); res.setContentType("application/x-java-applet;version=1.5.0"); res.setContentLength(cc.toBytecode().length); res.getOutputStream().write(cc.toBytecode()); res.getOutputStream().close(); } catch (Exception e) { e.printStackTrace(); } } ... } 

现在将您的AppletServlet(我知道,可怕的名称)声明为web.xml中的servlet:

  Applet Servlet com.example.AppletServlet   Applet Servlet /applet/*  

最后,从您的页面调用您的applet:

     Applet failed to run. No Java plug-in was found.  

就是这样。 servlet将使用Javassist获取类的字节代码并将其提供给请求。

免责声明如果有人知道您的包结构,他们可以下载所有类并从那里做恶事。 因此,请确保您只允许servlet提供实际为applet的类。

检查2件事。 1.代码库是正确的。 要检查是否正确编写了完整的URL(页面的URL +代码库)并直接在浏览器中进行尝试。 确保它是正确的。

  1. 类名称写得正确。 它必须是完全限定的类名(包括包名)

如果它不起作用,请在此处发布您的标记