从Java应用程序调用Servlet

5
我想从Java应用程序调用一个Servlet。问题是,似乎没有调用到Servlet。我没有收到任何错误信息,但是也没有到达Servlet中的第一个输出“doPost”。如果我在Web浏览器中打开URL,我会得到“不支持GET”等错误,但至少我可以看到一些事情发生了。
我使用以下代码(ActionPackage类仅包含参数向量并且可序列化):
Java应用程序:
    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);       
}

有什么想法是出了什么问题吗?

谢谢。


创建一个虚拟的表单页面,使用 <FORM METHOD="POST" ACTION="http://localhost:8888/app/PushServlet"> 提交到 PushServlet。我相信即使是本地 HTML 文件,只要它提交到正确 URL 的 servlet 就可以工作。 - Bert F
3个回答

7

URLConnection 只有在调用任何 get 方法时才会被惰性执行。

将以下代码添加到您的代码中,以实际执行 HTTP 请求并获取 Servlet 响应正文。

InputStream response = servletConnection.getInputStream();

另请参阅:


哦,对了!我忘记了那个。另外要注意的是,即使您不关心其内容,通常认为从响应InputStream中读取所有数据是一个好习惯。这使得JVM更有可能保持连接以供以后重用。 - Mike Clark
非常感谢。添加后,调用运行没有任何问题。 - IceJava

0

尝试用try/catch块包装doPost的整个主体:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        System.out.println("doPost");
        ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());
        ActionPackage p = null;
        p = (ActionPackage) objIn.readObject();
        System.out.println("Servlet received p: "+p);       
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
}

然后再次查看您的Servlet输出日志文件或窗口,以获取可能有所帮助的新异常信息。


0
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        System.out.println("doPost");
        ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());
        ActionPackage p = null;
        p = (ActionPackage) objIn.readObject();
        System.out.println("Servlet rece p: "+p);       
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接