1

こんにちは、HttpClient を使用して Http Request を送信しています。サーブレットを呼び出すことはできますが、戻り405 status code.doPost method not allowedます。同じステータスコードも取得しようとしました。

また、応答でヘッダーを取得できません。リクエストをリクエストに転送または含める必要がありますか。

//HTTP リクエストを送信するコード

public void perform(Date now, long remainingRepetitions)
    {
        log.info("Starting the Job " + now);

        System.out.println("Before try 2");
        try {

            HttpResponse response;
            while(true){
                HttpClient client = new DefaultHttpClient();
                System.out.println("Http Client instantiated");
                HttpPost request = new HttpPost("http://localhost:8080/Servlet");
                System.out.println("Post Request created");
                response = client.execute(request);
                System.out.println("Http Status Code  = " + response.getStatusLine().getStatusCode() );
                Header headers[] = response.getAllHeaders();
                for(Header h:headers){
                    System.out.println("New" +h.getName() + ": " + h.getValue());
                }

                if(response.getStatusLine().getStatusCode()==200 || response.getStatusLine().getStatusCode()== 405){
                    if(response.getLastHeader("JobStatus").equals("Success"))
                    {
                        break;
                    }
                }
                client.getConnectionManager().shutdown();

                Thread.sleep(10000);
            }

        } catch (ClientProtocolException e) {
            log.info(e);
        } catch (IOException e) {
            log.info(e);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            log.info("Exception Occured");
            e.printStackTrace();
        }finally{
            System.out.println("finally");
        }

// サーブレット

private void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        System.out.println("Inside ProcessReqest");
        try{
             //some method call
             resp.addHeader("JobStatus", "Success");

        }catch(Exception e){
             resp.addHeader("JobStatus", "Failure");
        }
    }
4

5 に答える 5

0

これがクライアントとサーブレットの両方からのコードである場合、メソッドはプライベートであるため、サーブレットはリクエストdoPostに応答しません。POSTメソッドをdoPost公開します。

于 2013-03-29T07:01:43.150 に答える
0

postメソッドのアクセス修飾子を から変更する必要があると思いますprivate。これが、表示されない理由です。修飾子をまたはのいずれかに変更しprotectedますpublic

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    System.out.println("Inside ProcessReqest");
    try{
         //some method call
         resp.addHeader("JobStatus", "Success");

    }catch(Exception e){
         resp.addHeader("JobStatus", "Failure");
    }
}
于 2013-03-29T07:01:57.723 に答える
0

サーバーが POST メソッドをサポートしていないようです。代わりに HttpGet リクエストを使用してみてください。

POST はサーバーにデータを送信するために使用され、GET は情報を要求するために使用されます。あなたのコードはデータを送信しようとしていないので、HttpGet が必要だと思います。

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/methods/HttpGet.html

于 2013-03-29T07:00:16.880 に答える
0

doGet().サーブレットはメソッドを呼び出すときにのみ実装すると思いますがPOST、どちらかdoPost()またはservice()メソッドをサーブレットで実装する必要があります。

デフォルトでは、サーブレットのサービス メソッドが呼び出されると、対応するdoXXX()メソッドが呼び出されます。そのメソッドが HttpServlet のサブクラスによって実装されていない場合、HttpServlet のdoXXX()メソッドは を返します405 Method Not Supported status code

HttpServlet の doPost() メソッドのスニペットは以下のとおりです。

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

         String protocol = req.getProtocol();
         String msg = lStrings.getString("http.method_put_not_supported");
         if (protocol.endsWith("1.1")) {
             resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
         } else {
             resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
         }

あなたの場合、doPost()メソッドをプライベートとして宣言したと思います。アクセスは非公開です。保護されているように変更して試してください。

サブクラスのアクセスが弱いのは正しくありません。通常、そのサーブレットをコンパイルすると、コンパイラはエラーを出すはずです。

于 2013-03-29T06:59:15.507 に答える
0

問題は、ヘッダーが追加されたことです

HttpServletResponse.setHeader(...)

また

HttpServletResponse.addtHeader(...)

「HTTPヘッダー」ではなく、「サーブレット応答ヘッダー」です。

その中には http ヘッダーも含まれていますが、設定したものはクライアントによって一緒に受信されません。

ヘッダーの代わりに URL パラメーターを使用することをお勧めします。

于 2013-09-18T09:50:08.840 に答える