0

既存の動作中のJavaWebアプリケーションがあります。このアプリケーションをAndroidでネイティブにし、同じサーブレットを使い続けるつもりです。

サーバーと通信するAndroidアプリケーションを最後に実行したときは、サーブレットに次のようなものを配置していました。

PrintWriter out = response.getWriter(); 
out.print("pass"); 

そしてアンドロイドJavaクラスで私はこれをします:

String response = null;
    try {
        response = CustomHttpClient.executeHttpPost(
        "http://10.0.2.2/ProjectName/" + "LoginServlet",postParameters);
        String res = response.toString();
                    if(res.equals("pass")
                    {
                        /**do the things i want**/
                    }
               }
               catch(Exception e)
               {
                   e.printStackTrace();
               }

私のWebアプリケーションにあるサーブレットはHttpSessionを使用し、次のようなディスパッチメソッドを持っています。

HttpSession session = request.getSession();
session.setAttribute("user",user);

この:

dispatch(request, response, "/login.jsp");

Webアプリケーションが使用する既存のサーブレットにPrintWriterを追加しましたが失敗しました。そして、このエラーはlogcatで生成されました:

07-12 08:59:46.344: E/jdwp(487): >>> comparing 'jsp' to 'ers'
07-12 08:59:46.454: E/jdwp(487): >>> comparing 'jsp' to 'nfo'
07-12 08:59:46.524: E/jdwp(487): >>> comparing 'jsp' to 'o$1'
07-12 08:59:46.534: E/jdwp(487): >>> comparing 'jsp' to 'nfo'
07-12 08:59:46.534: E/jdwp(487): >>> comparing 'jsp' to 'o$1'
07-12 08:59:46.594: E/jdwp(487): >>> comparing 'jsp' to 'Key'
07-12 08:59:46.934: E/jdwp(487): >>> comparing 'jsp' to 'ver'
07-12 08:59:47.044: E/jdwp(487): >>> comparing 'jsp' to 'ile'
07-12 08:59:47.334: E/jdwp(487): >>> comparing 'jsp' to 'gin'
07-12 08:59:47.334: E/jdwp(487): >>> comparing 'jsp' to 'nfo'
07-12 08:59:47.354: E/jdwp(487): >>> comparing 'jsp' to 'ame'  
07-12 08:59:47.404: E/jdwp(487): >>> comparing 'jsp' to 'ger'
07-12 08:59:47.404: E/jdwp(487): >>> comparing 'jsp' to 'eme'
07-12 08:59:47.504: E/jdwp(487): >>> comparing 'jsp' to 'ams'

そして比較のリストは続きます。

質問:何かが足りないのですか、それとも新しいサーブレットを作成するだけですか?(私は本当にそれが2番目のオプションではないことを願っています)

編集

エラーは、テキスト文字列だけでなくjspファイルへの応答を変更するdispatchメソッドによって生成されることがわかりました。dispatchメソッドをコメントアウトすると、androidを使用してサーバーに正常にログインできます。

ただし、AndroidアプリケーションとWebアプリケーションの両方が同じ単一のサーブレットを使用してログインできるように、ディスパッチ方法とPrintWriterを維持したいと思います。とにかく私はそれをすることができますか?

4

1 に答える 1

0

いくつかの調査の後、この質問への答えはノーのようです。WebアプリケーションとAndroidアプリケーションに同じサーブレットを使用する方法はありません。2つのサーブレットの内容が95%同じであるかどうかに関係なく、新しいサーブレットを作成する必要があります。

私が現在Androidでどのログインを実行できるかを知っているいくつかの方法があります:

1)上記のout.printメソッドを使用します。PrintWriterオブジェクトを作成し、そのオブジェクトを使用してout.printを実行し、android javaクラスのresponse.toString()。equals( "expectedString")で確認します。

2)クッキーは機能する可能性があると思いましたが、そうではありませんでした。ディスパッチ方法はまだ邪魔になりました。私はまだクッキーに関してはかなり曖昧ですが、どうやらあなたはユーザー情報をクッキーに保持することができるので、ユーザーはアプリケーションの使用を通して認証されます。

上記のいずれかが間違っている場合は、回答に追加するか、修正してください。

于 2012-07-13T03:15:49.027 に答える