Java с использованием несколько раз PostMethod


Я нашел пример на Java PostMethod здесь.

Но я хочу разместить несколько раз с помощью цикла for. Я сделал ее такой.


import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class PostMethodExample {

  public static void main(String args[]) {

    HttpClient client = new HttpClient();
    client.getParams().setParameter("http.useragent", "Test Client");

    BufferedReader br = null;

    PostMethod method = new PostMethod("http://search.yahoo.com/search");
    method.addParameter("p", "\"java2s\"");

    try{
            String[] parameters = { "Google", "Yahoo", "MSN" };

            for (String s in parameters){
                int returnCode = client.executeMethod(method);
                method.addParameter("p", s);
                if(returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
                    System.err.println("The Post method is not implemented by this URI");
                    // still consume the response body
                    method.getResponseBodyAsString();
                } else {
                    br = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));
                    String readLine;
                    while(((readLine = br.readLine()) != null)) {
                        System.err.println(readLine);
                    }
                }
                method.releaseConnection();
                method = new PostMethod("http://search.yahoo.com/search");
            }
    } catch (Exception e) {
      System.err.println(e);
    } finally {
      method.releaseConnection();
      if(br != null) try { br.close(); } catch (Exception fe) {}
    }
  }
}

Я изменил код только внутри попробовать заблокировать. Я не думаю, что это лучший способ. Помогите мне улучшить этот код.



3646
5
задан 7 июня 2011 в 09:06 Источник Поделиться
Комментарии
2 ответа

Избегайте ловить все исключения

Не используйте поймать (исключение E) , как это также будет ловить исключение NullPointerException, ArrayIndexOutOfBoundsException и много других. Перехватывайте только те исключения, нужно поймать, как исключение IOException. Он сказал, что нужно быть конкретным в throws пункт, но что касается улова , а также.

И как говорится в комментарии к вашему вопросу, система.подстраховаться.код println(е) не дает полной информации об исключении. Если у вас нет регистратора системы поблизости, которые могут обрабатывать исключения полностью, по крайней мере, использовать электронные.печатные();. Однако рекомендуется, что вы должны справиться и исключения, и не только отчет об этом. Например, показывая более точное сообщение об ошибке для пользователя.

Кроме того, я бы сказал, что ваши строки если(БР != нуль) попробуйте { БР.закрыть(); } поймать (исключение ИП) {} должны быть на несколько строк. Даже если это увеличивает количество строк, это улучшает читабельность.

if (br != null) {
try {
br.close();
}
catch (Exception fe) {
}
}

6
ответ дан 21 ноября 2013 в 02:11 Источник Поделиться

Я думаю, что этот шаблон создания экземпляра, запустив его через петлю, а в конце цикла повторной его инициализации, это плохо. Этот случай является хорошим примером того, что может пойти не так... потому что вы ввели ошибку в результате

В первый раз через петлю свой способ настраивается как:

PostMethod method = new PostMethod("http://search.yahoo.com/search");
method.addParameter("p", "\"java2s\"");

но за оставшееся цикл итераций метод - это просто:

method = new PostMethod("http://search.yahoo.com/search");

Аналогичным образом, еще одна ошибка, которая имеет 'холод' (закралась?) в смене " п " параметр после запроса, размещенной....

int returnCode = client.executeMethod(method);
method.addParameter("p", s);

Нет никаких причин, в таком случае, почему вы не можете инициализировать метод внутри цикла, имеет больше смысла, и устранить ошибки....:

for (String s in parameters){

final PostMethod method = new PostMethod("http://search.yahoo.com/search");
method.addParameter("p", s);
int returnCode = client.executeMethod(method);

....

method.releaseConnection();
}

5
ответ дан 21 ноября 2013 в 02:11 Источник Поделиться