Java 在另一个Webapp中使用Req Dispatcher forward调用doPost

Java 在另一个Webapp中使用Req Dispatcher forward调用doPost,java,servlets,Java,Servlets,我有两个web应用程序,其中都没有前端(即html/Jsp)。两者各有一个servlet。 让我们称它们为WebApp1/WebApp2和ServiceServlet1/ServiceServlet2。 我有两个war文件,WebApp1.war和WebApp2.war,都已部署 我使用- http://localhost:8080/WebApp1/ServiceServlet1 显然,将调用doGet方法(POST仅与表单关联,如果我错了请更正)。 ServiceServlet1的构建类似于-

我有两个web应用程序,其中都没有前端(即html/Jsp)。两者各有一个servlet。
让我们称它们为WebApp1/WebApp2和ServiceServlet1/ServiceServlet2。
我有两个war文件,WebApp1.war和WebApp2.war,都已部署

我使用-
http://localhost:8080/WebApp1/ServiceServlet1

显然,将调用doGet方法(POST仅与表单关联,如果我错了请更正)。
ServiceServlet1的构建类似于-

    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();
      }
     }
    }
本质上,我需要调用
ServiceServlet2的
doPost()
我用
httpReq.getRequestDispatcher()
sendRedirect
等尝试了几种不同的方法,但到目前为止都失败了

那我怎么才能做到呢


谢谢。

这两个servlet不共享同一个类加载器,因为它们位于不同的´*.WAR´文件中

据我所知,你必须有机会做你想做的事:

  • 在tomcat中禁用类加载器分离(我从来没有这样做过tomcat)
  • 将两个应用程序重新打包到一个
    *。WAR

  • 除了ckuetbach的答案之外,在发送请求时不能更改请求方法。如果第二个servlet无法更改为在
    doGet()
    上执行相同的业务逻辑,那么您必须自己通过编程启动POST请求

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

    “如果第二个servlet的设计真的那么糟糕,而您又无法使其更灵活”——如果您能详细说明的话,我不太明白您的意思。你能告诉我这里有哪些选项是可行的吗?我的意思是在让第二个servlet更灵活的情况下。你提供的解决方案有什么反面吗?现在我重读一遍,我必须承认它听起来有点刺耳。我会更新答案。只是确认一下。我必须发送到第二servlet的数据,我将通过OuttoString写入,这是一个字符串(右?),将其视为XML文件内容。然后,第二个servlet的HttpReq obj将包含此文件内容,我可以通过
    HttpReq.getInputStream()
    进行提取。我的想法正确吗?只需将其作为查询字符串写入请求体,如
    name=value
    ,然后它就可以通过
    request.getParameter(“name”)
    使用。另请参阅链接文章。非常感谢所有这些。解决了我的问题。