2013-03-21 4 views
1

Я использовал следующий код в моем клиенте:Как получить доступ к контенту на сервере?

HttpPost post = new HttpPost(url); 
post.setEntity(new ByteArrayEntity(myString.getBytes("UTF8"))); 
HttpResponse response = this.execute(post); 

Теперь я хотел бы, чтобы получить доступ к строке на стороне сервера. Метод рукоятки выглядит следующим образом:

public void handle(String target, Request baseRequest, HttpServletRequest request, 
HttpServletResponse response) throws IOException, ServletException { ... } 

Запрос позволяет мне получить доступ к длине и типу контента, но не самому содержимому. Любые указатели?

Я использую java как pl и встроенные классы из javax.servlet.

+0

Возможно, вы захотите рассказать нам, какой (веб-сервер) вы используете, а также язык программирования/рамки. –

ответ

0

По какой-то причине вы задали строку как единственное тело запроса HTTP, а не как параметр запроса. Итак, чтобы получить его, вам нужно прочитать весь HTTP-запрос. Это в сервлет, доступного по

InputStream input = request.getInputStream(); 
// Read it into a String the usual way (using UTF-8). 

Обратите внимание, что это будет возвращать пустой поток, когда он уже был прочитан заранее, например, предварительно позвонив по телефону getParameter() по тому же запросу, который неявно разобрал бы тело запроса POST.

Более разумный подход был бы отправить его как обычный URL закодирован параметр запроса следующим образом (так же, как в той HTML форма по умолчанию делает)

List<NameValuePair> params = new ArrayList<NameValuePair>(); 
params.add(new BasicNameValuePair("myString", myString)); 
post.setEntity(new UrlEncodedFormEntity(params)); 

, так что вы можете в сервлете просто сделать

String myString = request.getParameter("myString"); 
// ... 
+0

Спасибо, решает мою проблему. – user2196234

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