如何避免将Java请求从Java Web服务器发送到自身?

前端之家收集整理的这篇文章主要介绍了如何避免将Java请求从Java Web服务器发送到自身?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
实际情况是这样的: Java Web服务器(Weblogic)接收来自用户的请求,它必须发送一个ZIP存档作为响应.存档必须从用户要求的某些文件和服务器本身生成的一个HTML报告动态生成.我想重新使用服务器在其他情况下已经使用的JSF servlet来生成此报告.所以,基本上我用的是:
HttpURLConnection  self = new URL ("http://me.myself.com/report.jsf?...").openConnection ();
String  report_html = fetchHtmlFromConnection (self);

然后创建请求的ZIP,包括生成的HTML.

问题是,我可以避免在这种情况下发出内部HTTP请求(report.jsf)吗?这涉及到基本上没有意义(因为应用程序只是“谈论”自己),通过操作系统,HTTPD(可能在不同的机器上)等等.

解决方法

我对JSF不是很熟悉,但是从我所了解的这些,您可以使用也适用于JSP页面的技术:

>创建自己的HttpServletResponseWrapper(容器使用的类,允许您修改响应)
>使用它来覆盖默认的Writer(将渲染的页面写入输出),并提供一个将输出写入一个String或一个临时文件,该文件将提供压缩代码.

有一个漂亮简单的教程,向您展示如何做到这一点:
http://blog.valotas.com/2011/09/get-output-of-jsp-or-servlet-response.html

然后

>如gyan所示,从你的servlet中获取一个ServletRequestDispatcher,让你调用JSF的渲染
>转发servlet调用,以提供自己的HttpServletResponseWrapper
>使用您的HttpServletResponseWrapper获取渲染的HTML并将其提供给压缩代码.

所以压缩Servlet就像:

TempFileRespWrapper respWrapper = new TempFileRespWrapper();
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher( "/report.jsf");
dispatcher.forward(request,respWrapper);
File f = respWrapper.getOutputPath();
addFileToZip(f);

猜你在找的Java相关文章