Вызов сервлета из приложения Java - PullRequest
5 голосов
/ 04 декабря 2010

Я хочу вызвать сервлет из приложения Java. Проблема в том, что вызов, похоже, не доходит до сервлета. Я не получаю никакой ошибки, но не достигаю первого вывода «doPost» в сервлете. Если я открываю URL в веб-браузере, я получаю - конечно - ошибку, что GET не поддерживается и т. Д., Но, по крайней мере, я вижу, что что-то происходит.

Я использую следующий код (класс ActionPackage содержит только Вектор параметров и является Сериализуемым):

Java-приложение:

    ActionPackage p = new ActionPackage();
    p.addParameter("TEST", "VALUE");

    System.out.println(p);

    URL gwtServlet = null;
    try {
        gwtServlet = new URL("http://localhost:8888/app/PushServlet");
        HttpURLConnection servletConnection = (HttpURLConnection) gwtServlet.openConnection();
        servletConnection.setRequestMethod("POST");
        servletConnection.setDoOutput(true);

        ObjectOutputStream objOut = new ObjectOutputStream(servletConnection.getOutputStream());
        objOut.writeObject(p);
        objOut.flush();
        objOut.close();

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Servlet:

public class PushServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("doPost");
    ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());

    ActionPackage p = null;
    try {
        p = (ActionPackage) objIn.readObject();

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    System.out.println("Servlet received p: "+p);       
}

}

Есть идеи, что пошло не так?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 04 декабря 2010

URLConnection выполняется только лениво, когда вы вызываете любой из методов get.

Добавьте следующее в ваш код, чтобы фактически выполнил запрос HTTP и получил тело ответа сервлета.

InputStream response = servletConnection.getInputStream();

Смотри также:

0 голосов
/ 30 июля 2014
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        System.out.println("doPost");
        ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());
        ActionPackage p = null;
        p = (ActionPackage) objIn.readObject();
        System.out.println("Servlet rece p: "+p);       
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
}
0 голосов
/ 04 декабря 2010

Попробуйте обернуть все тело doPost в блок try / catch:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        System.out.println("doPost");
        ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());
        ActionPackage p = null;
        p = (ActionPackage) objIn.readObject();
        System.out.println("Servlet received p: "+p);       
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
}

Затем снова посмотрите в выходной файл журнала Servlet или окно для нового исключения, которое может помочь.

...