加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 16:47:10 所属栏目:Java 来源:网络整理
导读:实际情况是这样的: Java Web服务器(Weblogic)接收来自用户的请求,它必须发送一个ZIP存档作为响应.存档必须从用户要求的某些文件和服务器本身生成的一个HTML报告动态生成.我想重新使用服务器在其他情况下已经使用的JSF servlet来生成此报告.所以,基本上我用
实际情况是这样的: 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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读