牧童
写手
写手
  • 铜币11枚
  • 威望0点
  • 贡献值0点
阅读:626回复:4

请教一个JSP程序的调试

楼主#
更多 发布于:2004-02-10 15:01
我这个程序调试编译都通过了,可是出现的结果却不对。不知道是什么原因。这是一个表单处理程序:
.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)

不知道是什么原因,十分迫切,望高人指点,感激不尽!
来过
mumu
写手
写手
  • 铜币0枚
  • 威望0点
  • 贡献值0点
1C#
发布于:2004-02-15 23:02
Re:请教一个JSP程序的调试
二楼的你好,他贴的那个"程序"分两个文件,后面那部分是check.jsp.

看一眼就乱七八糟的,都想吐了.

要是楼主在我对面坐着,我就把袜子脱了丢过去了:))
如果BBS也存在地球引力的话,先把楼主推到楼下再说:((

总之,楼主的存在,使我不免有了使用暴力的想法.
王小波说:“中年妇女在中国是一种自然灾害,这倒不是因为她们不好看,而是因为她们故意要恶心人。” 一天,我乘坐公交车,一位MM突然转过头来对我说:“你帅吗?”我说:“我不帅!”MM突然给我一巴掌,并说:“我最讨厌说谎的人了!” 如果你更热爱金钱而非自由,更习惯于被奴役的安宁而畏惧令人充满活力的争取自由的抗争,那么,请你静静地走开。我们不会乞求你的建议或是帮助。伏下身去讨好那喂养你的人吧。但愿身上的锁链不会给你造成太多的痛苦,但愿未来的人们不会记起你曾经是我们的国人 Samuel Adams: 18世纪美国独立革命重要领袖,著有“殖民者的权利”
mumu
写手
写手
  • 铜币0枚
  • 威望0点
  • 贡献值0点
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 修改 ]
王小波说:“中年妇女在中国是一种自然灾害,这倒不是因为她们不好看,而是因为她们故意要恶心人。” 一天,我乘坐公交车,一位MM突然转过头来对我说:“你帅吗?”我说:“我不帅!”MM突然给我一巴掌,并说:“我最讨厌说谎的人了!” 如果你更热爱金钱而非自由,更习惯于被奴役的安宁而畏惧令人充满活力的争取自由的抗争,那么,请你静静地走开。我们不会乞求你的建议或是帮助。伏下身去讨好那喂养你的人吧。但愿身上的锁链不会给你造成太多的痛苦,但愿未来的人们不会记起你曾经是我们的国人 Samuel Adams: 18世纪美国独立革命重要领袖,著有“殖民者的权利”
爱情程序员
小有名气
小有名气
  • 铜币0枚
  • 威望0点
  • 贡献值0点
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 爱情程序员 修改 ]
システムエンジニア [url]http://3rdcom.yeah.net/[/url]
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
4C#
发布于:2004-02-11 16:25
Re:请教一个JSP程序的调试
不要相信我啊,我不是高手!!!!千万不要相信我
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
游客

返回顶部