Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling a Servlet from a Java application

I want to call a Servlet from a Java application. The problem is, that the call seems not to reach the Servlet. I do not get any error, but do not reach the first output "doPost" in the Servlet. If I open the URL in a web browser, I got - of course - the error that GET is not supported etc., but at least I see, that something happens.

I use the following code (the ActionPackage class only holds a Vector of parameters and is Serializable):

Java application:

    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);       
}

}

Any ideas what went wrong?

Thanks.

like image 317
IceJava Avatar asked Dec 03 '10 21:12

IceJava


People also ask

How do you call a servlet in Java?

Calling a Servlet Programmatically To include another servlet's output, use the include() method from the RequestDispatcher interface. This method calls a servlet by its URI and waits for it to return before continuing to process the interaction. The include() method can be called multiple times within a given servlet.

Can we call servlet from JSP?

Alternatively, you can pass data between a JSP page and a servlet through an appropriately scoped JavaBean or through attributes of the HTTP request object. Using attributes of the request object is discussed later, in "Passing Data Between a JSP Page and a Servlet".

How do you call a servlet in HTML?

Just create a class extending HttpServlet and annotate it with @WebServlet on a certain URL pattern. Or when you're still on Servlet 2.5 or older (the annotation was new since Servlet 3.0), then register the servlet as <servlet> in web. xml and map it on a certain URL pattern via <servlet-mapping> .


1 Answers

URLConnection is only lazily executed whenever you call any of the get methods.

Add the following to your code to actually execute the HTTP request and obtain the servlet response body.

InputStream response = servletConnection.getInputStream();

See also:

  • How to use java.net.URLConnection to fire and handle HTTP requests?
like image 75
BalusC Avatar answered Sep 25 '22 19:09

BalusC