我的index.jsp页面代码:
<%@ page contentType="text/html; charset=GBK" language="java" import="java.util.*,java.text.*" errorPage="" %>
<%@include file="/public/header.jsp"%><%
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String now = formatter.format(new Date());
%><script language="javascript">
function message()
<!--
{
    var form=document.forms[0];
form.Submit.disabled=true;
return true;  
 }
 -->
</script>
<body>  <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td align="left" style="padding-left:20px">
  <img src="<%=baseUrl%>/images/logo/logo.jpg"/><b>工程报表系统</b><br /><br />
 一、 初始2009年之前历史工程资料(以编制日期为2008-12-20登录)<p />
  1、依据2008年第四季度的工程报表资料 <br /><br /> 2、在本季里,“完成工作量”填写“自开工至本季止累计完成”,“收取监理费”填写“自开工至本季止累计收取监理费”,“开工至本季止累计拖欠”计算填写 <br /><br />
  3、在下季里,“计划完成工作量”填写计划中的“下季计划完成工作量”,“计划收取监理费”填写计划中的“下季计划收取监理费”<br /><br />
 二、 输入2009年第一季度的工程报表资料(以编制时间2009-3-20登录)<p /> 
 1、依据2009年第一季度的工程报表资料<br /><br /> 
 2、在本季里,“完成工作量”填写“本季完成工作量”,“收取监理费”填写“本季收取监理费”,“开工至本季止累计拖欠”计算填写 <br /><br />
 3、在下季里,“计划完成工作量”填写计划中的“下季计划完成工作量”,“计划收取监理费”填写计划中的“下季计划收取监理费”<br /><br />
<font color="red"> 三、注意事项:若编制日期超过了季度结束时间,必须将编制日期设回季度区域时间内</font><p />
  </td>
    </tr>
  </table>
 
  
<div class="divBorderLine">  
 <table>
    <tr><td>
  <form id="form1" name="goProjectStatementsForm" method="post" action="<%=baseUrl%>/project/projectStatements/goProjectStatements.do?method=checkUser"  onSubmit="javascript:message();">
   部门:
    <select name="department" class="input">
      <option value="1B">第一监理部</option>
      <option value="2B">第二监理部</option>
      <option value="3B">第三监理部</option>
      <option value="4B">第四监理部</option>
      <option value="5B">第五监理部</option>
      <option value="6B">第六监理部</option>
  <option value="NS">南沙办</option>
  <option value="ZX">工程咨询部</option>
  <option value="ZHS">中山分公司</option>
      <option value="7B">一分公司</option>
  <option value="ZHX">智信分公司</option>
  <option value="ZCH">增城分公司</option>
      <option value="ZHG">公司直管项目</option>
      <option value="BB">公司本部</option>
    </select>
    部门密钥:
    <input name="deparPW" type="password" size="12" maxlength="10" class="input"/>
  年份:
    <select name="year0" class="input">
<option value="2008">2008</option>
    <option value="2009">2009</option>
    <option value="2010">2010</option>
    <option value="2011">2011</option>
    <option value="2012">2012</option>
    <option value="2013">2013</option>
    <option value="2014">2014</option>
    <option value="2015">2015</option>
    <option value="2016">2016</option>
  </select>
  季度:
  <select name="quarter" class="input">
    <option value="1">第一季度</option>
    <option value="2">第二季度</option>
    <option value="3">第三季度</option>
    <option value="4">第四季度</option>
  </select>
编制日期:
<input name="createTime" type="text" size="12" class="input" value="<%=now%>"/>
<a href="javascript:" onClick="return showCalendar('createTime', 'y-mm-dd');"><img src="<%=baseUrl%>/images/calendar.gif" border="0" alt=""/></a><input type="submit" name="Submit" value="进入"/>
  </form>
  </td></tr>
  </table>
</div><table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><font color="red"><html:messages id="error"><bean:write name="error"/></html:messages></font></td>
  </tr>
