2004-05-26 1、 今天在同事sunday_28的帮助下,修正昨天做的页面还有服务端的方法,全部采用post访问。 a) 服务端dopost方法修改如下:增加编码设置,同时对jsp提交事件进行了判断。在getrushtrooprecord方法中增加了参数response以定向到报表数据页面rushtrooprpt.jsp。 public void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { request.setcharacterencoding("gb2312"); //doget(request, response); /** * 保存抢险队伍信息 */ if ((request.getparameter("savebtn") != null) && (request.getparameter("savebtn").equals("提 交"))) { system.out.println("save record"); saverushtrooprecord(request); } /** * 查询抢险队伍信息,以arraylist格式返回 */ if ((request.getparameter("searchbtn") != null) && (request.getparameter("searchbtn").equals("报 表"))) { system.out.println("get record"); getrushtrooprecord(request, response); } } b) getrushtrooprecord方法修改如下:在最后增加response.sendredirect("rushtrooprpt.jsp");以定向到报表数据页面rushtrooprpt.jsp。 c) 做为酬劳,我为其编写了一个根据两个日期获取sql语句where条件的方法原型。其中涉及到date的格式设置、date和string的转换、string和date的转换等,对初学者会有一定帮助的,由于是原型,没有对其中的语法特别讲究,尤其是变量的命名。其代码原型如下: /** * 根据给定的起止日期返回sql语句的查询条件 * @param begintime string 格式如:2004-05-25 09:00:00 * @param endtime string * @return string */ private string getfilter(string begintime, string endtime){ try{ long dis = 0; char chb[], che[]; chb = begintime.tochararray(); che = endtime.tochararray(); dateformat df = new simpledateformat("yyyy-mm-dd"); date bdt = df.parse(begintime); date edt = df.parse(endtime); long bint = bdt.gettime(); long eint = edt.gettime(); //天 dis = (long)((eint - bint)/(24 * 60 * 60 * 1000)) + 1; int i = 0; string strfilter = ""; string strequal = ""; long lnewdate = bint; for(i = 0; i < dis; i++){ date d1 = new date(lnewdate); string snewdate = df.format(d1); if(strfilter.equals(strequal)){ strfilter = "(frd >='" + snewdate.copyvalueof(snewdate.tochararray(), 0, 10) + " 00'" + " and frd <='" + snewdate.copyvalueof(snewdate.tochararray(), 0, 10) + " 23')"; } else{ strfilter = strfilter + "or" + "(frd >='" + snewdate.copyvalueof(snewdate.tochararray(), 0, 10) + " 00'" + " and frd <='" + snewdate.copyvalueof(snewdate.tochararray(), 0, 10) + " 23')"; } //毫秒 lnewdate += (long)(24 * 60 * 60 * 1000); } return strfilter; }catch(exception e){ e.printstacktrace(); return ""; } } d) 其他 2、 避免服务需要重新启动的方法:修改c:\program files\mapinfo\mapxtreme-4.7.0\tomcat-4.1\conf下的server.xml,增加一行 <context path="/water" docbase="/water" debug="0" reloadable="true"/> 其中water是发布的应用的名称。改语句在 <context path="/examples" docbase="examples" debug="0" reloadable="true" crosscontext="true"> 前面加即可,用了觉得很不错。 3、 昨天提到了报表数据不能看到的问题,今天调试试,发现相同的代码在我的同时sunday_28那里可以看到,最后发现是配置的问题。正在查看。 4、 报表数据看不到的原因终于查明:是由于服务端的getrushtrooprecord方法中的valuerd定义的位置不正确,应该放到while语句之中。这应该是初用java的人很容易犯的错误。我的思路是这样:用valuerd保存一条记录的各个字段,valuers保存各个valuerd对象,由于是demo才这样做的,不提倡。当valuers.add完一个valuerd后,把valuerd中的内容清除,因此在今天调试时还曾经用了arraylist的remove方法,这是错误的。按照我个人的理解,valuerd中的对象实际上指向内存中的某一个地址,在valuers中也是指向该地址的,如果把valuerd中的对象remove掉,则valuers中也必然找不到该对象,在jsp端自然也不能看到该对象的数据。另一方面,如果不new一个新的valuerd,则valuers每add一个valuerd,实际上都是一样的内容,而且valuerd中不再是一条记录的各个字段的信息,而是所有记录的累加。由于我在数据表中又一条记录的非关键字段都是空,又是最末一条记录,所以在jsp端显示都是这一条记录,自然在页面上看不到数据。因此原先所怀疑的xml配置的问题实际上也是病急乱投医的一种做法,因此劝告大家在碰到问题时,要拓宽思路,从各个方面都予以考虑、怀疑,这样会有所增益的。 5、 不小心一下子写了三十多页,还真的有点成就感,^_^ ,希望大家也都如是。 6、 今天尽管没做什么,但感觉还是很有收获的,但愿每一天都不白过。 7、 晚上帮我的同时sunday_28调试方法,做了补充和修改,其中用到了arraylist、string、date、integer等相关的方法,有一定的参考价值,没有做任何优化,结果是正确,其他就留给sunday_28去处理啦,^_^。 /** * 获取条件记录集中的最高最低水位及其时间,偷懒没有用存储过程,只好如此 */ public void getfluxtable() { arraylist arr = new arraylist(); arraylist valuers = new arraylist(); try { operationbean ob = new operationbean(); statement stat = null; resultset rs = null; string date = ""; string mintime = "", maxtime = ""; int tempb = 0, temps = 0, i = 0; string strsql = "select waterstationid,flux ,daytime from water where daytime between '2004-5-21 00:00' and '2004-5-22 23:00' and waterstationid='w00001' order by daytime"; if (stat == null) stat = ob.getconnection().createstatement(); rs = stat.executequery(strsql); arraylist valuerd = new arraylist(); while (rs.next()) { if (! (rs.getdate("daytime").tostring()).equals(date)) { if (i != 0) valuerd = new arraylist(); date = rs.getdate("daytime").tostring(); system.out.println(mintime + " " + maxtime); system.out.println(temps + " " + tempb); mintime = rs.getdate("daytime").tostring() + " " + rs.gettime("daytime").tostring(); maxtime = rs.getdate("daytime").tostring() + " " + rs.gettime("daytime").tostring(); temps = tempb = rs.getint("flux"); system.out.println(mintime + " " + maxtime); system.out.println(temps + " " + tempb); valuerd.add(0, mintime); valuerd.add(1, maxtime); integer temps = new integer(temps); valuerd.add(2, temps); integer tempb = new integer(tempb); valuerd.add(3, tempb); valuers.add(i, valuerd); i++; } else { if (rs.getint("flux") > tempb) { tempb = rs.getint("flux"); maxtime = rs.getdate("daytime").tostring() + " " + rs.gettime("daytime").tostring(); system.out.println("tempb=" + tempb + " maxtime" + maxtime); integer tempb1 = new integer(tempb); valuerd.set(3, tempb1); valuerd.set(1, maxtime); valuers.set(i - 1, valuerd); } else { if (rs.getint("flux") < temps) { mintime = rs.getdate("daytime").tostring() + " " + rs.gettime("daytime").tostring(); temps = rs.getint("flux"); system.out.println("temps=" + temps + " mintime" + mintime); integer temps1 = new integer(temps); valuerd.set(2, temps1); valuerd.set(0, mintime); valuers.set(i - 1, valuerd); } } } } if (valuers != null) { for (int j = 0; j < valuers.size(); j++) { arraylist value = (arraylist) valuers.get(j); if (value != null) { system.out.println(value.get(0).tostring() + " " + value.get(1).tostring() + " " + value.get(2).tostring() + " " + value.get(3).tostring()); } } } } catch (exception e) { system.out.println(e.getmessage()); e.printstacktrace(); } } 8、 其他
|