在Applet中接收输入流

时间:2011-02-12 09:54:42

标签: java servlets applet

我正在尝试使用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;
}       

2 个答案:

答案 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抛出的异常,它将解释问题所在。