当前位置:  开发笔记 > 编程语言 > 正文

使用服务器"不兼容的魔法值1013478509"启动时,Java applet失败

如何解决《使用服务器"不兼容的魔法值1013478509"启动时,Javaapplet失败》经验,为你挑选了1个好方法。

我的applet有问题.我有一个学校项目,我应该做一个乒乓球在线游戏.它运行良好离线,但当我尝试从服务器加载它时,我只得到一个带有红色文本的空框架.当我点击文本时,我收到消息:

不相容的魔法值1013478509

我正在使用jetty-all-8.1.8.v20121106.jar和servlet-api-3.0.jar

启动服务器的类如下所示:

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();
    }
}

BalusC.. 10

有效Java类的神奇值是0xCAFEBABE(十六进制值3405691582),即前4个字节.但是,你得到0x3C68746D(的十六进制值1013478509),而这又代表了ASCII字符<,h,tm.要自己查看,请运行以下代码:

int magic = 1013478509;
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(magic);
System.out.println(new String(b.array()));

这与网站提供的applet结合使用表明它是标签的开头,而标签反过来表明它是HTML文档.

因此,对applet的HTTP请求显然实际上返回了一个HTML文档.当您将浏览器地址栏中的当前请求URI更改为指向applet的URL时,您应该能够自己查看.然后,您将看到浏览器在尝试下载applet时实际检索到的内容.也许这是HTML页面风格的简单HTTP 404错误文档.

要解决此问题,请确保标记中的网址正确无误.它与您在浏览器地址栏中看到的当前请求URL相关.servlet的工作方式很奇怪.您正在从deploy文件夹外部流式传输HTML文件.这表明applet也在deploy文件夹之外,因此根本无法通过有效的URL访问.您应该将HTML页面和小程序放在Web内容文件夹中.这样你就不再需要那个servlet了.



1> BalusC..:

有效Java类的神奇值是0xCAFEBABE(十六进制值3405691582),即前4个字节.但是,你得到0x3C68746D(的十六进制值1013478509),而这又代表了ASCII字符<,h,tm.要自己查看,请运行以下代码:

int magic = 1013478509;
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(magic);
System.out.println(new String(b.array()));

这与网站提供的applet结合使用表明它是标签的开头,而标签反过来表明它是HTML文档.

因此,对applet的HTTP请求显然实际上返回了一个HTML文档.当您将浏览器地址栏中的当前请求URI更改为指向applet的URL时,您应该能够自己查看.然后,您将看到浏览器在尝试下载applet时实际检索到的内容.也许这是HTML页面风格的简单HTTP 404错误文档.

要解决此问题,请确保标记中的网址正确无误.它与您在浏览器地址栏中看到的当前请求URL相关.servlet的工作方式很奇怪.您正在从deploy文件夹外部流式传输HTML文件.这表明applet也在deploy文件夹之外,因此根本无法通过有效的URL访问.您应该将HTML页面和小程序放在Web内容文件夹中.这样你就不再需要那个servlet了.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有