|
阅读:626回复:4
请教一个JSP程序的调试
我这个程序调试编译都通过了,可是出现的结果却不对。不知道是什么原因。这是一个表单处理程序:
.HTM程序: <HTML> <HEAD> <TITLE>表单提交</TITLE> </HEAD> <BODY> <form method="post" action="check.jsp"> <TABLE align=center border=0 cellpadding=0 cellspacing=0> <tr> <TD>姓名:</TD> <TD ><INPUT type="text" name="name" size=20> </td> </tr> <tr> <td>年龄:</TD> <td> <INPUT type=TEXT name="age" size=20> </TD> </TR> <tr> <td>email地址:</td> <td><input type=text name="email" size=20> </TD> </TR> <tr> <td>填表日期:</TD> <td><input type=text name="year" size="4">年 <input type="text" name="month" size=2>月 <input type=text name="day" size="2">日 </TD> </TR></TABLE> <br> <table align=center> <tr> <td><input type="submit" value="确认" name="submit"> <input type=reset value="全部重写" name="reset"> </p> </form> </body> </html> </BODY> </HTML> 处理程序: <%@page contentType="text/html"%> <html> <head><title>JSP Page</title></head> <body> <% class check{ public boolean isEmpty(String str){ str=str.trim(); if(str.length()==0) return true; else return false; } public boolean isInt(String str) { str=str.trim(); try{ Integer int_num=new Integer(0); int int_out=int_num.parseInt(str); } catch(NumberFormatException e){ return false; } return true; } public boolean isBetween(String str,int low,int high) { str=str.trim(); Integer int_num=new Integer(0); int num=int_num.parseInt(str); if(num<=high&&num>=low) { return true; } else{ return false;} } public String isDate(String stryear,String strmonth,String strday) { stryear=stryear.trim(); strmonth=strmonth.trim(); strday=strday.trim(); if(isEmpty(stryear)) { String str="error,year is empty!"; return str; } if(isEmpty(strmonth)) { String str="error,month is empty!"; return str; } if(isEmpty(strday)) { String str="error!day is empty!"; return str; } Integer my_int=new Integer(0); int year=my_int.parseInt(stryear); int month=my_int.parseInt(strmonth); int day=my_int.parseInt(strday); boolean haserror=false; String errormsg="error!"; if(year<1000||year>2010) { haserror=true; errormsg+="year must be in 1000-2010!"; } if(month>12||month<1) { haserror=true; errormsg+="month must be in 1-12!"; } int maxDays=31; if(month==4||month==6||month==9||month==11) { maxDays=30; } else if(month==2) { if(year%4>0) {maxDays=28;} else if(year%100==0&&year%400>0) {maxDays=28;} else{maxDays=29;} } if(!(day>0&&day<=maxDays)) { haserror=true; errormsg+="there isn't "+day+"days in this month!"; } if(haserror) { String str=year+"-"+month+"-"+day+"!"; return errormsg; } else{ String str=year+"-"+month+"-"+day+"!"; return str; } } public String isEmail(String email) { email.trim(); if(isEmpty(email)) { String msg="error!email is empty!"; return msg; } int str_pos=email.indexOf("@"); if(str_pos==-1||email.indexOf(".",str_pos)==-1) { String msg="error!Email format is wrong!"; return msg; } else{ return email; } } } String name=request.getParameter("name"); String age=request.getParameter("age"); String email=request.getParameter("email"); String year=request.getParameter("year"); String month=request.getParameter("month"); String day=request.getParameter("day"); check mycheck=new check(); %> <table border="0" width="600" cellpadding="0" cellspacing="0"> <tr> <td width="30%"> <p align="right">??? </td> <td width="20%"> <p align="left"> <%=name%> </td> <% String str=""; String error=""; if(mycheck.isEmpty(name)) { str="error!name is empty!"; if(name.length()>50) { str="error!name is too long"; } if(str.indexOf("error")!=-1) out.print(str); error="a"; } %> </td> </tr> <td width="30%"> <p align="right"> </td> <td width="20%"> <p align=left> <%=age%> </td> <td width="50%"> <% str=""; if(mycheck.isEmpty(age)) { str="error!age is empty!"; } else if(!mycheck.isInt(age)) { str="error!age must be integer!"; } else if(!mycheck.isBetween(age,0,150)) { str="error!out of bander!"; } if(str.indexOf("error")!=-1) { out.print(str); error+="b"; } %> </td> </tr> <tr> <td width="30%"> <p align="right">E_mail </td> <td width="20%"> <p align="left"> <%=email%> </td> <% str=""; str=mycheck.isEmail("mail"); if(str.indexOf("error")!=-1) { error+="c"; out.print(str); } %> </td> </tr> <tr> <td width="30%"> <p align="right"> </td> <td width="20%"> <p align="left"> <% out.print( year+month+day ); %> </td> <td width="50%"> <% str=mycheck.isDate(year,month,day); if(str.indexOf("error")!=-1) { error+="d"; out.print(str); } %> </td> </tr> </table> <p aling="center"> <% if(mycheck.isEmpty(error)) { %> <form method="post" action="check.jsp"> <TABLE border=0 width="600" cellpadding=0 cellspacing=0> <% if (error.indexOf("a")!=-1) { %> <tr> <td width="30%"> <p align="right"> ??? </td> <td width="70%"> <INPUT type="text" name="name" size=20> </TD> </TR> <% } else{ out.print("<input type=\"hidde\" value=\""+name+"\" name=\"name\">"); } if(error.indexOf("b")!=-1) { %> <tr> <td width="30%"> <p align="right"> ??? </td> <td width="70%"> <input type="text" name="age" size=20> </td> </TR> <% } else{ out.print("<input type=\"hidden\" value=\""+age+"\" name=\"age\">"); } if(error.indexOf("c")!=-1) {%> <tr> <td width="30%"> <p align="right">E-mail??? </TD> <td width="70%"> <input type="text" name="email" size=20> </TD> </TR> <%} else{ out.print("<input type=\"hidden\" value=\""+email+"\" name=\"email\">"); } if(error.indexOf("d")!=-1) { %> <tr> <td width="30%"> <p align="right"> </td> <td width="70%"> <input type="text" name="year" size="4"> <input type="text" name="month" size="2"> <input type="text" name="day" size="2"> </TD> </TR> <% } else{ out.print("<input type=\"hidden\" value=\""+year+"\" name=\"year\">"); out.print("<input type=\"hidden\" value=\""+month+"\" name=\"month\">"); out.print("<input type=\"hidden\" value=\""+day+"\" name=\"day\">");} %> <tr> <td width="40%"> <p align="right"> <input type=submit value="??" name="submit"> </td> <td width="60%"> <input type="reset" value="????" name="reset"> </TD> </TR> </table> </form> <%}%> <%-- <jsp:useBean id="beanInstanceName" scope="session" class="package.class" /> --%> <%-- <jsp:getProperty name="beanInstanceName" property="propertyName" /> --%> </body> </html> 这是书上的一个例子。我编译的时候笔误没有都改过了,我NetBeans IDE3.5.1源编辑器(java官方网站下的)编译,可以运行通过。可是运行结果显示如下: type Exception report message Internal Server Error description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request. exception java.lang.NullPointerException at org.apache.jsp.check$jsp$1check.isEmpty(check$jsp.java:64) at org.apache.jsp.check$jsp._jspService(check$jsp.java:210) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet$JspServletWrapper.service(IDEJspServlet.java:173) at org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.serviceJspFile(IDEJspServlet.java:246) at org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.service(IDEJspServlet.java:339) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:226) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.netbeans.modules.web.monitor.catalina.MonitorValve.invoke(MonitorValve.java:148) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027) at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125) at java.lang.Thread.run(Thread.java:534) 不知道是什么原因,十分迫切,望高人指点,感激不尽! |
|
|
|
1C#
发布于:2004-02-15 23:02
Re:请教一个JSP程序的调试
二楼的你好,他贴的那个"程序"分两个文件,后面那部分是check.jsp.
看一眼就乱七八糟的,都想吐了. 要是楼主在我对面坐着,我就把袜子脱了丢过去了:)) 如果BBS也存在地球引力的话,先把楼主推到楼下再说:(( 总之,楼主的存在,使我不免有了使用暴力的想法. |
|
|
|
2C#
发布于:2004-02-15 22:39
Re:请教一个JSP程序的调试
很久没有看这么乱七八糟的"程序"了.楼主最好排一下版,方便别人帮你查找错误.这也是一种尊重.
因为太乱,所以我也懒得看,再说我也不太懂JAVA.不过,. 我用jboss 323试了一下你的程序,稍改一下那个email验证的部分,就可以输出这样的结果. ??? Jhon Hello 20 E_mail [email protected] 198023 可能jboss宽容一些.不过你的程序能写那么乱,当然是有点问题的,我猜:)). 调试信息不是说空指针异常么,你自已检查一下有没有引用空指针吧. 把你的代码复制下来粘贴的时候,我发现自己实在是痛苦不堪的:(( 真如你贴是一本书的代码的话,劝你还是丢掉那本书吧.例子的怕是东抄西抄的.中英文都杂一块了.学EJB,拿本破书可不行. NetBeans可以做为JSP的容器使吗?我不知道. JBOSS是可以通过的. [ 2004-02-15 22:47:54 mumu 修改 ] |
|
|
|
3C#
发布于:2004-02-15 14:24
Re:请教一个JSP程序的调试
<td>填表日期:</TD>
<td><input type=text name="year" size="4">年 <input type="text" name="month" size=2>月 <input type=text name="day" size="2">日 </TD> 填表日期可以用日期函数以保证正确,不用写下面的判断了 JSP我不太会,可我觉得你应该把你程序的目的和应有的结果写出来,别人帮你看时也容易一点. 不太理解为什么在JSP PAGEJ 里还要一个表单的action=check.jsp ,你的check.jsp呢? 我不是高手,没学过JSP,随便说说 [ 2004-02-15 14:32:14 爱情程序员 修改 ] |
|
|
|
4C#
发布于:2004-02-11 16:25
Re:请教一个JSP程序的调试
不要相信我啊,我不是高手!!!!千万不要相信我 |
|
|