EOFException при отправке данных из апплета на сервлет

Я пытаюсь получить простые сведения о пользователе (имя, номер телефона, пол (поле параметров)) в апплете и отобразить подробности в JSP. Я помещаю все три детали в HashMap и отправляю их в выходной поток. Код апплета выглядит следующим образом.

    try 
    {
        userUrl = "http://localhost:8080/AppletTest/display.jsp";

       /* In the web.xml file I have mapped display.jsp to the Servlet */

        testServlet = new URL(userUrl.toString());
        servletConnection = testServlet.openConnection();

        servletConnection.setDoOutput(true);
        servletConnection.setRequestProperty("Content-Type","application/octet-stream");

        ObjectOutputStream oos1 = new ObjectOutputStream(servletConnection.getOutputStream());

        /* DataMap is the HashMap Containing values */

        oos1.writeObject(dataMap);
        oos1.flush();
        oos1.close();

        //  Thread.currentThread().sleep(5000);

    }
    catch(Exception ie)
    {
        ie.printStackTrace();
    }

    // Finally call servlet by going to that page.

    getAppletContext().showDocument(userUrl, "_self");

Находясь на сервлете, я просто получаю HashMap и пересылаю его на страницу jsp для отображения.

    try
    {
        System.out.println("In Servlet");

        ObjectInputStream inputFromApplet = new ObjectInputStream(request.getInputStream());
        HashMap<String,String> receievedData = (HashMap<String,String>) inputFromApplet.readObject();

        request.setAttribute("dataMap",receievedData);
        request.getRequestDispatcher("display1.jsp").forward(request, response);

        inputFromApplet.close();
    }
    catch (ClassNotFoundException e)
    {
        e.printStackTrace();
    }

Как задано в комментариях в Вопросе здесь, Распечатывается Sysout("In Servlet"). Но выбрасывается исключение

In Servlet        
SEVERE: Servlet.service() for servlet jsp threw exception java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream. java:2749)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
at org.apache.jsp.display1_jsp._jspService(display1_jsp.java:71)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)

Что я делаю неправильно. Пожалуйста помоги.


person anthoon    schedule 08.08.2011    source источник


Ответы (2)


Если я правильно понял, вы:

  1. отправка запроса сервлету
  2. чтение из входного потока e этого вызова
  3. отправка jsp в качестве ответа на ЭТОТ вызов
  4. перенаправление пользователя из апплета на тот же сервлет
  5. это вызывает ВТОРОЙ запрос без какой-либо сериализации в нем
  6. сервлет терпит неудачу на этом втором запросе

Это, к сожалению, не может работать. Вы должны использовать два сервлета (или один и тот же с необязательным параметром) для обработки двух запросов, один будет читать из входного потока и записывать в сеанс, а второй будет извлекаться из сеанса и отображаться в jsp.

person Simone Gianni    schedule 09.08.2011
comment
Спасибо Симоне Джанни. Да, это швы, чтобы быть проблемой. Но я не понимаю, как использовать два сервлета (или использовать один сервлет и дополнительный параметр). Было бы очень полезно, если бы вы могли уточнить больше. - person anthoon; 10.08.2011

Я подозреваю, что апплет генерирует исключение, и вы еще не обнаружили его в консоли Java.

person user207421    schedule 09.08.2011
comment
Я также проверил консоль Java, и апплет не выдает никаких исключений. - person anthoon; 09.08.2011