【问题标题】:JAVA Applet embedded in HTML hangs in the middle of an operation嵌入在 HTML 中的 JAVA Applet 在操作过程中挂起
【发布时间】:2011-11-21 12:11:12
【问题描述】:

我在一台机器上运行了一个 Web 服务,我想通过 Applet 访问该 Web 服务。一个独立的 Applet 运行良好,没有任何问题。但是当我将该小程序嵌入到一个 html 文件中时,真正的问题就开始了。由于某些客户端限制,我需要将小程序嵌入到 Html 文件中。当我打开 html 页面但不访问 Web 服务时,小程序会启动。

我知道 Applet 必须经过签名才能访问所有可用的资源。我已经签署了罐子,但它仍然挂起。为了解决这个问题,我想监视从客户端到运行 Web 服务的服务器的网络流量。我发现了一些不同之处..

当我运行独立的 JAVA 小程序(JAR 文件)时:它调用确切的 Web 服务链接并返回响应。另一个需要注意的最重要的事情是,它调用 javaw.exe 和完美的 POST 请求(如下所示的第三个请求)。

javaw.exe   172.22.1.98 SANKET-BA4C8C90     TCP TCP:Flags=...A..S., SrcPort=HTTP Alternate(8080), DstPort=3868, PayloadLen=0, Seq=271218130, Ack=957649749, Win=65535 ( Scale factor not supported ) = 65535    {TCP:1, IPv4:15}

javaw.exe   SANKET-BA4C8C90     172.22.1.98 TCP TCP:Flags=...A...., SrcPort=3868, DstPort=HTTP Alternate(8080), PayloadLen=0, Seq=957649749, Ack=271218131, Win=65535 (scale factor 0x0) = 65535    {TCP:1, IPv4:15}

javaw.exe   SANKET-BA4C8C90     172.22.1.98 HTTP    HTTP:Request, POST /LEDLabServer/services/Blink     {HTTP:2, TCP:1, IPv4:15}

javaw.exe   172.22.1.98 SANKET-BA4C8C90     TCP TCP:Flags=...A...., SrcPort=HTTP Alternate(8080), DstPort=3868, PayloadLen=0, Seq=271218131, Ack=957650035, Win=65249 (scale factor 0x0) = 65249    {TCP:1, IPv4:15}

javaw.exe   SANKET-BA4C8C90     172.22.1.98 SOAP    SOAP:xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   {HTTP:2, TCP:1, IPv4:15}

javaw.exe   172.22.1.98 SANKET-BA4C8C90     SOAP    SOAP:xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   {HTTP:2, TCP:1, IPv4:15}

javaw.exe   172.22.1.98 SANKET-BA4C8C90     TCP TCP:Flags=...A...F, SrcPort=HTTP Alternate(8080), DstPort=3868, PayloadLen=0, Seq=271218757, Ack=957650351, Win=64933 (scale factor 0x0) = 64933    {TCP:1, IPv4:15}

javaw.exe   SANKET-BA4C8C90     172.22.1.98 TCP TCP:Flags=...A...., SrcPort=3868, DstPort=HTTP Alternate(8080), PayloadLen=0, Seq=957650351, Ack=271218758, Win=64909 (scale factor 0x0) = 64909    {TCP:1, IPv4:15}

javaw.exe   SANKET-BA4C8C90     172.22.1.98 TCP TCP:Flags=...A...F, SrcPort=3868, DstPort=HTTP Alternate(8080), PayloadLen=0, Seq=957650351, Ack=271218758, Win=64909 (scale factor 0x0) = 64909    {TCP:1, IPv4:15}

当我运行嵌入在 HTML 文件中的同一个小程序时:我得到不同的结果,其中它调用 java.exe 并调用 Get 与 Web 服务的不正确链接(指向 serviceexception.class 而不是 POST /LEDLabServer/services/Blink )

java.exe    SANKET-BA4C8C90     172.22.1.98 HTTP    HTTP:Request, GET /LEDLabServer/sampleBlinkProxy/javax/xml/rpc/ServiceException.class   {HTTP:110, TCP:109, IPv4:15}

java.exe    172.22.1.98 SANKET-BA4C8C90     HTTP    HTTP:Response, HTTP/1.1, Status: Not found, URL: /LEDLabServer/sampleBlinkProxy/javax/xml/rpc/ServiceException.class    {HTTP:110, TCP:109, IPv4:15}

