2013-08-10 2 views
-1

Я пытаюсь отправить String на сервер (работает на tomcat) и вернуть его в String. Клиент отправляет строку, сервер ее получает, но когда клиент возвращает ее, String имеет значение NULL.doGet и doPost String = null issue

doGet() должен установить строку в = вход от клиента. Но doPost() отправляет String in = null.

Почему? Я бы предположил, что doGet() работает до doPost(), потому что он сначала вызывается клиентом.

Сервер:

private String in = null; 

public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException,ServletException{ 
    try{ 
    ServletInputStream is = request.getInputStream(); 
    ObjectInputStream ois = new ObjectInputStream(is); 

    in = (String)ois.readObject(); 

    is.close(); 
    ois.close(); 
    }catch(Exception e){ 

    } 
} 

public void doPost(HttpServletRequest request, HttpServletResponse response)throws IOException,ServletException{ 
    try{ 
    ServletOutputStream os = response.getOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(os); 

    oos.writeObject(in); 
    oos.flush(); 

    os.close(); 
    oos.close(); 
    }catch(Exception e){ 

    } 
} 

Клиент:

URLConnection c = new URL("***********").openConnection(); 
c.setDoInput(true); 
c.setDoOutput(true); 

OutputStream os = c.getOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(os); 

oos.writeObject("This is the send"); 
oos.flush(); 

InputStream is = c.getInputStream(); 
ObjectInputStream ois = new ObjectInputStream(is); 
System.out.println("return: "+ois.readObject()); 

ois.close(); 
is.close(); 
oos.close(); 
os.close(); 
+2

'doPost' не работает на * все *, если вы фактически ничего не публикуете. И я немного смущен; что конкретно вы * стараетесь делать? Если вы пишете сервлет, используйте HTTP-соединения. Если вы хотите перетасовать объекты назад и вперед, откройте сокет. –

+0

is doPost не получает вызов, когда клиент запрашивает InputStream? – CptRayMar

+0

Я только тестирую сервер на этом этапе. Я хочу отправить сервер sql в виде строки и поговорить с базой данных сервера, а затем вернуть результат. – CptRayMar

ответ

0

Если вы хотите, чтобы прочитать произвольную строку от клиента (или отправить его обратно), то вы просто хотите читать и писать строки непосредственно: нет необходимости использовать ObjectInputStream и ObjectOutputStream. Как это:

public void doPost(...) { 
    BufferedReader in = new BufferedReader(request.getReader()); 
    String s = in.readline(); 
    ... 
} 

Если вы хотите, чтобы иметь возможность повторить строку обратно клиенту (а также защитить данные от других), то вы должны использовать HttpSession. Если предполагается, что это какой-то «эхо-сервис», в котором вы хотите, чтобы какой-либо клиент мог установить строковое значение, а затем все клиенты получают один и тот же ответ, тогда вы не должны использовать HttpSession и вместо этого использовать ссылку с расширенным экземпляром как вы уже выше.

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