Java 在同一服务器中的两个web应用程序之间传递对象
我有两个web应用程序,GPSClient和RuralCloud,部署在我的tomcat服务器上,其中我分别有两个servlet SendData和receivedata。我想将对象从SendData发送到ReceiveData。 我正在使用RequestDisputure,但它对我不起作用 这是servlet one的代码,它阻止了NullPointerExceptionJava 在同一服务器中的两个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
@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所建议的)。我希望已经指出了为什么你的方法没有真正奏效的原因