Calling the doPost in another Webapp with a Req Dispatcher forward

▼魔方 西西 提交于 2019-12-25 06:40:00

问题


I have 2 web apps, no front-end(i.e html/Jsp) in either. Both have one servlet each.
Lets call them WebApp1/WebApp2 and ServiceServlet1/ServiceServlet2.
I have 2 war files, WebApp1.war and WebApp2.war and both deployed.

I call the ServiceServlet1 directly from the browser with -
http://localhost:8080/WebApp1/ServiceServlet1
Obviously the doGet method will be called(POST is associated only with FORM, correct me if I am wrong).
The ServiceServlet1 is build something like -

    public class ServiceServlet1 extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest httpRequest, HttpServletResponse httpResponse)
       throws ServletException, IOException {
      doPost(httpRequest, httpResponse);
     }

     @Override
     protected void doPost(HttpServletRequest httpServletRequest,
       HttpServletResponse httpServletResponse) throws ServletException,
       IOException {
      RequestDispatcher requestDispatcher;

      try {
// Process something
       requestDispatcher = getServletContext().getRequestDispatcher("/WebApp2/ServiceServlet2");
       requestDispatcher.forward(httpServletRequest, httpServletResponse);
      } catch (IOException ioException) {
       ioException.printStackTrace();
      } catch (ServletException servletException) {
       servletException.printStackTrace();
      }
     }
    }

Essentially, what I require is to call the doPost() of ServiceServlet2
I have tried few different ways with httpReq.getRequestDispatcher(), sendRedirect etc. but have failed so far.

So how can I make it happen?

Thank you.


回答1:


In addition to the answer of ckuetbach, you can't change the request method when dispatching the request. If the second servlet cannot be changed to execute the same business logic on doGet() as well, then you have to fire a POST request yourself programmatically.

HttpURLConnection connection = (HttpURLConnection) new URL("http://localhost/WebApp2/ServiceServlet2").openConnection();
connection.setRequestMethod("POST");
InputStream response = connection.getInputStream();
// ... Write to OutputStream of your HttpServletResponse?

See also:

  • How to use URLConnection to fire and handle HTTP requests?



回答2:


The two servlets don't share the same Classloader, because they are in different ´*.WAR´-files.

As far as I know, you have to chances to do what you want:

  1. Disable Classloader-Separation in tomcat (I've never done this tomcat)
  2. Repackage the two aplication within one *.WAR


来源:https://stackoverflow.com/questions/4814893/calling-the-dopost-in-another-webapp-with-a-req-dispatcher-forward

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!