Java 在同一服务器中的两个web应用程序之间传递对象

Java 在同一服务器中的两个web应用程序之间传递对象,java,tomcat,servlets,cross-context,Java,Tomcat,Servlets,Cross Context,我有两个web应用程序,GPSClient和RuralCloud,部署在我的tomcat服务器上,其中我分别有两个servlet SendData和receivedata。我想将对象从SendData发送到ReceiveData。 我正在使用RequestDisputure,但它对我不起作用 这是servlet one的代码,它阻止了NullPointerException @WebServlet("/SendData") public class SendData extends HttpSe

我有两个web应用程序,GPSClient和RuralCloud,部署在我的tomcat服务器上,其中我分别有两个servlet SendData和receivedata。我想将对象从SendData发送到ReceiveData。 我正在使用RequestDisputure,但它对我不起作用

这是servlet one的代码,它阻止了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)
有办法解决这个问题吗。
Thanx。为什么要创建servlet来发送数据?如果您想在servlet中接收数据,例如在doPost方法中,您必须实现HTTP客户机并向serlvet发送POST请求。
下面是一个如何发送post请求的示例:

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

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

与您的问题相关,stacktrace指向com.gps.client.SendData.doPost(SendData.java:60)上的NullpointerException
,但您没有告诉我们该行是什么。这可能是该方法中最后两行中的一行,如果您现在添加此信息(因为方法不正确),则不会有任何帮助,但通常您希望将这些指针添加到问题中,以获得更多(更快)的帮助。NPE
的位置也可能会让你认为这是错误的

因此,一般来说,要通过任何其他机制(如http,正如@Szarpul所建议的)。我希望已经指出了为什么你的方法没有真正奏效的原因