Applet报ClassNotFoundException,如何设置正确的codebase相对路径?
解决Applet的ClassNotFoundException问题
嘿,这个问题其实踩了一个Java Web里很常见的坑——WEB-INF目录是服务器端受保护的私有目录,浏览器根本无法直接访问里面的资源,这才是你一直报错的核心原因,不是单纯的路径写错了!
先理清核心问题
你把Applet的class文件放在WEB-INF/classes里,这个目录是给服务器端代码(比如Servlet、后端业务类)用的,浏览器发起的请求会被服务器拦截,根本下载不到这里的class文件,自然会抛出ClassNotFoundException。
正确的解决步骤
1. 调整class文件的存放位置
在web根目录下新建一个公开可访问的目录(比如叫applets),把你的class文件移过去,最终的文件夹结构变成:
web ├─ View │ └─ Gadgets.jsp ├─ applets │ └─ Gadgets │ └─ calculator.class └─ WEB-INF └─ classes
2. 修改Gadgets.jsp里的applet标签
把代码改成下面这样:
<applet codebase="../applets" code="Gadgets.calculator" width="200" height="280"> If your browser was Java-enabled, a Calculator would appear here. </applet>
这里有两个关键调整:
codebase="../applets":因为Gadgets.jsp在web/View/目录下,../会回到web根目录,再指向我们新建的applets公开目录,浏览器能正常访问这里的资源。code="Gadgets.calculator":要用点分隔的全限定类名(而不是斜杠),这是Java类的标准写法,Applet加载器会根据这个规则找到对应的class文件。
额外提醒
以后别把需要浏览器下载的前端资源(包括Applet、JS、CSS、图片等)放到WEB-INF目录里,这个目录是服务器的私有领地,只给后端代码用。
内容的提问来源于stack exchange,提问作者MBJH
相关产品推荐
相关产品推荐

