0

I'm trying to write a java class named Sender.java that invoke a servlet. This is the code for Sender.java :

public class Sender {
    public static void main(String args[]){

        try{
            URL gwtServlet = new URL("http://localhost/FileReceiver/Receiver");
            HttpURLConnection servletConnection = (HttpURLConnection) gwtServlet.openConnection();
            servletConnection.setRequestMethod("POST");
            servletConnection.setDoOutput(true);
            servletConnection.setDoInput(true);
            servletConnection.setUseCaches(false);
            servletConnection.setDefaultUseCaches (false);

            OutputStream os = servletConnection.getOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(os);

            out.writeInt(1);
            out.flush();
            out.close();
        } 
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

and here the code for the servlet Receiver.java :

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws    ServletException, IOException {
    doPost(request,response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws          ServletException, IOException {
    try {
        InputStream is = request.getInputStream();

        //until here is ok

        ObjectInputStream ois = new ObjectInputStream(is);

        int p = ois.readInt();
        writer.println("the number p is : " + p);
        ois.close();

    } catch (Exception exc) {
        exc.printStackTrace();
    }
}

When I try to run on server (WildFly 8.x) the servlet, I have this error:

14:52:20,193 ERROR [stderr] (default task-7) java.io.EOFException

14:52:20,193 ERROR [stderr] (default task-7)    at     java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)

14:52:20,193 ERROR [stderr] (default task-7)    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)

14:52:20,193 ERROR [stderr] (default task-7)    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)

14:52:20,193 ERROR [stderr] (default task-7)    at java.io.ObjectInputStream.<init>(Unknown Source)

14:52:20,193 ERROR [stderr] (default task-7)    at fileServlet.servlet.Receiver.doPost(Receiver.java:67)

14:52:20,193 ERROR [stderr] (default task-7)    at fileServlet.servlet.Receiver.doGet(Receiver.java:46)

14:52:20,193 ERROR [stderr] (default task-7)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)

14:52:20,193 ERROR [stderr] (default task-7)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)

14:52:20,193 ERROR [stderr] (default task-7)    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)

14:52:20,193 ERROR [stderr] (default task-7)    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73)

14:52:20,193 ERROR [stderr] (default task-7)    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146)

14:52:20,194 ERROR [stderr] (default task-7)    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:177)

14:52:20,194 ERROR [stderr] (default task-7)    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727)

14:52:20,194 ERROR [stderr] (default task-7)    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

14:52:20,194 ERROR [stderr] (default task-7)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

14:52:20,194 ERROR [stderr] (default task-7)    at java.lang.Thread.run(Unknown Source)

I got that the problem is about InputStream is = request.getInputStream(); because I can see this from the debugger (is is null) but I don't know why this happens.

Can someone help me? thank you in advance.

Buhake Sindi
  • 82,658
  • 26
  • 157
  • 220
jasmine
  • 11
  • 2
  • You can't use ObjectOutputStream, at least not easily. You need to write the raw data yourself. And you also have to do what @BuhakeSindi said. You should probably search on how to send an http request in Java. http://stackoverflow.com/questions/1359689/how-to-send-http-request-in-java – markbernard Dec 19 '14 at 14:28
  • [Possible duplicate](http://stackoverflow.com/questions/2793150/using-java-net-urlconnection-to-fire-and-handle-http-requests)? – Buhake Sindi Dec 19 '14 at 14:33

1 Answers1

1

If you want to do an HTTP POST from a Java client to a Servlet, the following requirement must be met:

  1. The Content-Type header must be application/x-www-form-urlencoded. This is usually the default. If you want to send file data or any relevant data stream set your Content-Type to multipart/form-data. This requires the information sent to conform to RFC2388.
  2. Values sent from the connection OutputStream to the Servlet must be an encoded (application/x-www-form-urlencoded) key/value pair (separated by a &).
  3. The Content-Length header must be the length of the encoded value mentioned in 2 or the length of all data that you're willing to send to the server/servlet.

On the Servlet side, you can use request.getParameter() method (passing the parameter key) to obtain its value. For multipart/form-data, you can then use request.getInputStream().

I hope this helps. A brilliant example, written by BalusC on StackOverflow, on how to fire HTTP POST in Java can be found here.

Community
  • 1
  • 1
Buhake Sindi
  • 82,658
  • 26
  • 157
  • 220