java - 从java调用servlet

标签 java servlets

我正在尝试编写一个名为 Sender.java 的 java 类来调用 servlet。 这是 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();
        }
    }
}

这里是 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();
    }
}

当我尝试在服务器(WildFly 8.x)上运行 servlet 时,出现以下错误:

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)

我知道问题出在 InputStream is = request.getInputStream(); 上,因为我可以从调试器中看到这一点(is 为 null),但我不知道不知道为什么会发生这种情况。

有人可以帮助我吗?预先感谢您。

最佳答案

如果你想做一个HTTP POST从 Java 客户端到 Servlet,必须满足以下要求:

  1. Content-Type header 必须application/x-www-form-urlencoded 。这通常是默认值。如果您想发送文件数据或任何相关数据流,请将 Content-Type 设置为 multipart/form-data。这就要求发送的信息要符合RFC2388 .
  2. 从连接 OutputStream 发送到 Servlet 的值必须是编码的 (application/x-www-form-urlencoded) 键/值对(由 &)。
  3. Content-Length header 必须是 2 中提到的编码值的长度或您愿意发送到服务器的所有数据的长度/servlet。

在Servlet端,可以使用request.getParameter()方法(传递参数key)来获取其值。对于multipart/form-data,您可以使用request.getInputStream()

我希望这有帮助。 BalusC 在 StackOverflow 上编写了一个关于如何在 Java 中触发 HTTP POST 的出色示例,可以在 here 找到。 .

关于java - 从java调用servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27567824/

相关文章:

java - log4j.properties - 从输出中删除类名

java - 关于检查字符串是否为数字

java - 匹配和删除 ArrayList 中的项目

java - 将数组存储在内存中并在以后使用这些数组

java - 未找到 Servlet

java - 更改 ServletContext 中 ArrayList 中的对象

java - 使用已配置的 JAAS 主题来验证 HttpURLConnection?

java - 每 3 秒在处理中将 MouseWheel 值返回为滚动/不滚动?

javascript - 如何从 servlet 中隐藏基于数组或数组列表的 div

java - HttpClient 参数未添加到执行方法中