使用AJAX和servlet

我刚刚开始使用AJAX。 我不太确定很多事情,虽然我在互联网上找了几个教程并开始工作。 我为粘贴很多代码道歉,但我不知道我哪里出错了。 谢谢你的帮助! 🙂

这是我的JSP(只有javascript部分)和servlet代码:(后跟exception,后面跟着我用于普通Java应用程序的Java代码):

JSP:

//--Function to get the xmlhttp object function getHttpObject(){ var xmlhttp = null; if (window.XMLHttpRequest){xmlhttp=new XMLHttpRequest();} else if (window.ActiveXObject){xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");} else {alert("Your browser does not support XMLHTTP!");} return xmlhttp; } function populateReply(str){ xmlhttp = getHttpObject(); xmlhttp.onreadystatechange=function(){ if(xmlhttp.readyState==4){ ajxfrm.chatresponse.value=xmlhttp.responseText; } } xmlhttp.open("GET","NewServlet?chatinput="+str,true); xmlhttp.send(null); } 

Servlet:

 public class NewServlet extends HttpServlet implements Servlet { NetworkAimlFacade aiml = null; int status = 0; String botName; String param[]; GraphBuilder builder; public NewServlet() throws Exception{ super(); aiml = new NetworkAimlFacade(param); builder = aiml.getNetworkGraphBuilder(); builder.addDirectoryUnlessAlreadyAdded ( "C:\\Program Files\\RebeccaAIML\\aiml\\annotated_alice" ); builder.createGraph(); botName = builder.getBotPredicate("name"); } private String handleRequest(String param){ return null; } public void destroy() { try{ aiml.destroy(); }catch(Exception e){ e.printStackTrace(); } } protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ res.setContentType("text/xml"); res.setHeader("Cache-Control", "no-store, no-cache"); String input = ""; if(req.getParameter("chatinput") != null) input = req.getParameter("chatinput"); try{ String response = builder.getResponse(input); if(response!=null) res.getWriter().write(response); else res.getWriter().write("No"); }catch(Exception e){ e.printStackTrace(); } } protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { }} 

这是我得到的错误,而不是从servlet获取响应:

Apache Tomcat / 7.0.11 – 错误报告

HTTP状态500 –

类型exception报告

信息

description服务器遇到内部错误(),导致无法完成此请求。

例外

     javax.servlet.ServletException:实例化servlet类NewServlet时出错
     org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)  
     org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)   
     org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)   
     org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394) 
     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:302)    
     java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:886) 
     java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:908) 
     java.lang.Thread.run(Thread.java:619)

根本原因

 java.lang.NullPointerException Ice.PropertiesI。(PropertiesI.java:250)
     Ice.Util.createProperties(Util.java:29)
     Ice.Util.initialize(Util.java:70)
     Ice.Util.initialize(Util.java:49)
     Ice.Util.initialize(Util.java:56)
     rebecca.NetworkGraphBuilderAIML。(未知来源)    
     rebecca.NetworkAimlFacade。(未知来源)  
     NewServlet。(NewServlet.java:27)
     sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
     sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
     java.lang.reflect.Constructor.newInstance(Constructor.java:513)
     java.lang.Class.newInstance0(Class.java:355)
     java.lang.Class.newInstance(Class.java:308)
     org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
     org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
     org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
     org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
     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:302)
     java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:886)
     java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:908)
     java.lang.Thread.run(Thread.java:619)

note备注 Apache Tomcat / 7.0.11日志中提供了根本原因的完整堆栈跟踪。

Apache Tomcat / 7.0.11

这是我在普通Java应用程序中使用的等效Java代码,它工作正常!

  public class Console { public static void main(String args[]) { NetworkAimlFacade aiml = null; int status = 0; try { aiml = new NetworkAimlFacade(args); GraphBuilder builder = aiml.getNetworkGraphBuilder(); builder.addDirectoryUnlessAlreadyAdded ( "C:\\Program Files\\RebeccaAIML\\aiml\\annotated_alice" ); builder.createGraph(); String botName = builder.getBotPredicate("name"); String initialResponse = builder.getResponse("connect"); System.out.println(botName + " says: " + initialResponse); while(true) { System.out.print("You say> "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); if(input.equals("/exit")) { break; } else { String response = builder.getResponse(input); System.out.println("====================="); //Print out what Rebecca says. System.out.println(botName + " says: " + response); } } aiml.destroy(); } catch(NetworkException e) { e.printStackTrace(); status = 1; } catch (Exception e) { e.printStackTrace(); status = 1; } System.exit(status); } } 

以下是您的例外情况的相关摘录:

 javax.servlet.ServletException: Error instantiating servlet class NewServlet ... java.lang.NullPointerException Ice.PropertiesI.(PropertiesI.java:250) Ice.Util.createProperties(Util.java:29) Ice.Util.initialize(Util.java:70) Ice.Util.initialize(Util.java:49) Ice.Util.initialize(Util.java:56) rebecca.NetworkGraphBuilderAIML.(Unknown Source) rebecca.NetworkAimlFacade.(Unknown Source) NewServlet.(NewServlet.java:27) ... 

换句话说,当容器试图做的时候

 Servlet serlvet = new NewServlet(); 

它失败了,因为在第250行的PropertiesI类的构造函数中,某些对象不是null并且试图直接访问它而不事先检查它是否为null 。 检查第250行的PropertiesI类的源代码并进行相应的修复。

这一切都与ajax或servlet 无关 。 学习如何解释exception和堆栈跟踪。