【发布时间】:2011-02-20 00:42:17
【问题描述】:
我有一个小程序(用户登录的地方),按下登录按钮时,我将登录详细信息发送到我的 servlet。在我的小程序中,负责将登录详细信息发送到 servelt 并接收 servlet 响应对象 FAILS 的函数。
我的问题是:我不知道为什么我的函数 sendObject(Object o) 失败并且我不知道如何解决它。你能帮我理解什么是错的以及为什么吗?
我使用的是 Apache 7.0。我认为从 servlet 接收响应(获取输入流)失败,但我不知道为什么 & 前几天登录工作正常,所以我知道我的 WEB-INF 文件夹设置得很好并且 web.xml 很好。
我的函数(我记录了函数失败的地方):
public ArrayList <Object> sendObject( Object o )
{
try
{
URL servletUrl = new URL( this.getCodeBase(), "Updater" ); // "http://localhost:8080/" );
URLConnection conn = servletUrl.openConnection();
conn.setDoInput( true );
conn.setDoOutput( true );
conn.setUseCaches( false );
conn.setRequestProperty( "Content-Type", "application/x-java-serialized-object" );
OutputStream out = conn.getOutputStream();
ObjectOutputStream objOut = new ObjectOutputStream( out );
objOut.writeObject( o );
objOut.flush();
objOut.close();
// receive result from servlet
System.out.println( "Result from applet.getCodeBase()=" + this.getCodeBase() );
// The following line is where I get the exception thrown
InputStream instr = conn.getInputStream();
ObjectInputStream inputFromServlet = new ObjectInputStream(instr);
ArrayList <Object> result = (ArrayList <Object>) inputFromServlet.readObject();
inputFromServlet.close();
instr.close();
System.out.println( "Contents of output is " );
for (int i=0; i<result.size(); i++)
{
System.out.println( "" + result.get(i) );
}
return result;
}
catch ( IOException e )
{
System.out.println( "In sendObject(): " + e );
}
catch ( Exception e )
{
System.out.println( "In sendObject(): " + e );
}
return null;
}
Java 控制台输出:
applet.getCodeBase() 的结果 = http://localhost:8080/Updater/
在 sendObject() 中:java.io.IOException:服务器返回 HTTP 响应代码:500 用于 URL:http://localhost:8080/Updater/Updater
来自 Apache 日志:
20/02/2011 11:15:08 AM org.apache.catalina.core.ApplicationContext 日志
信息:ContextListener:contextInitialized()
2011 年 2 月 20 日上午 11:15:08 org.apache.catalina.core.ApplicationContext 日志
信息:SessionListener:contextInitialized()
20/02/2011 11:15:23 AM org.apache.catalina.core.ApplicationContext 日志
信息:将 servlet 更新程序标记为不可用
20/02/2011 11:15:23 AM org.apache.catalina.core.StandardWrapperValve 调用
严重:为 servlet 更新程序分配异常
java.lang.NullPointerException
在 javax.servlet.GenericServlet.getServletContext(GenericServlet.java:125)
在 UpdaterServlet.(UpdaterServlet.java:32) // 参考下面查看此文件的第 32 行
在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
在 sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源)
在 java.lang.reflect.Constructor.newInstance(Unknown Source)
在 java.lang.Class.newInstance0(未知来源)
在 java.lang.Class.newInstance(Unknown Source)
在 org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119)
在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048)
在 org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:799)
在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)
在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源)
在 java.lang.Thread.run(Unknown Source)
localhost_access_log...:
127.0.0.1 - - [2011 年 2 月 20 日:11:15:12 +1100] "GET /Updater/index.html HTTP/1.1" 304 -
127.0.0.1 - - [20/Feb/2011:11:15:15 +1100] “GET /Updater/UpdaterApplet.class HTTP/1.1”304 -
127.0.0.1 - - [20/Feb/2011:11:15:15 +1100] “GET /Updater/ContentTree.class HTTP/1.1”304 -
127.0.0.1 - - [20/Feb/2011:11:15:15 +1100] “GET /Updater/ContentMap.class HTTP/1.1”304 -
127.0.0.1 - - [20/Feb/2011:11:15:15 +1100] “GET /Updater/UpdaterApplet$1.class HTTP/1.1”304 -
127.0.0.1 - - [20/Feb/2011:11:15:15 +1100] “GET /Updater/SQLInterface.class HTTP/1.1”304 -
127.0.0.1 - - [20/Feb/2011:11:15:23 +1100] “GET /Updater/ObjSerializationInterface.class HTTP/1.1”304 -
127.0.0.1 - - [20/Feb/2011:11:15:23 +1100] "POST /Updater/Updater HTTP/1.1" 500 3117
这是 UpdaterServlet.java 文件(如果您在上面看到此文件的第 32 行有错误):
public class UpdaterServlet extends HttpServlet
{
// Class Variables:
private static final long serialVersionUID = 1L;
private ArrayList <File> localDatabases;
private ArrayList <ArrayList <Object>> input;
private ArrayList <ArrayList <Object>> output;
// Class Methods:
public UpdaterServlet()
{
getServletContext().log( "File open/created" ); // LINE 32
localDatabases = new ArrayList <File>();
【问题讨论】:
标签: java apache servlets applet