-1

我有 2 个 Web 应用程序 GPSClient 和 RuralCloud,部署在我的 tomcat 服务器上,其中我分别有 2 个 servlet SendData 和 RecieveData。我想将对象从 SendData 发送到 RecieveData。我正在使用 requestDispature 但它不适合我。

这是 servlet 一的代码,它抛出 NullPointerException

@WebServlet("/SendData")
public class SendData extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public SendData() {
    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
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    PrintWriter out = response.getWriter();

    String userID = request.getParameter("userID");
    String latitude = request.getParameter("latitude");
    String longitude = request.getParameter("longitude");

    GPSData d = new GPSData(userID, Double.parseDouble(latitude),
            Double.parseDouble(longitude));

    request.setAttribute("data", d);

    ServletContext context = getServletContext().getContext("/RuralCloud");
    RequestDispatcher rd = context.getRequestDispatcher("/RecieveData");
    rd.forward(request, response);


}

}

这是错误日志

java.lang.NullPointerException
at com.gps.client.SendData.doPost(SendData.java:60)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

有什么办法可以解决问题。提前谢谢。

4

2 回答 2

1

您必须记住,两个 Web 应用程序使用完全分离的类加载器,并且您不能只在各种应用程序上下文中访问彼此的对象 - 假设它们没有共同点。

这使您可以通过 http 在两个应用程序之间进行通信——实际上我非常喜欢这种技术。是的,您可以在服务器级别上做更多事情,但他们的解释将远远超出此处单个答案的范围。

与您的问题相关,堆栈跟踪指向 NullpointerException at com.gps.client.SendData.doPost(SendData.java:60),但您不知道该行是什么。它可能是该方法中的最后两行之一,如果您现在添加此信息(因为该方法不正确)将无济于事,但通常您希望将这些指针添加到您的问题以获得更多(更快)帮助。NPE 的位置也可能会指出错误的假设......

所以,一般来说,通过任何其他机制(例如http,正如@Szarpul 建议的那样)。我希望已经指出了您的方法不能很好地工作的原因。

于 2015-01-13T14:06:35.577 回答
0

为什么要创建 servlet 来发送数据?如果您想在 servlet 中接收数据,例如在 doPost 方法中,您必须实现 HTTP 客户端并将 POST 请求发送到您的 serlvet。以下是如何发送 post 请求的示例:JAVA POST

于 2015-01-13T13:54:15.133 回答