B/S架构开发hive客户端程序:后台执行时间长,页面过期问题
2014-01-07 14:15
253 查看
在公司开发了一套hiveAdmin系统,此系统的主要功能类似于PLSQL Developer,pgAdmin等软件,为的是给熟悉sql语句,但是不熟悉hive的数据分析师等人员方便操作hive。在实际工作中确实有些查询语句执行时间比较长,但是IE等浏览器默认等待响应的时间是5分钟,也就是说如果一个http请求超过5分钟还没有响应,那么页面就会出现超时的情形,见下图。
解决方法:
主要描述:本系统使用的是struts框架,所以可以在action中启动一个子线程执行查询,主线程则判断子线程的查询结果,在结果未返回之前,主线程则reponse查询状态之类的信息给客户端,以确保上图的问题不发生,可response一些友好而字节比较少的提示信息给前台页面,并且查询结果页面在此action方法中生成,不能用mapping.findForward("****")方法到一个jsp页面。
实际代码(下面代码截取与action方法中):
final PrintWriter out = resp.getWriter();
out.write("查询正在进行中...");
out.flush();
new Thread()//启动一个子线程异步查询
{
@Override
public void run() {
logger.info("查询数据的子线程开始运行。。。。。。");
//下面的result是实际的结果集。
result = hiveExecuteAO.execute(hq, user, hr, flag );
logger.info("查询数据的子线程运行结束。。。。。。");
synchronized(this)
{
this.notify();
}
};
}.start();
while(result==null)
{
Thread.sleep(1000);
out.write(".");
out.flush();
}
out.write("查询结束");
out.flush();
//结果查询处理后
//动态生成jsp页面--------参照sql-result.jsp页面生成-----begin
logger.info("开始生成页面.......................");
out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.write("<html>");
out.write("<body>");
out.write("实际的结果代码,此处省略n个字");
out.write("</body>");
out.write("</html>");
out.flush();
logger.info("生成页面结束.......................");
return null;
解决方法:
主要描述:本系统使用的是struts框架,所以可以在action中启动一个子线程执行查询,主线程则判断子线程的查询结果,在结果未返回之前,主线程则reponse查询状态之类的信息给客户端,以确保上图的问题不发生,可response一些友好而字节比较少的提示信息给前台页面,并且查询结果页面在此action方法中生成,不能用mapping.findForward("****")方法到一个jsp页面。
实际代码(下面代码截取与action方法中):
final PrintWriter out = resp.getWriter();
out.write("查询正在进行中...");
out.flush();
new Thread()//启动一个子线程异步查询
{
@Override
public void run() {
logger.info("查询数据的子线程开始运行。。。。。。");
//下面的result是实际的结果集。
result = hiveExecuteAO.execute(hq, user, hr, flag );
logger.info("查询数据的子线程运行结束。。。。。。");
synchronized(this)
{
this.notify();
}
};
}.start();
while(result==null)
{
Thread.sleep(1000);
out.write(".");
out.flush();
}
out.write("查询结束");
out.flush();
//结果查询处理后
//动态生成jsp页面--------参照sql-result.jsp页面生成-----begin
logger.info("开始生成页面.......................");
out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.write("<html>");
out.write("<body>");
out.write("实际的结果代码,此处省略n个字");
out.write("</body>");
out.write("</html>");
out.flush();
logger.info("生成页面结束.......................");
return null;
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- JQuery+Strusts1.x无刷新登录
- 浏览器 cookie 限制
- 玩转浏览器IE7的5个顶级使用技巧
- 字符集导致的浏览器跨站脚本攻击分析
- 更改IE浏览器的图标
- css ie6 ie7 ff的CSS hack使用技巧
- CSS 浏览器的等宽空格问题解决
- 区分IE6,IE7,firefox的CSS hack
- 多种浏览器清除缓存的方法小结
- Dom与浏览器兼容性说明
- firefox(火狐)和ie浏览器禁止右键和禁止复制的代码
- Js智能判断浏览器是关闭还是刷新的代码
- 10个基于浏览器的JavaScript调试工具分享
- JavaScript中的Navigator浏览器对象
- JavaScript 判断浏览器类型及版本
- JavaScript 页面编码与浏览器类型判断代码
- ASP.NET线程相关配置
- JQUERY1.6 使用方法四 检测浏览器