Java 在另一个Webapp中使用Req Dispatcher forward调用doPost
我有两个web应用程序,其中都没有前端(即html/Jsp)。两者各有一个servlet。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的构建类似于-
让我们称它们为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”)
使用。另请参阅链接文章。非常感谢所有这些。解决了我的问题。