我的小程序有问题。我有一个学校项目,我要制作一款乒乓在线游戏。它离线运行良好,但当我尝试从服务器加载它时,我只是得到一个空框架,其中有红色文本。当我单击文本时,我收到消息:
不兼容的魔法值 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();
}
}
有效 Java 类的神奇价值是0xCAFEBABE
(十六进制值3405691582
),即前 4 个字节。但你得到了0x3C68746D
(十六进制值1013478509
) 依次代表 ASCII 字符<
, h
, t
and m
。要亲自查看,请运行这段代码:
int magic = 1013478509;
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(magic);
System.out.println(new String(b.array()));
这与网站提供的小程序相结合表明这是一个<html>
标签表明它是一个 HTML 文档。
所以,对小程序的 HTTP 请求显然已经actually返回一个 HTML 文档。当您将浏览器地址栏中的当前请求 URI 更改为指向小程序的 URL 时,您应该能够自己看到它。然后你会看到浏览器是什么actually当它尝试下载小程序时检索。也许它是一个具有 HTML 页面风格的简单 HTTP 404 错误文档。
要修复此问题,只需确保 URL 中<applet>
or <object>
标签是正确的。它与您在浏览器地址栏中看到的当前请求 URL 相关。您的 servlet 的工作方式非常奇怪。您正在从部署文件夹外部流式传输 HTML 文件。这表明该小程序也在部署文件夹之外,因此根本无法通过有效的 URL 访问。您应该将 HTML 页面和小程序都放在 Web 内容文件夹中。这样您就不再需要该 servlet。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)