我正在尝试使用Java applets& Servlet&小程序。当我从URLConnection对象中检索输入流时遇到HTTP 501错误。
我知道501错误意味着我正在尝试执行未配置连接的操作(在我的情况下是GET操作)但是我认为下面的代码是接受输入因为我说conn.setDoInput(true );
有人可以向我提供有关我无法获得输入流的建议吗?如何解决?
错误:
在messageServlet()中:失败:java.io.IOException:服务器返回HTTP响应代码:501为URL:http://localhost:8000/TestServlet.class
我的代码如下(我已经评论了抛出异常的地方),如果你想知道http:// localhost:8000是我使用python脚本设置的moch服务器&这是因为连接&获取输出流不会引发异常。
//this code occurs in my class TextApplet::messageServlet()
//I am attempting to send a string to my servlet class TestServlet,
//then read a string that the servlet sends back
try
{
URL servletUrl = new URL( "http://localhost:8000/TestServlet.class" );
URLConnection conn = servletUrl.openConnection();
conn.setDoInput( true );
conn.setDoOutput( true );
conn.setUseCaches( false );
conn.setDefaultUseCaches (false);
conn.setRequestProperty ("Content-Type", "application/octet-stream");
OutputStream out = conn.getOutputStream();
out.write( message.getBytes() );
out.flush();
out.close();
// receive result from servlet
InputStream in = conn.getInputStream(); // Exception Occurs HERE
BufferedReader reader = new BufferedReader(new InputStreamReader( in ));
String result = reader.readLine();
in.close();
return result;
}
catch ( IOException e )
{
System.out.println( "In messageServlet(): " + e );
msgBox.setText( msgBox.getText() + "\nIn messageServlet(): Failure: " + e );
}
catch ( Exception e )
{
System.out.println( "In messageServlet(): " + e );
msgBox.setText( msgBox.getText() + "\nIn messageServlet(): Failure: " + e );
}
return null;
}
答案 0 :(得分:2)
HTTP 501错误意味着服务器(至少是servletcontainer内置的默认servlet)无法理解您创建的HTTP请求。它可能是由不正确的标题和/或正文引起的。
我不确定发生了什么,但单独的网址http://localhost:8000/TestServlet.class
到目前为止看起来并不正确。这看起来很像您已将原始.class
文件放在公共webcontent文件夹中并尝试访问它。这毫无意义。 Servlet类应该放在/WEB-INF/classes
文件夹中(在包内!),并且应该在<url-pattern>
文件的/WEB-INF/web.xml
中定义调用servlet的URL。
与具体问题无关,我宁愿使用Applet#getCodeBase()
来获取代码库的URL(从那里下载applet的地方),而不是在URL中对其进行硬编码。假设servlet映射到/myservlet
文件中web.xml
的URL模式,那么您需要在applet中创建URL,如下所示:
URL url = new URL(getCodeBase(), "myservlet");
// ...
答案 1 :(得分:0)
如果出现5XX错误,原因是在服务器端。检查您的应用的日志。服务器 - 您将看到从您的servlet抛出的异常,它将解释问题所在。