Servlets 使用java程序中的POST调用servlet

Servlets 使用java程序中的POST调用servlet,servlets,Servlets,这个问题被问了很多次,但不知何故,我无法让我的程序工作 这是我的java程序: public static void main( String [] args ) { try { URL url = new URL("http://localhost:8080/mywebapp/servletname"); URLConnection conn = url.openConnection(); conn.setDoOutput(true)

这个问题被问了很多次,但不知何故,我无法让我的程序工作

这是我的java程序:

public static void main( String [] args ) {

    try {

        URL url = new URL("http://localhost:8080/mywebapp/servletname");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);

        BufferedWriter out = 
            new BufferedWriter( new OutputStreamWriter( conn.getOutputStream() ) );
        //out.write("xml=" + param1 + "\r\n");
        out.write("xml=xmltest\r\n");
        out.flush();
        out.close();
        BufferedReader in = 
            new BufferedReader( new InputStreamReader( conn.getInputStream() ) );

        String response;
        while ( (response = in.readLine()) != null ) {
            System.out.println( response );
        }
        in.close();
    }
    catch ( MalformedURLException ex ) {
        ex.printStackTrace();
        // a real program would need to handle this exception
    }
    catch ( IOException ex ) {
        ex.printStackTrace();
        // a real program would need to handle this exception
    }
}
它在调用conn.getInputStream()时引发异常

例外情况如下:

java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/webapp/servletname  at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
at com.barcap.mdm.nh.cron.TestUpload.main(TestUpload.java:35)
我的servlet代码如下:

public class servletname extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public servletname() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    System.out.println("GET method reached .... but it's not supported");
    throw new ServletException("'GET' method not supported. 'POST' method required.");
    //doPost(request, response);
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    System.out.println("POST method reached");

    response.setContentType("text/xml");
    List<UploadUserVO> list = null;
    String xml = request.getParameter("xml");
    String responseXML = "<?xml version=\"1.0\"?><response result=\"__responseString__\"></response>";

    System.out.println("XML : " + xml);
    PrintWriter out = response.getWriter();

    try {
                  // perform some task here 
               } catch (Exception e)
}}}}
公共类servletname扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
/**
*@参见HttpServlet#HttpServlet()
*/
公共servletname(){
超级();
//TODO自动生成的构造函数存根
}
/**
*@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
//TODO自动生成的方法存根
System.out.println(“已达到获取方法…但不支持它”);
抛出新的ServletException(“'GET'方法不受支持。'POST'方法必需。”);
//doPost(请求、响应);
}
/**
*@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
//TODO自动生成的方法存根
System.out.println(“达到后处理方法”);
setContentType(“text/xml”);
List=null;
字符串xml=request.getParameter(“xml”);
字符串responseXML=“”;
System.out.println(“XML:+XML”);
PrintWriter out=response.getWriter();
试一试{
//在这里执行一些任务
}捕获(例外e)
}}}}
有人能指出我遗漏了什么或我做错了什么吗


感谢您的帮助。

请发布完整的堆栈跟踪,包括根本原因。答案就在那里。这是完整的堆栈跟踪。没有其他信息。。。。这就是我无法进一步调试的原因。您需要读取服务器日志(servlet运行的地方),而不是客户端日志(您的
main()
打印到的地方)。否则,请阅读
URLConnection#getErrorStream()
,它将返回一个带有堆栈跟踪的HTML风格的错误页面(尽管这可能不包含完整的堆栈跟踪)。您能告诉我需要查看的确切日志吗。。。。在tomcat日志目录中,我没有找到任何信息。。。有catalina、localhost和manager日志。里面没有信息。另外,我的客户端和服务器在同一个项目中。。。我正在为一些假定只使用POST方法的purose开发API。我想事先测试API,以确保一切正常。我编写了一个简单的HTML程序,并使用AJAX使用POST方法调用servlet。它很好用。但不知怎的,我的java客户端…无法正常工作。谢谢你的帮助。它不起作用,因为我有一个用于web请求的筛选器,它希望凭据能够通过。在浏览器中,一切正常,但是java客户端没有这些信息。。。这就是它不起作用的原因。在web.xml中对过滤器进行注释后,它就可以工作了。否则,我可以在java客户机中硬编码请求中的凭据,它也可以正常工作。