首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从java调用servlet

从java调用servlet
EN

Stack Overflow用户
提问于 2014-12-19 14:12:52
回答 1查看 268关注 0票数 0

我正在尝试编写一个名为Sender.java的java类来调用servlet。这是Sender.java的代码:

代码语言:javascript
复制
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的代码:

代码语言:javascript
复制
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时,出现了以下错误:

代码语言:javascript
复制
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 )中看到这一点,但是我不知道为什么会这样。

有人能帮我吗?提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-19 14:23:07

如果您想从Java执行HTTP POST到Servlet,则必须满足以下要求:

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

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

我希望这能帮到你。一个由BalusC在StackOverflow上编写的关于如何在Java中触发HTTP的优秀示例可以找到这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27567824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档