</table>
<%@include file="/public/footer.jsp"%>
Action中对应的方法是:
public ActionForward checkUser(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

 GoProjectStatementsForm goPSF = (GoProjectStatementsForm) form; String department = goPSF.getDepartment();
String deparPW = goPSF.getDeparPW();
String year = goPSF.getYear0();
String quarter = goPSF.getQuarter();
String createTime = goPSF.getCreateTime(); HttpSession session = request.getSession();
session.setAttribute("department", department);// 全局变量,保存部门
session.setAttribute("year0", year);// 全局变量,保存年份
session.setAttribute("quarter", quarter);// 全局变量,保存季度
session.setAttribute("createTime", createTime); ApplicationContext context = new FileSystemXmlApplicationContext(
"classpath:applicationContext.xml");
projectService = (IProjectService) context.getBean("projectService");
boolean result = projectService.checkGo(department, deparPW);
if (result) {
         goProStatSummary(request,year,quarter,department);
    return mapping.findForward("summary");
} else {
msgs.clear();
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("user.login.failed"));
this.saveErrors(request, msgs);
return mapping.findForward("index");
}
}其中调用的主要方法goProStatSummary是:
private void goProStatSummary(HttpServletRequest request,String year,String quarter,String loginDepart) {
String department = ""; String thisQuarterEndTime = year + Util.getTQEndTime(quarter);// 获得本季结束时间
String yearStartTime = year + "-1-1";// 获得年初时间
String thisQuarterStartTime = year + Util.getTQStartTime(quarter);// 获得本季开始时间 ProStatSummary heJiProStatSummary = new ProStatSummary();
List summary=new ArrayList();
List projectsListFYearTTQ = null;// 1.年初至本季止完工工工程
List projectsListThisQuery = null;// 2.本季完工工程
List projectsListBuilding = null;// 3.在建工程列表
ProStatSummary proStatSummary = null;
int len = departments.length;
for (int i = 0; i < len; i++) {
department = departments[i];
projectsListFYearTTQ = projectService.findProjects("1",
yearStartTime, thisQuarterEndTime, department);
if (quarter.equals("1")) {
projectsListThisQuery = projectsListFYearTTQ;
} else {
projectsListThisQuery = projectService.findProjects("2",
thisQuarterStartTime, thisQuarterEndTime, department);
}
projectsListBuilding = projectService.findProjects("3", "",
thisQuarterEndTime, department);
proStatSummary = projectService.setStatSummary(
projectsListFYearTTQ, projectsListThisQuery,
projectsListBuilding, year, quarter);
heJiProStatSummary = projectService.getHeJiProStatSummary(
heJiProStatSummary, proStatSummary);
proStatSummary.setDepartment_EN(department);
proStatSummary.setDepartment_CH(changeDepartment(department));
if(loginDepart.equals(department)||loginDepart.equals("BB")){
proStatSummary.setIsDepartment("1");
}

summary.add(proStatSummary);
}
projectsListFYearTTQ = null;// 1.年初至本季止完工工工程
projectsListThisQuery = null;// 2.本季完工工程
projectsListBuilding = null;// 3.在建工程列表
proStatSummary = null;
request.setAttribute("summaryList",summary);
request.setAttribute("heJiProStatSummary", heJiProStatSummary);
request.setAttribute("year", year);
request.setAttribute("quarter", quarter);
summary=null;
heJiProStatSummary=null; }问题是:调用完方法goProStatSummary进行计算后,跳转到return mapping.findForward("summary");同样的运行条件下程序有时跳转有时不跳转,到底是什么原因呢?很困惑了几天,还请大虾帮帮忙。

解决方案 »

  1.   

    goProStatSummary执行需要多少时间?
    有没有可能超时了?
      

  2.   

    goProStatSummary所花费的时间是72578毫秒,应该从哪些地方排查是超时了呢?是不是jsp页面上有相关代码?请高手继续加以关注
      

  3.   

    我在自己的机子上运行就没问题,可以跳转,而且计算结果都显示正确,传到服务器上去就有时跳转有时不跳转,JDK1.5、Tomcat5版本都是差不多的,我的系统是XP,服务器是windows server 2003,怪事了,一直都解决不了,大家有没有遇到过这样的情况啊?
      

  4.   

    看你的for循环,里面逻辑太多了
      

  5.   

    兄弟你把goProStatSummary(request,year,quarter,department);放到if (result)条件前面再试试确定一下是不是超时的问题
      

  6.   

    我这程序数据量大的时候计算量就大,所要花费的时间就越多,一多他就不跳转了,数据量小的时候,计算时间小的时候他就可以跳转,后来请教一高手说是Tomcat的配置问题:说把cof/server.xml中的 <Connector
    port="8080"               maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true" />connectionTimeout改大点就行了,可是我改成3000000都不行呢,郁闷,不知道还有哪里的问题了。我现在的解决方案是:将计算结果保存到数据库中,然后再来读数据库,中间在跳转之前不计算了就能跳转了,烦躁,但是上面的问题一直困扰我,是什么原因呢?计算时间也才1分多钟啊,这么点时间都等不起?不跳转了?我不信。请高手继续跟进,直到解决啊
      

  7.   

    会不会数据库死锁,或者内存溢出 用jprofile看看吧