2012-11-29 5 views
1

자바 서블릿에서 사용할 수있는 ServletInputStreamServletOutputStream의 사용과 관련된 질문이 있습니다. 먼저 많은 도움이 필요한 컨텍스트를 알려 드리겠습니다.입/출력 스트림 자바 서블릿

과제 저는 Google 애플리케이션 엔진에서 작업 대기열을 구현하는 데 대한 호출을 진행하고 있습니다. 앱 엔진에 추가 할 작업과 적절한 작업자를 불러올 수있었습니다. 그러나 직렬화 가능한 객체의 ArrayList<>을 작업자의 doPost() 메소드에 전달하는 방법을 파악하기 위해 애 쓰고 있습니다. 보편적 인 방법은 분명히 서블릿 간의 통신을 처리하기 위해 HTTP 요청 및 응답 객체의 입력 및 출력 스트림을 사용하는 것입니다. 나는 광범위하게 검색해 보았지만 출력 스트림으로 전송 용 arraylist를 준비하고 첫 번째 서블릿의 응답에 추가 한 다음 두 번째 서블릿의 요청에서이를 검색하는 방법에 대한 명확한 예를 찾을 수 없었습니다. 마침내 그것을 다시 arrylist로 변환하여 doPost() 코드의 코드로 사용합니다. 그래서 그것은 기본적으로 제 질문입니다. 자바에 대한 나의 미숙함 때문에, 나 혼자서 모든 것을 이해하기가 어렵고, 내 머리를 감싸기 위해 고심하고있다.

내가 문제의 노동자의 doPost() 방법을 게시합니다, 좀 더 명확히하기 위해 :

protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException 
{ 
    try 
    { 
     ArrayList<Quote> qs = /*Here the list needs to be read in.*/ null; 

     EntityManager manager = EMF.get().createEntityManager(); 
     CarRentalModel.get().confirmQuotes(qs, manager); 
    } 
    catch (ReservationException e) 
    { 
    }  
} 

어떤 도움을 주시면 감사하겠습니다.

그것은 BalusC의 조언을 따라 가치가 사전에

케빈

+4

서블릿보다는 HTTP보다 새로운 것으로 보입니다. 클라이언트가 정확히 무엇입니까? 마치 HTML 페이지가 아니라 웹 서비스를 개발하려고하는 것처럼 들립니다. 입력 형식으로 XML 또는 JSON으로 더 재사용 가능한 것을 고려해 본 적이 있습니까? Java 직렬화에서는 Java 기반 클라이언트로 제한됩니다. – BalusC

+0

글쎄요, 나는 실제로 HTTP를 처음 접했고 실제로는 매우 간단한 웹 서비스입니다. 그러나 주어진 방법론을 고수해야하며 할당 매개 변수를 기반으로 만 구현할 수 있습니다. 그러나 나는 교육적인 이유로 순전히 귀하의 제안을 검토 할 것입니다. –

답변

3

을 주셔서 감사합니다. 간단하고 빠른 솔루션을 찾고 있다면, 자바의 직렬화를 사용하면된다.

doPost() 메소드에서 기본 서블릿 입력 스트림에서 데이터를 읽고 객체를 직렬화하는 ObjectInputStream을 만들 수있다. of) 데이터.

ServletInputStream sis = req.getInputStream(); 
ObjectInputStream ois = new ObjectInputStream(sis); 

ArrayList<Quote> qs = (ArrayList<Quote>) ois.readObject(); 

ObjectOutputStream 및 writeObject() 메소드를 사용하여 반대쪽에 객체를 작성합니다. 이 작업이 작동하지 않는 경우 나머지 버퍼링 된 데이터를 보내도록 쓰기 작업을 완료 한 후 출력 스트림을 .flush() 또는 .close() 해보십시오.

+0

아, 그렇습니다. 구글이 분출하는 것보다 훨씬 의미가 있습니다. 도움의 손길을 가져 주셔서 대단히 감사합니다. –