在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:
就是这样。 servlet将使用Javassist获取类的字节代码并将其提供给请求。
免责声明如果有人知道您的包结构,他们可以下载所有类并从那里做恶事。 因此,请确保您只允许servlet提供实际为applet的类。
检查2件事。 1.代码库是正确的。 要检查是否正确编写了完整的URL(页面的URL +代码库)并直接在浏览器中进行尝试。 确保它是正确的。
- 类名称写得正确。 它必须是完全限定的类名(包括包名)
如果它不起作用,请在此处发布您的标记
- 启动Applet失败了吗?
- 小程序间通信
- 当从Java Applet传递到Java Script时,为什么我的Unicode String会被破坏?
- 如何在Graphics方法中使用ImageObserver drawImage()
- .NET中Servlet和Applet的通讯记录是什么?
- 在applet中找不到主要方法错误
- 将数据从servlet发送到applet:我该如何实现?
- 如何在Processing中创建单个草图的多个窗口?
- 为什么我的applet得到java.security.AccessControlException:访问被拒绝(java.net.SocketPermission …),我该如何避免它?