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.

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. stackoverflow.com/questions/1359689/… Commented Dec 19, 2014 at 14:28
  • Possible duplicate? Commented Dec 19, 2014 at 14:33

1 Answer 1

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.