Java Web应用Web层异步化应该考虑的问题
- - 企业架构 - ITeye博客 之前做了一个项目,要用到web层的异步化技术,在实际实现中,遇到了很多问题,作为教训简单罗列下. 1、app 容器/J2EE框架对异步的支持. 在tomcat5、jboss4的时候,每一个请求都用了一个app容器线程来执行,app线程必须一直处理完或者等待别的线程处理完,才能拿着请求的链接把结果写回到客户端.
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %> <%@ taglib prefix ="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bid.css"/> <title>批量打印模板</title> <script type="text/javascript" language="javascript"> function printOnload(){ var count = <s:property value="uriList.size()"/>; var index; for(i = 0;i < count;i++){ index = i + 1; //把iframe的html挪到div上 document.getElementById('page' + index).innerHTML = window.frames[0].document.getElementsByTagName('body')[0].innerHTML; } } </script> <!-- media="print"表示改样式只在打印预览或打印的时候才生效 --> <style media="print" type="text/css"> .NOPRINT{display:none;} .PageNext{page-break-after: always;} .none{} </style> </head> <body onload="printOnload()"> <!-- 根据urlList,生成<div> <iframe><iframe/></div> 这样格式的页面--> <s:iterator value="uriList" status="status1" id="uri"> <div style="<s:if test='#status1.count != uriList.size()'>page-break-after: always;</s:if>" id="page${status1.count}"> <iframe src="<%=request.getContextPath() %>${uri }"></iframe> </div> </s:iterator> </body> </html>
思路是这样的,首先得构造一个适合打印的页面,然后直接用浏览器的打印功能就可以了 :
1、后台request保存了一个List<URLObj>,uri属性表示请求地址
2、该打印demo页面,根据List<URLObj>,用struts2标签在body上构建<div><iframe></iframe></div>,iframe打开的是每一个需要批量打印的页面
3、页面加载完成后,调用printOnLoad函数,把iframe里面的html挪到div上