JSP分页:java.lang.NullPointerException
==============================================
我做的是书上一个JSP分页浏览,可是什么都写上了竟然出了个空指针错误
请高手帮忙看下
错误信息:
root cause
java.lang.NullPointerException
org.apache.jsp.display_jsp._jspService(display_jsp.java:237)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
==============================================
JSP分页浏览页面:
<%@ page contentType= "text/html;charset=GB2312 " %>
<%@ page import= "java.sql.* " %>
<%@ page import= "user.showbypage " %>
<%@ page import= "java.io.* " %>
<jsp:useBean id= "handlePage " class= "user.showbypage " scope= "session " >
</jsp:useBean>
<HTML>
<BODY bgcolor=cyan> <font size=9>
<%! //声明一个共享的连接对象:
Connection con=null;
//显示数据库记录的方法:
public void showList(ResultSet rs,javax.servlet.jsp.JspWriter out,int n)
{try
{
out.print( " <table border=1> ");
out.print( " <TR> ");
out.print( " <TH width=50> "+ "客户登陆名 ");
out.print( " <TH width=50> "+ "真实姓名 ");
out.print( " <TH width=100> "+ "电子邮箱 ");
out.print( " <TH width=100> "+ "联系电话 ");
out.print( " <TH width=100> "+ "传真 ");
out.print( " <TH width=100> "+ "通信地址 ");
out.print( " <TH width=200> "+ "备注 ");
out.print( " </TR> ");
for(int i=1;i <=n;i++)
{
out.print( " <TR> ");
String username=rs.getString(1);
out.print( " <TD> "+username+ " </TD> ");
String truename=rs.getString(2);
out.print( " <TD> "+truename+ " </TD> ");
String email=rs.getString(3);
out.print( " <TD> "+email+ " </TD> ");
String phone=rs.getString(4);
out.print( " <TD> "+phone+ " </TD> ");
String fax=rs.getString(5);
out.print( " <TD> "+fax+ " </TD> ");
String address=rs.getString(6);
out.print( " <TD> "+address+ " </TD> ");
String comment=rs.getString(7);
out.print( " <TD> "+comment+ " </TD> ");
out.print( " </TR> ") ;
rs.next();
}
out.print( " </table> ");
}
catch(Exception e){}
//catch(IOException ioe) {}
//catch(SQLException sqle){}
//catch(NullPointerException nullpointere) {out.print( "空指针异常! ");}
}
%>
<%
Statement sql=null;
ResultSet rs=null;
int rowCount=0; //总的记录数。
//第一个客户负责建立连接对象:
if(con==null)
{ try{Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");
}
catch(ClassNotFoundException e)
{out.print(e);}
try
{con=DriverManager.getConnection( "jdbc:odbc:pubs ", "sa ", "841028 ");
//sql=con.createStatement();
sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
//返回可滚动的结果集:
rs=sql.executeQuery( "SELECT * FROM students ");
//将游标移动到最后一行:
rs.last();
//获取最后一行的行号:
int number=rs.getRow();
//获取记录数:
rowCount=number;
//设置每页显示的记录数:
handlePage.setPageSize(4);
//计算总页数:
handlePage.setPageCount(rowCount,handlePage.getPageSize());
out.print( "共有 "+handlePage.getPageCount()+ "页, ");
out.print( "每页显示 "+handlePage.getPageSize()+ "条记录 ");
}
catch(SQLException sqle)
{out.print( "数据库操作失败! ");
}
}
//其它客户通过同步块使用这个连接:
else
{ synchronized(con)
{ try {
//sql=con.createStatement();
sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
//返回可滚动的结果集:
rs=sql.executeQuery( "SELECT * FROM students ");
//将游标移动到最后一行:
rs.last();
//获取最后一行的行号:
int number=rs.getRow();
//获取记录数:
rowCount=number;
//设置每页显示的记录数:
handlePage.setPageSize(4);
//计算总页数:
handlePage.setPageCount(rowCount,handlePage.getPageSize());
out.print( "共有 "+handlePage.getPageCount()+ "页, ");
out.print( "每页显示 "+handlePage.getPageSize()+ "条记录 ");
}
catch(SQLException sqle){}
}
}
%>
<%--选择显示某页的表单 --%>
<% String str=response.encodeRedirectURL( "display.jsp ");%>
<Form action= " <%=str%> " method= "post " >
显示上一页:
<Input type= "submit " name= "a " value= "previous ">
显示下一页:
<Input type=submit name= "a " value= "next ">
<br> <br>
转到第 <Input type= "text " size= "5 " name= "a " value= "1 "> 页
<Input type= "submit " value= "submit ">
</FORM>
<% //获取表单提交的信息:
String s=request.getParameter( "a ");
if(s==null)
{s= "1 ";
}
if(s.equals( "next "))
{ int n=handlePage.getShowPage(); //获取目前的页数。
n=(n+1); //将页数增1。
if(n> handlePage.getPageCount())
{ n=handlePage.getPageCount();
}
handlePage.setShowPage(n); //显示该页
out.print( "目前显示第 "+handlePage.getShowPage()+ "页 ");
//将游标移到:
rs.absolute((n-1)*handlePage.getPageSize()+1);
//显示第该页的内容:
if(rs!=null){
showList(rs,out,handlePage.getPageSize());
}
}
else if(s.equals( "previous "))
{ int n=handlePage.getShowPage(); //获取目前的页数。
n=(n-1); //将页数减1。
if(n <=0)
{ n=1;
}
handlePage.setShowPage(n); //显示该页
out.print( "目前显示第 "+handlePage.getShowPage()+ "页 ");
//将游标移到:
rs.absolute((n-1)*handlePage.getPageSize()+1);
//显示第该页的内容:
if(rs!=null){
showList(rs,out,handlePage.getPageSize());
}
}
else
{ int m;
try{m=Integer.parseInt(s);
}
catch(NumberFormatException e2){m=handlePage.getShowPage();}
if(m> handlePage.getPageCount())
{ m=handlePage.getPageCount();
}
else if(m <=0)
{m=1;
}
handlePage.setShowPage(m);
out.print( "目前显示第 "+handlePage.getShowPage()+ "页 ");
int n=handlePage.getShowPage();
//将游标移到 (n-1)*handlePage.getPageSize()+1;
rs.absolute((n-1)*handlePage.getPageSize()+1);
//显示该页的内容:
if(rs!=null){
showList(rs,out,handlePage.getPageSize());
}
}
%>
</BODY>
</HTML>
[解决办法]
很显然。。lz的bean中没有类成员“String a”,调用String s=request.getParameter( "a ")时,肯定是空的咯!
解决:在bean中加private String a,以及相应的getter和setter方法。good luck!!!