1

Json 形式と Gson ライブラリを使用して、単純な文字列を送信して、サーブレットとアプレット (サーブレット -> アプレットではなく、アプレット -> サーブレット) 間のデータ転送をテストしようとしています。アプレットの結果の文字列は、元のメッセージとまったく同じになるはずですが、そうではありません。代わりに 9 文字の< !DOCTYPE文字列を取得しています。

編集: サーブレットが JSON ではなく HTML Web ページを返したようですね。
edit2: NetBeans で「Run File」コマンドを使用してサーブレットを起動すると、ブラウザにメッセージが正しく表示されます。

私のコードを見てください:

サーブレット:

//begin of the servlet code extract
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
{
    PrintWriter out = response.getWriter();
    try
    {
        String action;
        action = request.getParameter("action");
        if ("Transfer".equals(action))
        {
            sendItToApplet(response);
        }
    }
    finally
    {
        out.close();
    }
}

public void sendItToApplet(HttpServletResponse response) throws IOException
{
    String messageToApplet = new String("my message from the servlet to the applet");
    String json = new Gson().toJson(messageToApplet);
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");

    Writer writer = null;
    writer = response.getWriter();
    writer.write(json);
    writer.close();
}
//end of the servlet code extract

アプレット:

//begin of the applet code extract
public void getItFromServlet() throws MalformedURLException, IOException, ClassNotFoundException
{
    URL urlServlet = new URL("http://localhost:8080/Srvlt?action=Transfer");
    URLConnection connection = urlServlet.openConnection();
    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setUseCaches(false);
    connection.setRequestProperty("Content-Type", "application/json");

    InputStream inputStream = connection.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
    JsonReader jr = new JsonReader(br);
    String retrievedString = new Gson().fromJson(jr, String.class);
    inputStream.close();
    jtextarea1.setText(retrievedString); //jtextarea is to display the received string from the servlet in the applet
}
//end of the applet code extract
4

1 に答える 1

1

問題は、コメントからわかるように、サーブレットからJSONを送信していないことです。そしてこれは...Gsonあなたがやろうとしていることに関して非常に混乱しているからです。

サーブレットでJSONシリアル化(からの出力toJson())をテストすると、...何も実行されておらず、引用符で囲まれた内容が返されるだけであることがわかりますString。JSONは、オブジェクトのテキスト表現(クラスのフィールドから値へ)に基づいており、オブジェクトでそれを実行することは確かに望ましくありませんString。デフォルトのシリアル化では、の内容String結果のJSONに入れます。

編集して追加: Gsonの一般的な使用法は次のようになります。

class MyClass {
    String message = "This is my message";
}

..。

String json = new Gson().toJson(new MyClass());

結果のJSONは次のようになります。

{"メッセージ":"これは私のメッセージです"}

于 2013-01-11T20:55:23.300 に答える