问题
I want to call a Servlet from a Java application. The problem is, that the call seems not to reach the Servlet. I do not get any error, but do not reach the first output "doPost" in the Servlet. If I open the URL in a web browser, I got - of course - the error that GET is not supported etc., but at least I see, that something happens.
I use the following code (the ActionPackage class only holds a Vector of parameters and is Serializable):
Java application:
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);
}
}
Any ideas what went wrong?
Thanks.
回答1:
URLConnection
is only lazily executed whenever you call any of the get
methods.
Add the following to your code to actually execute the HTTP request and obtain the servlet response body.
InputStream response = servletConnection.getInputStream();
See also:
- How to use java.net.URLConnection to fire and handle HTTP requests?
回答2:
Try wrapping the entire body of the doPost in a try/catch block:
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);
}
}
Then look again at your Servlet output log file or window for a new Exception which may help.
回答3:
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);
}
}
来源:https://stackoverflow.com/questions/4349854/calling-a-servlet-from-a-java-application