使用服务器启动java小程序时失败";不兼容的魔法值1013478509“;
我的小程序有问题。我有一个学校项目,我要做一个乒乓球在线游戏。它离线运行良好,但当我尝试从服务器加载它时,我只得到一个带有红色文本的空框。当我单击文本时,我会收到以下消息: 不兼容的魔法值1013478509 我使用的是jetty-all-8.1.8.v201106.jar和servlet-api-3.0.jar 启动服务器的类如下所示:使用服务器启动java小程序时失败";不兼容的魔法值1013478509“;,java,applet,servlet-3.0,Java,Applet,Servlet 3.0,我的小程序有问题。我有一个学校项目,我要做一个乒乓球在线游戏。它离线运行良好,但当我尝试从服务器加载它时,我只得到一个带有红色文本的空框。当我单击文本时,我会收到以下消息: 不兼容的魔法值1013478509 我使用的是jetty-all-8.1.8.v201106.jar和servlet-api-3.0.jar 启动服务器的类如下所示: public class TheServer extends HttpServlet { private static final long seri
public class TheServer extends HttpServlet {
private static final long serialVersionUID = 1L;
private Scanner sc;
private String webSite;
private PrintWriter out;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html; charset=UTF-8");
resp.setStatus(HttpServletResponse.SC_OK);
out = resp.getWriter();
sc = new Scanner(new File("F:\\Users\\Johan\\Workspace Kurs 5\\PongOnline\\bin\\pong.html"));
webSite = "";
while(sc.hasNext())
webSite += sc.nextLine();
sc.close();
out.println(webSite);
System.out.println(webSite);
}
public static void main(String...args) throws Exception {
ServletContextHandler context = new ServletContextHandler( ServletContextHandler.SESSIONS);
context.addServlet(TheServer.class, "/");
Server server = new Server(666);
server.setHandler(context);
server.start();
server.join();
}
}
这意味着您有一个扩展名为
.class
的文件,它不是类。所有课程都必须以幻数0xCAFEBABE
“类”的前四个字节读取
印刷品
<htm
根据,适当的.class
文件以幻数开头:
魔法项提供标识类文件的魔法编号
格式;它的值为0xCAFEBABE
如果使用十六进制编辑器打开任何编译的.class
文件并检查其第一个字节,则它们应该是0xCAFEBABE
1013478509
转换为有效Java类的神奇值是0xCAFEBABE
(3405691582
)的十六进制值,它是前4个字节。但是您得到的是0x3C68746D
(十六进制值1013478509
),这反过来代表ASCII字符+1,因为它可能是来自服务器的HTML错误文档。感谢您在这条荒谬、神秘的消息背后的解释。我很想知道为什么《非班级档案》被否决了。在我们的例子中,我们从页面对jar发出了一个很好的请求,但是apache重写规则是不正确的。因此,当我们询问x.jar时,服务器将x.jar放在正确的位置,重写规则试图将y.jar返回到页面。我注意到,您有6个问题,都有答案,但没有一个!请更正。嗨@AndrewThompson,非常抱歉,我已经离开stackoverflow一段时间了。刚刚解决了这个问题。谢谢你提醒我!
<htm
int magic = 1013478509;
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(magic);
System.out.println(new String(b.array()));