我需要从另一个servlet调用servlet POST方法并在servlets参数中传递一个blob。这是可能的,如果是这样的话怎么办呢。 PS:我不能使用Apache HttpClient
答案 0 :(得分:8)
您需要自己创建并发送HTTP请求。您无法使用forward / redirect / include,因为您要将方法从GET更改为POST,并且您希望发送multipart/form-data
请求。
由于HttpClient(和其他第三方库?)显然不是一个选项,最好的办法是使用提供的标准Java SE API java.net.URLConnection
。长话短说:Using java.net.URLConnection to fire and handle HTTP requests在底部,您可以找到multipart/form-data
示例。
请注意,此问题并非特定于servlet。换句话说,您必须能够使用main()
方法在普通的Java应用程序中执行此代码。这样可以更轻松地进行测试和微调。一旦你开始工作,只需让servlet执行相同的代码即可。
无关问题,我的印象是某处存在重大设计失败,当然,如果这两个servlet都在同一个Web应用程序上下文中运行。您要发送POST请求的另一个servlet显然过于紧密耦合,应该重构。
答案 1 :(得分:7)
您可以在应用程序中获取另一个servlet的调度程序并将其转发或包含在@Ryan建议中。在第一个servlet中代码应该是这样的:
ServletContext context = this.getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher("/otherurltoservlet");
// change your request and response accordingly
dispatcher.forward(request, response);
答案 2 :(得分:1)
您的意思是从您的应用程序拨打另一个Web服务吗?如果是这样,那么HttpClient之类的东西就是你想要的。如果您的意思是希望以编程方式在应用中调用另一个servlet,那么您可能需要forward to it或include it。