java.exe    SANKET-BA4C8C90     172.22.1.98 TCP TCP:Flags=...A...., SrcPort=3899, DstPort=HTTP Alternate(8080), PayloadLen=0, Seq=3129701517, Ack=3474193866, Win=64243 (scale factor 0x0) = 64243  {TCP:109, IPv4:15}
java.exe    SANKET-BA4C8C90     172.22.1.98 HTTP    HTTP:Request, GET /LEDLabServer/sampleBlinkProxy/javax/xml/rpc/ServiceException.class   {HTTP:110, TCP:109, IPv4:15}

java.exe    172.22.1.98 SANKET-BA4C8C90     HTTP    HTTP:Response, HTTP/1.1, Status: Not found, URL: /LEDLabServer/sampleBlinkProxy/javax/xml/rpc/ServiceException.class    {HTTP:110, TCP:109, IPv4:15}

java.exe    SANKET-BA4C8C90     172.22.1.98 TCP TCP:Flags=...A...., SrcPort=3899, DstPort=HTTP Alternate(8080), PayloadLen=0, Seq=3129701767, Ack=3474195158, Win=65535 (scale factor 0x0) = 65535  {TCP:109, IPv4:15}

java.exe    SANKET-BA4C8C90     172.22.1.98 TCP TCP:Flags=...A...F, SrcPort=3899, DstPort=HTTP Alternate(8080), PayloadLen=0, Seq=3129701767, Ack=3474195158, Win=65535 (scale factor 0x0) = 65535  {TCP:109, IPv4:15}

java.exe    172.22.1.98 SANKET-BA4C8C90     TCP TCP:Flags=...A...., SrcPort=HTTP Alternate(8080), DstPort=3899, PayloadLen=0, Seq=3474195158, Ack=3129701768, Win=64535 (scale factor 0x0) = 64535  {TCP:109, IPv4:15}

java.exe    172.22.1.98 SANKET-BA4C8C90     TCP TCP:Flags=...A...F, SrcPort=HTTP Alternate(8080), DstPort=3899, PayloadLen=0, Seq=3474195158, Ack=3129701768, Win=64535 (scale factor 0x0) = 64535  {TCP:109, IPv4:15}

java.exe    SANKET-BA4C8C90     172.22.1.98 TCP TCP:Flags=...A...., SrcPort=3899, DstPort=HTTP Alternate(8080), PayloadLen=0, Seq=3129701768, Ack=3474195159, Win=65535 (scale factor 0x0) = 65535  {TCP:109, IPv4:15}

PS:我正在将 JAXRPC 用于 Web 服务。

有人可以帮我吗?

【问题讨论】:

  • 与 JavaScript 类似,存在一个用于客户端的 Java 控制台。有什么(有用的)信息吗?

标签: java web-services applet jax-ws


【解决方案1】:

从您的日志中问题很明显:

HTTP:响应,HTTP/1.1,状态:未找到,URL:/LEDLabServer/sampleBlinkProxy/javax/xml/rpc/ServiceException.class

您没有将类文件安装在正确的位置,因此浏览器找不到它们。

【讨论】:

  • Applet 的相同代码工作得非常好,从第一个日志中可以看出。但是当applet嵌入到一个html页面时,同一个applet会直接调用/LEDLabServer/sampleBlinkProxy/javax/xml/rpc/ServiceException.class并带有get请求(这应该是POST /LEDLabServer/services/Blink)。我已经使用 JAX-RPC 在 Eclipse-JEE-Indigo 中生成了 Web 服务代理。
  • 我们都是对的:当您使用appletviewer 时,该工具确保可以加载类。当您通过网络服务器运行它时,必须确保浏览器插件可以下载这些类。错误消息说您将类复制到错误的位置(或根本没有复制它们)。
  • 是的,我删除了 ServiceException 类的错误。现在,当我打开浏览器的 java 控制台时,出现以下错误。事件调度期间发生异常:java.lang.ClassCircularityError: javax/xml/rpc/ServiceException at ledApplet.LEDApplet.paint(LEDApplet.java:109) at sun.awt.RepaintArea.paintComponent(Unknown Source).... 发生异常在事件调度期间:java.lang.ClassCircularityError: javax/xml/rpc/ServiceException at ledApplet.LEDApplet.paint(LEDApplet.java:109) at sun.awt.RepaintArea.paintComponent(Unknown Source)...
  • 这是一个不同的问题。请在新问题中发布LEDApplet的相关代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多