JSP页面跳转后,分页显示失败,SOS!
主页上有一个登录按钮,由Servlet控制转到登录页面,在登录页面,输入用户名和密码后,由Servlet控制转到相应的一个界面(成功),在这个界面,调用JavaBean显示分页数据,可以显示默认的第一页,但“上一页”,“下一页”,“直接跳转到第...页”都不起作用,错误提示如下:
exception
java.lang.NullPointerException
bokeeservlet.control.login.doPost(login.java:45)
bokeeservlet.control.login.doGet(login.java:90)
javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
login.java是控制输入用户名和密码后跳转的Servlet
提示的是空指针,可是参数的确传过来了,那一行代码是:
String loginName=request.getParameter("LoginName").trim();
我把它换成下面的代码:
String loginName=request.getParameter("LoginName")!=null?request.getParameter("LoginName").trim():"";
然后一点击“上一页”,“下一页”,“直接跳转到第...页”,就直接跳到用户名或密码输入错误的情况下的错误提示页面loginError.jsp了。
Servlet代码如下:
package bokeeservlet.control;
import database.operation.*;
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class login extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public String handleString(String s)
{
try
{
byte bb[]=s.getBytes("ISO-8859-1");
s=new String(bb);
}
catch(Exception e){}
return s;
}
public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{
Connection con;
PreparedStatement sql;
ResultSet rs;
loginBean loginbean=null;
HttpSession session=request.getSession(true);
try
{
loginbean=new loginBean();//用于存储登录信息的Bean
session.setAttribute("login",loginbean);
}
catch(Exception e)
{
loginbean=new loginBean();
session.setAttribute("login",loginbean);
}
String loginName=request.getParameter("LoginName")!=null?request.getParameter("LoginName").trim():"";
String password=request.getParameter("Password")!=null?request.getParameter("Password").trim():"";
boolean ok=loginbean.getSuccess();
loginName=handleString(loginName);
password=handleString(password);
boolean boo=(loginName.length()>0)&&(password.length()>0);
try
{
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=bokee";
con=DriverManager.getConnection(uri,"******","******");
String condition="select * from login where name=? and password=?";
sql=con.prepareStatement(condition);
if(boo)
{
sql.setString(1,loginName);
sql.setString(2,password);
rs=sql.executeQuery();
boolean m=rs.next();
if(m==true)
{
loginbean.setLoginName(loginName);
loginbean.setPassword(password);
loginbean.setSuccess(true);
RequestDispatcher dispatcher=request.getRequestDispatcher("loginIndex.jsp");
dispatcher.forward(request,response);
}
else
{
loginbean.setSuccess(false);
RequestDispatcher dispatcher=request.getRequestDispatcher("loginError.jsp");
dispatcher.forward(request,response);
}
}
else
{
loginbean.setSuccess(false);
RequestDispatcher dispatcher=request.getRequestDispatcher("loginError.jsp");
dispatcher.forward(request,response);
}
con.close();
}
catch(SQLException e){}
}
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{
doPost(request,response);
}
}
loginIndex.jsp代码如下:
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="java.sql.*" %>
<%@ page import="database.operation.*" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="WEB-INF/tlds/myTag.tld" prefix="myInformation"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="tags"%>
<html>
<body bgcolor="#FFFBF0">
<tags:topLogin/>
<tags:informationdb/>
<jsp:useBean id="look" class="database.operation.ShowRecordByPage" scope="request" />
<jsp:setProperty name="look" property="databaseName" value="bokee" />
<jsp:setProperty name="look" property="tableName" value="diary" />
<jsp:setProperty name="look" property="user" value="******" />
<jsp:setProperty name="look" property="password" value="******" />
<jsp:setProperty name="look" property="pageSize" value="3" />
<jsp:setProperty name="look" property="showPage" />
<table width="510" height="300" border="0" cellspacing="0" cellpadding="5" style="position:absolute; left:225px; top:171px;">
${look.presentPageResult}
</table>
<table width="510" border="0" cellspacing="0" cellpadding="0" style="position:absolute; left:225px; top:830;">
<tr><td><form action="">
<input type="hidden" name="showPage" value="<%=look.getShowPage()-1 %>" >
<input type="submit" name="g" value="前一页">
</form>
</td>
<td><form action="">
<input type="hidden" name="showPage" value="<%=look.getShowPage()+1 %>" >
<input type="submit" name="g" value="后一页">
</form>
</td>
<td> <form action="">
输入页码:<input type="text" name="showPage" size=5 >
<input type="submit" name="g" value="提交">
</form>
</td>
</tr>
</table>
<tags:photo/>
<br />
<myInformation:information/>
<tags:bottom/>
</body>
</html>
用于实现分页的Bean的代码如下:
package database.operation;
import java.sql.*;
import com.sun.rowset.*;
public class ShowRecordByPage
{ int pageSize=10; //每页显示的记录数
int pageAllCount=0; //分页后的总页数
int showPage=1 ; //当前显示页
StringBuffer presentPageResult; //显示当前页内容
CachedRowSetImpl rowSet; //用于存储ResultSet对象
String databaseName=""; //数据库名称
String tableName=""; //表的名字
String user="" ; //用户
String password="" ; //密码
public ShowRecordByPage()
{ presentPageResult=new StringBuffer();
try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
}
catch(Exception e){}
}
public void setPageSize(int size)
{ pageSize=size;
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName;
try{
Connection con=DriverManager.getConnection(uri,user,password);
Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs=sql.executeQuery("SELECT * FROM "+tableName);
rowSet=new CachedRowSetImpl(); //创建行集对象
rowSet.populate(rs);
con.close(); //关闭连接
rowSet.last();
int m=rowSet.getRow(); //总行数
int n=pageSize;
pageAllCount=((m%n)==0)?(m/n):(m/n+1);
}
catch(Exception exp){}
}
public int getPageSize()
{ return pageSize;
}
public int getPageAllCount()
{ return pageAllCount;
}
public void setShowPage(int n)
{ showPage=n;
}
public int getShowPage()
{ return showPage;
}
public StringBuffer getPresentPageResult()
{ if(showPage>pageAllCount)
showPage=1;
if(showPage<=0)
showPage=pageAllCount;
presentPageResult=show(showPage);
return presentPageResult;
}
public StringBuffer show(int page)
{ StringBuffer str=new StringBuffer();
try{ rowSet.absolute((page-1)*pageSize+1);
for(int i=1;i<=pageSize;i++)
{
str.append("<tr>");
str.append("<td height=28 bgcolor=#CCCCCC>"+rowSet.getString(1)+"("+rowSet.getString(2)+")"+"</td>");
str.append("</tr>");
str.append("<tr>");
str.append("<td height=20 bgcolor=#EBEBEB style=font-size:12px>"+"分类:"+rowSet.getString(3)+"</td>");
str.append("</tr>");
str.append("<tr>");
str.append("<td height=20 bgcolor=#EBEBEB style=font-size:12px>"+"标签:"+rowSet.getString(4)+"</td>");
str.append("</tr>");
str.append("<tr>");
if(rowSet.getString(5).length()>=100)
str.append("<td height=60 bgcolor=#EBEBEB style=font-family:楷体_GB2312;font-size:18px>"+rowSet.getString(5).substring(0,100)+"......"+"</td>");
else
str.append("<td height=60 bgcolor=#EBEBEB style=font-family:楷体_GB2312;font-size:18px>"+rowSet.getString(5)+"</td>");
str.append("</tr>");
str.append("<tr>");
str.append("<td height=25 bgcolor=#EBEBEB align=right><form><input type=button value=评论 name=rowSet.getString(1) /></form></td>");
str.append("</tr>");
rowSet.next();
}
}
catch(SQLException exp){}
return str;
}
public void setDatabaseName(String s)
{ databaseName=s.trim();
}
public String getDatabaseName()
{ return databaseName;
}
public void setTableName(String s)
{ tableName=s.trim();
}
public String getTableName()
{ return tableName;
}
public void setPassword(String s)
{ password=s.trim();;
}
public void setUser(String s)
{ user=s.trim();
}
public String getUser()
{ return user;
}
}
请高手帮帮忙啊,急啊,是课程设计
相关推荐
【jar包】Struts 2文件上传、下载、显示
Struts 2文件上传、下载、显示所需要的2个jar包,jar包清单如下: 1、commons-io.jar 2、commons-fileupload.jar
国央企创新负责人如何借助智能体技术推动内部技术成果转化?.docx
国央企创新负责人如何借助智能体技术推动内部技术成果转化?
演讲计时软件,会议计时软件
演讲计时软件,会议计时软件。目前只测试了win10。win7测试不通过。
【电力系统优化调度】计及源荷两侧不确定性的含风电电力系统低碳调度(Matlab代码实现)
内容概要:本文提出了一种针对含风电电力系统的低碳优化调度模型,充分考虑了电源侧(如风电出力波动)和负荷侧的双重不确定性,采用模型预测控制(MPC)方法实现滚动优化与实时反馈校正,有效提升了调度方案的鲁棒性与低碳性能。该模型结合现代优化算法与控制策略,构建了计及碳排放成本、机组组合、可再生能源消纳及系统安全约束的综合调度框架,能够在复杂不确定环境下实现电力系统经济、环保与可靠的协同运行; 适合人群:具备一定电力系统运行、优化理论基础及Matlab编程能力的研究生、科研人员,以及从事新能源并网、低碳调度与智能电网相关领域的工程技术人员; 使用场景及目标:①研究高比例可再生能源接入背景下电力系统低碳调度的有效策略;②利用MPC框架应对源荷双侧不确定性,提升调度决策的动态适应能力;③支撑学术论文复现、科研课题开发或实际工程项目的仿真验证与优化分析; 阅读建议:建议读者结合Matlab代码深入理解MPC的实现机制,重点关注不确定性建模、滚动时域优化与约束处理方法,通过调整参数和测试不同场景进行仿真验证,以掌握低碳调度模型的设计逻辑与工程应用要点。
通信行业基于MongoDB副本集与分片部署的5G信令数据基座构建:面向高吞吐写入与实时分析的安装优化方案
内容概要:本文系统阐述了MongoDB在通信行业的安装部署实践及其在5G、IoT和AI背景下的深度应用。文章从通信行业数据范式迁移出发,指出传统关系型数据库在应对信令数据、用户画像和设备遥测等半结构化、高并发写入场景下的局限性,强调MongoDB基于BSON文档模型的优势。重点介绍了副本集、分片集群及时序集合三种部署模式的选择依据与配置策略,涵盖操作系统选型、mongod.conf调优参数(如缓存大小、日志设置、绑定IP安全限制)、分片键设计原则以及集群部署顺序等关键技术细节。进一步展示了MongoDB在信令管道、用户画像、IoT遥测和网络分析等典型通信业务中的落地场景,并展望了MongoDB 8.0在时序性能、向量搜索与可查询加密等方面的发展趋势,推动部署架构向边缘-中心协同、安全合规与AI就绪演进。; 适合人群:通信行业后端开发、数据库运维工程师、系统架构师,以及关注NoSQL在高并发、大规模数据场景下应用的技术人员,具备一定数据库和分布式系统基础者更佳。; 使用场景及目标:①掌握面向通信负载的MongoDB副本集与分片集群部署方法;②理解时序集合在基站KPI、设备遥测等场景的优化价值;③构建支持高写入、低延迟、弹性扩展的5G信令与IoT数据基座;④规划符合安全合规与AI融合趋势的下一代数据架构。; 阅读建议:此资源聚焦生产级部署实践,建议结合实际通信业务场景进行配置验证与性能测试,重点关注分片策略、安全加固与版本特性适配,在部署初期即考虑可扩展性与安全性设计。


Web 开发
