我想在我的网络应用程序中使用html applet标签运行简单的applet,但它会出现错误,如
java.lang.ClassNotFoundException:MyApplet
请尽可能给我样品申请.....答案 0 :(得分:9)
问题是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 codebase="/MyWebApp/applet" archive="myapplet.jar"
code="MyApplet.class" width="600" height="500">
</applet>
您可以在此处找到有关小程序标记的更多信息:http://docs.oracle.com/javase/tutorial/deployment/applet/index.html
答案 1 :(得分:1)
旧线程,我知道......但是我想出了一个小小的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:
<servlet>
<servlet-name>Applet Servlet</servlet-name>
<servlet-class>com.example.AppletServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Applet Servlet</servlet-name>
<url-pattern>/applet/*</url-pattern>
</servlet-mapping>
最后,从您的页面调用您的小程序:
<object type="application/x-java-applet" height="300" width="550">
<param name="codebase" value="applet/" />
<param name="code" value="com.example.MyApplet" />
<param name="teste" value="teste"></param>
Applet failed to run. No Java plug-in was found.
</object>
就是这样。 servlet将使用Javassist获取类的字节代码并将其提供给请求。
免责声明如果有人知道您的包结构,他们可以下载所有类并从那里做恶事。因此,请确保您只允许servlet提供实际为applet的类。
答案 2 :(得分:0)
检查2件事。 1.代码库是正确的。 要检查是否正确编写了完整的URL(页面的URL +代码库)并直接在浏览器中进行尝试。确保它是正确的。
如果不起作用,请在此处发布您的代码