2016-08-02 17 views
0

私の目的は、Javaアプリケーション(JA)からサーブレット(S)に単純なメッセージを送信し、ブラウザページに表示することです。私は、サーブレットクラス(ブラウザページをリフレッシュする)を実行するたびにメッセージを受け取ることを期待しています。Javaアプリケーションからサーブレットにメッセージを送信して表示する

私はBufferedWriterを使用して、JAの出力とBufferedReaderをSに送信しますが、私は間違ったことをしています。ここで

は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からのコードです:

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コード(独自のスレッドで実行)をラップしようとしている(真)ループだが、それは役に立たなかったようだ。どんな助けもありがとう。ありがとう!

+0

私は 'あなたが使用する必要があると考えていますHttpURLConnection'を呼び出すだけでなく、 'setRequestMethod(" GET ")'を呼び出して適切なHTTP通信を開始し、サーブレットコンテナが知っているようにサーブレットのどのメソッドを呼び出すかを知ることができます。 –

+3

@ジョゼフ:いいえ、OPはプッシュを探していますが、基本的なコンセプトが間違っています。 KS7Xでは、サーブレットは、基本的にJavaアプリケーション(その 'response'変数内)に応答します。期待していたように、「ブラウザのページ」ではありません。あなたの問題の解決に最も役立つのはどれですか? http://stackoverflow.com/q/25947790またはhttp://stackoverflow.com/q/32426674? – BalusC

+0

ありがとう@BalusC、これらのリンクの両方が私のアプリケーションを動作させるための新しい道を与えてくれます。 – KS7X

答えて

-1

2個のエラーがあります。

  1. まず、いないブラウザではなく、あなたのJAアプリケーション内のサーブレット・リターンの結果文字列が。
  2. conn.getOutputStream()を使用すると、リクエストメソッドのタイプが暗黙的に "POST"値に設定されるため、リクエストを処理するためにyoutサーブレットに "doPost"メソッドを実装する必要があります。

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(); 
    } 
} 
関連する問題