本文实例讲述了jsp实现添加功能和分页显示的方法。分享给大家供大家参考。具体如下:
学习目标:
① 进一步掌握mvc设计模式;
② 掌握添加功能的实现;
③ 掌握分页显示功能的实现。
主要内容:
① 通过用户信息添加功能进一步介绍mvc模式;
② 通过用户信息的分页显示介绍分页显示功能的原理和实现。
1、如何采用mvc模式完成用户添加?
首先考虑与人如何交互:应该有一个输入用户信息的界面,包含用户名和口令,另外需要一反馈的界面。
然后考虑功能如何实现:需要在user类中添加一个方法,完成用户信息的添加。
最后考虑控制器:获取信息;调用javabean;传值;选择界面响应。
2、添加用户的界面
实际应用中的信息项比较多,并且需要对用户输入信息进行验证。这里重点强调添加过程,所以对问题进行简化。可以在登录界面的基础上修改,参考代码如下:
<%@ page contenttype="text/html;charset=gb2312"%>
添加用户<br>
<form name="form1" method="post" action="adduser">
用户id:<input type="text" name="username"><br>
口令:<input type="password" name="userpass"><br>
<input type="submit" value="添加"><input type="reset" value="重置">
</form>
<%@ include file="contact.jsp"%>
3、在user中增加方法
public boolean adduser()
{
connection con = null;
statement stmt = null;
boolean b; // 表示添加成功与否
try{
// 指出连接数据库所需要的驱动程序
class.forname("oracle.jdbc.driver.oracledriver");
// 建立与数据库之间的连接
// 需要把myserver修改为自己的数据库服务器的ip地址
// 把mydb修改成自己的数据库)
con = drivermanager.getconnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger");
// 编写查询数据库信息的sql语句
string sql="insert into usertable(username,userpass) values('"+username+"','"+userpass+"')";
// 创建语句对象,用于执行sql语句
stmt = con.createstatement();
// 执行没有结果集返回的语句,返回的是影响数据库表中记录的个数
int n = stmt.executeupdate(sql);
if(n>0)
b = true;
else
b = false;
}catch(exception e){
b = false;
}
finally{
// 关闭相关对象
if(stmt!=null) try{ stmt.close(); }catch(exception ee){}
if(con!=null) try{ con.close(); }catch(exception ee){}
}
return b;
}
4、使用servlet进行控制
参考代码如下:
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
public class adduser extends httpservlet
{
public void doget(httpservletrequest request,httpservletresponse response)
throws ioexception,servletexception
{
request.setcharacterencoding("gb2312");
// 第一步:获取用户的输入信息
string username = request.getparameter("username");
string userpass = request.getparameter("userpass");
// 第二步:调用javabean
user user = new user();
user.setusername(username);
user.setuserpass(userpass);
boolean b = user.adduser();
// 第三步:传值
string info;
if(b)
info="添加成功!";
else
info="添加失败!";
request.setattribute("addinfo",info);
// 第四步:选择一个界面对用户进行响应
string forward="getalluser";
requestdispatcher rd = request.getrequestdispatcher(forward);
rd.forward(request,response);
}
public void dopost(httpservletrequest request,httpservletresponse response)
throws ioexception,servletexception
{
doget(request,response);
}
}
此处添加完成之后跳转到userlist.jsp文件处理,但是在显示之前需要获取数据,所以需要先执行servlet,所以专向了getalluser控制器。
5、修改配置文件
<servlet>
<servlet-name>adduser</servlet-name>
<servlet-class>servlet.adduser</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>adduser</servlet-name>
<url-pattern>/adduser</url-pattern>
</servlet-mapping>
6、在列表界面显示提示信息
修改userlist.jsp代码如下,红色部分为增加的内容:
<%@ page contenttype="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<font color="red">
${addinfo}
</font>
<br>
<c:foreach var="user" items="${users}">
用户名:${user.username} 口令:${user.userpass} <br>
</c:foreach>
7、运行测试
输入正确的用户名和口令测试;
输出已经存在的用户名进行测试。
8、 添加分页显示
经过不断的添加,数据库表中已经有大量的记录。当记录比较多的时候就应该进行分页显示。分页显示可以采用多种方式:
① 在sql中进行控制,只查询需要的记录;
② 在遍历结果集的时候,只封装相关的记录;
③ 在显示的时候进行控制。
第一种方式对开发人员的sql水平要求比较高,第三种方式传递的数据量比较大,所以我们介绍第二种。
要完成分页显示,需要做3个方面的修改:
① 界面上增加分页显示的超链接;
② 修改user.java,在遍历结果集的时候进行控制,另外需要增加获取页码数的方法;
③ 在控制器中传递需要的页码和总页码。
9、 在界面上增加分页显示功能
<%@ page contenttype="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<font color="red">
${addinfo}
</font>
<br>
<a href="getalluser?pageno=1">第一页</a>
<a href="getalluser?pageno=${pageno-1}">上一页</a>
<a href="getalluser?pageno=${pageno+1}">下一页</a>
<a href="getalluser?pageno=${pagecount}">最后一页</a>
<br>
<c:foreach var="user" items="${users}">
用户名:${user.username} 口令:${user.userpass} <br>
</c:foreach>
其中,pageno表示当前页码,pagecount表示总页数。
10、在user.java中增加获取总页码的方法
public int getpagecount()
{
connection con = null;
statement stmt = null;
resultset rs = null;
try{
// 指出连接数据库所需要的驱动程序
class.forname("oracle.jdbc.driver.oracledriver");
// 建立与数据库之间的连接
con = drivermanager.getconnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger");
// 编写查询数据库信息的sql语句
string sql="select count(*) from usertable";
// 创建语句对象,用于执行sql语句
stmt = con.createstatement();
// 执行sql语句得到结果集
rs = stmt.executequery(sql);
rs.next();
// 得到总的记录数
int number = rs.getint(1);
return (number-1)/10+1;
}catch(exception e){
return 0;
}
finally{
// 关闭相关对象
if(rs!=null) try{ rs.close(); }catch(exception ee){}
if(stmt!=null) try{ stmt.close(); }catch(exception ee){}
if(con!=null) try{ con.close(); }catch(exception ee){}
}
}
11、增加按照页码获取信息的方法
public arraylist getuserbypage(int pageno)
{
int number=10;
// 每一页显示的记录数
int begin = (pageno * number) - 9;
int end = pageno * number;
int index=1;
connection con = null;
statement stmt = null;
resultset rs = null;
arraylist users = new arraylist();
try{
// 指出连接数据库所需要的驱动程序
class.forname("oracle.jdbc.driver.oracledriver");
// 建立与数据库之间的连接
con = drivermanager.getconnection("jdbc:oracle:thin:@192.168.0.170:1521:fhdn","scott","tiger");
// 编写查询数据库信息的sql语句
string sql="select * from usertable";
// 创建语句对象,用于执行sql语句
stmt = con.createstatement();
// 执行sql语句得到结果集
rs = stmt.executequery(sql);
// 遍历结果集
while(rs.next())
{
// 在begin之前的记录是不显示的
if(index<begin){
index++;
continue;
}
// 在end之后的记录也不显示
if(index>end)
break;
index++;
string username = rs.getstring(1);
string userpass = rs.getstring(2);
// java.util.date birthday = rs.getdate(3);
// int age = rs.getint(4);
user user = new user();
user.setusername(username);
user.setuserpass(userpass);
users.add(user);
}
}catch(exception e){
system.out.println(e.getmessage());
}
finally{
// 关闭相关对象
if(rs!=null) try{ rs.close(); }catch(exception ee){}
if(stmt!=null) try{ stmt.close(); }catch(exception ee){}
if(con!=null) try{ con.close(); }catch(exception ee){}
}
return users;
}
12、修改控制器
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
public class getalluser extends httpservlet
{
public void doget(httpservletrequest request,httpservletresponse response)
throws ioexception,servletexception
{
// 第一步:获取用户的输入信息
string pageno=request.getparameter("pageno");
int ipageno=1;
if(pageno!=null)
{
ipageno = integer.parseint(pageno);
}
// 第二步:调用javabean
user user = new user();
arraylist users=null;
users = user.getuserbypage(ipageno);
int pagecount=user.getpagecount();
// 第三步:传值
request.setattribute("users",users);
request.setattribute("pageno",new integer(ipageno));
request.setattribute("pagecounter",new integer(pagecount));
// 第四步:选择一个界面对用户进行响应
string forward="userlist.jsp";
requestdispatcher rd = request.getrequestdispatcher(forward);
rd.forward(request,response);
}
public void dopost(httpservletrequest request,httpservletresponse response)
throws ioexception,servletexception
{
doget(request,response);
}
}
13、之后再进行测试运行
14、增加对第一页和最后一页的控制
如果已经在第一页,就不能再点击第一页或者首页。如果已经在最后一页,就不能再点击最后一页或者下一页。修改userlist.jsp中代码如下(部分代码):
<c:if test="${pageno!=1}">
<a href="getalluser?pageno=1">第一页</a>
<a href="getalluser?pageno=${pageno-1}">上一页</a>
</c:if>
<c:if test="${pageno!=pagecounter}">
<a href="getalluser?pageno=${pageno+1}">下一页</a>
<a href="getalluser?pageno=${pagecounter}">最后一页</a>
</c:if>
这里设置为不显示,也可以设置为不添加超链接。
15、增加对异常的处理
如果用户按照这样的方式访问:http://127.0.0.1:8080/ch8/getalluser?pageno=aaa,将产生异常。因为页码不是数字,所以需要进行异常处理。修改:
复制代码 代码如下:
ipageno = integer.parseint(pageno);
为:
复制代码 代码如下:
try{ ipageno = integer.parseint(pageno); }catch(exception e){}
希望本文所述对大家的jsp程序设计有所帮助。
【说明】:
本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!