2016-08-03 2 views
-2

Я хочу отправить строку с помощью метода POST в сервлет, чтобы он мог общаться с другим сервлет-приложением, присутствующим в другом домене. Но я получаю null в моем паровом объекте ввода.Получение значения null при использовании метода POST в сервлет?

Мой код:

String content = "10 141 nahush123 01"; 
    URL url = new URL("http://52.220.37.12:8080/servers/servers"); 
    System.out.println(url.toString()); 
    HttpURLConnection httpCon = (HttpURLConnection)url.openConnection(); 
    httpCon.setDoInput(true); 
    httpCon.setDoOutput(true); 
    httpCon.setRequestMethod("POST"); 
    httpCon.setRequestProperty("Content-Type", "text/plain;charset=UTF-8"); 

    OutputStream os = httpCon.getOutputStream(); 
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os)); 
    out.write(content); 
    //br = BufferReader(out); 
    System.out.println(httpCon.getResponseCode()); 
    System.out.println(httpCon.getResponseMessage()); 
    writer.println(httpCon.getResponseMessage()); 


    httpCon.connect(); 
    br = new BufferedReader(new InputStreamReader(httpCon.getInputStream())); 
    //reading response 
    //String resp; 
    //if(br != null){ 
     content = br.readLine(); 
    //} 
    System.out.println(content); 
    writer.println(content); 
    out.flush(); 
    writer.flush(); 
    writer.close(); 
    out.close(); 
    os.close(); 
+0

Почему вы пишете в OutputStream перед подключением? – jr593

+0

Пытается передать строку в качестве параметра. –

+0

Я пытался подключиться до выхода, но он еще не работает. –

ответ

1

Копия вставили код в мой сервлет работал прекрасный

  1. Проверьте, что вы переопределили метод doPost в сервлете

  2. Проверьте, что ваш почтовый метод работает нормально и возвращает значение, я использую плагин "DHC Rest Client" для хром. Очень крутой инструмент

  3. Попробуйте удалить строку httpCon.connect(). Это не обязательно.

    От оракула документы о методе подключения():

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

Операции getResponseMessage, getResponseCode выполняют соединение.

ОБНОВЛЕНО

Я пытался проверить с моим местным тест URL и он работает. Затем я попытался с вашим URL, и он не работает.

Перед потоком ввода необходимо очистить выходной поток.

Этот код работает и возвращается «0 # 5 # 26 # Температура # Living_Room # 555555581 # 0 + 0 # 7 # 0 # Room1 # Master_bedroom # 555555581 # 1 + 1 # 7 # 0 # Door1 # Living_Room # 555555581 # 2 + 1 # 6 # 0 # # бронированая Living_Room # 555555581 # 2 + 0 # 6 # 0 # doorback # балкон # 555555581 # 2 +»

PrintWriter writer = res.getWriter(); 
String content = "10 141 nahush123 01"; 
URL url = new URL("http://52.220.37.12:8080/servers/servers"); 
System.out.println(url.toString()); 
HttpURLConnection httpCon = (HttpURLConnection)url.openConnection(); 
httpCon.setDoInput(true); 
httpCon.setDoOutput(true); 
httpCon.setRequestMethod("POST"); 
httpCon.setRequestProperty("Content-Type", "text/plain;charset=UTF-8"); 

OutputStream os = httpCon.getOutputStream(); 
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os)); 
out.write(content); 
out.flush(); 
//br = BufferReader(out); 
System.out.println(httpCon.getResponseCode()); 
System.out.println(httpCon.getResponseMessage()); 
writer.println(httpCon.getResponseMessage()); 


//httpCon.connect(); 
BufferedReader br = new BufferedReader(new InputStreamReader(httpCon.getInputStream())); 
//reading response 
//String resp; 
//if(br != null){ 
content = br.readLine(); 
//} 
System.out.println(content); 
writer.println(content); 
writer.flush(); 
writer.close(); 
out.close(); 
os.close(); 
+0

Можете ли вы поделиться тем, какой ответ вы получили? Я ищу строку в качестве текста ответа, и она не будет содержать ОК. Текст ответа должен быть 0 # 7 # 0 # Room1 # Master_bedroom # 555555581 # 1 + 1 # 7 # 0 # Door1 # Living_Room # 555555581 # 2 + 0 # 5 # 26 # Температура # Living_Room # 555555581 # 0 + 1 # 6 # 0 # frontdoor # Living_Room # 555555581 # 2 + 0 # 6 # 0 # doorback # Балкон # 555555581 # 2 + –

+0

@NahushSarje Я обновил свой ответ. Не могу вставить код здесь – Azat

+0

Спасибо Азат, его работа сейчас. –

0

Попробуйте с функцией getparameter() в сервлет

+0

Я пытаюсь отправить эту строку, указанную в переменной содержимого. И взамен я получу только строку.Поэтому я не думаю, что getparameter() будет полезен. –

0

этот метод с прохода параметра строки вызова:

public String postData(String reqStr) { 
ObjectOutputStream objOS = null; 
ObjectInputStream objIS = null; 
HttpURLConnection servletCon = null; 
try { 
if (reqStr != null) { 
Thread.sleep(1000); 
objOS.writeObject(reqStr); 
} else { 
throw new Exception("request is null."); 
} 
} catch (Exception ex) { 
     logger.error("Failed to send request to server.", ex); 
    } 
    String response = null; 
    try { 
     objIS = new ObjectInputStream(servletCon.getInputStream()); 
     response = (String) objIS.readObject(); 
    } catch (Exception ex) { 
     logger.error("Failed to get response from server.", ex); 
     response = null; 
    } 
    return response; 
} 

Инициализация соединения, как вы, но позвонив по-разному :

public void initializeUrlConnection(String servletURL, String contentType, String method) { 

    try { 

     logger.debug("Servlet URL " + servletURL); 
     url = new URL(servletURL); 
     servletCon = (HttpURLConnection) url.openConnection(); 
     servletCon.setUseCaches(false); 
     servletCon.setDefaultUseCaches(false); 
     servletCon.setDoInput(true); 
     servletCon.setDoOutput(true); 
     servletCon.setRequestProperty("Content-Type", contentType); 
     servletCon.setRequestMethod(method); 
     objOS = new ObjectOutputStream(servletCon.getOutputStream()); 
    } catch (IOException ex) { 

     logger.error("Failed to initialize Http Connection.", ex); 
    } 
} 

Прежде вызова инициализации метод соединения с нужным параметром:

Object.initializeUrlConnection(url, contentType,method); 

затем называют posDataMethod с струнной параметром/JSon:

Object.postData(str); 
+0

HI Vimal, где URL? –

+0

Надеюсь, теперь вы поймете больше. –

Смежные вопросы