What is inter-servlet communication?


As the name says it, it is communication between servlets. Servlets talking to each other. [There are many ways to communicate between servlets, including

  • Request Dispatching
  • HTTP Redirect
  • Servlet Chaining
  • HTTP request (using sockets or the URLConnection class)
  • Shared session, request, or application objects (beans)
  • Direct method invocation (deprecated)
  • Shared static or instance variables (deprecated)

Search the FAQ, especially the topic Message Passing (including Request Dispatching) for information on each of these techniques. -Alex]

Basically, interServlet communication is achieved through servlet chaining. Which is a process in which you pass the output of one servlet as the input to another. These servlets should be running in the same server.

e.g. ServletContext.getRequestDispatcher(HttpRequest, HttpResponse).forward(“NextServlet”) ; You can pass in the current request and response object from the latest form submission to the next servlet/JSP. You can modify these objects and pass them so that the next servlet/JSP can use the results of this servlet.

There are some Servlet engine-specific configurations for servlet chaining.

Servlets can also call public functions of other servlets running in the same server. This can be done by obtaining a handle to the desired servlet through the ServletContext Object by passing it the servlet name ( this object can return any servlets running in the server). And then calling the function on the returned Servlet object.

e.g. TestServlet test= (TestServlet)getServletConfig().getServletContext().getServlet(“OtherServlet”); otherServletDetails= Test.getServletDetails();

You must be careful when you call another servlet’s methods. If the servlet that you want to call implements the SingleThreadModel interface, your call could conflict with the servlet’s single-threaded nature. (The server cannot intervene and make sure your call happens when the servlet is not interacting with another client.) In this case, your servlet should make an HTTP request to the other servlet instead of direct calls.

Servlets could also invoke other servlets programmatically by sending an HTTP request. This could be done by opening a URL connection to the desired Servlet.