2011-08-08 4 views
1

애플릿에 간단한 사용자 정보 (이름, 전화 번호, 성별 (옵션 상자))를 가져오고 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 페이지로 전달합니다. [질문 here ("서블릿에서")은 SYSOUT에 의견 요청으로

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

인쇄됩니다. 하지만 예외가 던졌습니다.

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) 

내가 뭘 잘못하고 있니? 도와주세요.

답변

0

당신은 : 그 전화

  • 리디렉션에 대한 응답으로 JSP를 전송하는 전화
  • 의 전자 입력 스트림에서 읽기 서블릿
  • 에 요청을 보내는

    1. 애플릿에서 동일한 서블릿으로의 사용자
    2. 이것은 아무 것도 직렬화되지 않은 두 번째 요청을 발생시킵니다.
    3. serv 이 두 번째 요청에 실패하게하십시오.

    이 불행하게도 canno는 작동합니다. 두 개의 요청을 처리하기 위해 두 개의 서블릿 (또는 선택적 매개 변수가있는 동일한 서블릿)을 사용해야한다. 하나는 입력 스트림에서 읽고 두 번째 서블릿은 세션에서 다시 검색하고 JSP로 표시한다.

  • +0

    감사합니다. SimoneGianni. 그렇습니다. 솔기가 문제가됩니다. 하지만 두 서블릿을 사용하는 방법 (또는 하나의 서블릿과 선택적 매개 변수를 사용하는 방법)에 대해서는 명확하지 않습니다. 더 자세히 설명해 주시면 정말 도움이 될 것입니다. – anthoon

    0

    애플릿에 의해 예외가 발생하고 아직 Java 콘솔에서 예외가 감지되지 않은 것 같습니다. 만약 내가 제대로 이해하고

    +0

    Java 콘솔도 검사했으며 애플릿도 예외를 throw하지 않습니다. – anthoon