Servlets 使用java程序中的POST调用servlet
这个问题被问了很多次,但不知何故,我无法让我的程序工作 这是我的java程序: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)
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客户机中硬编码请求中的凭据,它也可以正常工作。