2016-08-02 2 views
0

저의 목적은 자바 애플리케이션 (JA)에서 서블릿 (S)으로 간단한 메시지를 보내서 브라우저 페이지에 표시하는 것입니다. 서블릿 클래스 (브라우저 페이지 새로 고침)를 실행할 때마다 메시지가 수신 될 것으로 예상됩니다.자바 애플리케이션에서 서블릿으로 메시지 보내기 및 표시

BufferedWriter를 사용하여 JA의 출력을 스트림 처리하고 BufferedReader를 수신하여 S를 수신하지만 잘못된 것으로 처리하고 있습니다.

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import java.util.*; 

public class FirstServlet extends HttpServlet { 
    private final static String _USERNAME = "username"; 

    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException , IOException { 

     PrintWriter out = res.getWriter(); 


     BufferedReader bufferedReader = null; 
     StringBuilder stringBuilder = new StringBuilder(); 
     char test = 'a'; 
     try{ 
      InputStream inputStream = req.getInputStream(); 

      if (inputStream != null) { 
       bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 

       char[] charBuffer = new char[128]; 
       int bytesRead = -1; 

       while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { 
        stringBuilder.append(charBuffer, 0, bytesRead); 
        out.println(charBuffer); //expecting this to be displayed on browser 
       } 
      } else { 
       stringBuilder.append(""); 
       out.println("0"); 
      } 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 

    } 

내가 동안 (자신의 스레드에서 실행)를 내 JA 코드를 포장 시도 (참 :

여기
try{ 
     URL url = new URL("http://(/*ip address*/:8080/FirstServlet/myfirstservlet");     
     URLConnection conn = url.openConnection();     
     conn.setDoOutput(true); 
     conn.setDoInput(true);     
     BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream())); 
     out.write("testing");    
     out.flush(); 
     out.close();   
     BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));    
     String response; 
     while((response = in.readLine()) != null) { 
      //System.out.println(response); 
     } 
     in.close(); 
     } 
     catch (MalformedURLException ex) { 
      ex.printStackTrace(); 
     } 
     catch (IOException iex) { 
      iex.printStackTrace(); 
     }   

는 S에서 코드입니다 : 여기

는 JA에서 코드입니다) 반복하지만 그것은 도움이되지 않았다. 어떤 도움을 주시면 감사하겠습니다. 감사!

+0

난 당신'사용해야 생각 HttpURLConnection'을 호출하고'setRequestMethod ("GET")'를 호출하여 적절한 HTTP 통신을 시작함으로써 서블릿 컨테이너가 알 수 있도록 서블릿의 호출 방법을 알 수 있습니다. –

+3

@Jozef : 아니요, OP는 푸시를 찾고 있지만 기본 개념이 잘못되었습니다. KS7X의 서블릿은 기본적으로 자바 애플리케이션에 응답합니다 ('response' 변수에 있음). 기대했던 것처럼 "브라우저 페이지"가 ​​아닙니다. 문제 해결에 가장 도움이되는 것은 무엇입니까? http://stackoverflow.com/q/25947790 또는 http://stackoverflow.com/q/32426674? – BalusC

+0

Thanks @ BalusC, 두 링크 모두 내 응용 프로그램을 작동시키는 데 따라야 할 새로운 길을 제시합니다. – KS7X

답변

-1

이 두 가지 오류가 있습니다 : 모든

  1. 첫째, 서블릿 반환 결과 문자열이 아닌 브라우저에서,하지만 JA 응용 프로그램입니다.
  2. conn.getOutputStream()을 사용하여 요청 메소드 유형을 "POST"값으로 암시 적으로 설정 했으므로 요청을 처리하기 위해 "doPost"메소드를 yout servlet에 구현해야합니다.

JA - 요청을 보내고 서블릿에서 응답 문자열을 반환 :

try { 

URL url = new URL("http://(/*ip address*/:8080/FirstServlet/myfirstservlet"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestMethod("POST"); 
conn.setDoOutput(true); 
conn.setDoInput(true); 


conn.setRequestProperty("Content-Type", "text/html"); 
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream())); 
out.write("testing"); 
out.flush(); 
out.close(); 

BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

String responsePart; 
StringBuilder resultString = new StringBuilder(); 

while ((responsePart = in.readLine()) != null) { 
    resultString.append(responsePart); 
} 
in.close(); 

System.out.println("Response from servlet: " + resultString); 

} catch (MalformedURLException ex) { 
    ex.printStackTrace(); 
} catch (IOException iex) { 
    iex.printStackTrace(); 
} 

S - 다시 JA에 JA 보냈습니다 반환 문자열 :

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 

    dummy(); 
    PrintWriter out = res.getWriter(); 
    BufferedReader bufferedReader = null; 
    StringBuilder stringBuilder = new StringBuilder(); 
    char test = 'a'; 

    res.setContentType("text/html"); 
    try{ 
     InputStream inputStream = req.getInputStream(); 

     if (inputStream != null) { 
      bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 

      char[] charBuffer = new char[128]; 
      int bytesRead = -1; 

      while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { 
       stringBuilder.append(charBuffer, 0, bytesRead); 

      } 

      //Return string to JA 
      out.println(stringBuilder.toString()); 

     } else { 
      stringBuilder.append(""); 
      out.println("0"); 
     } 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
}