servlet学习——分页实现(登录网站的完善)
2011-07-21 15:40
357 查看
Servlet第四讲
(一)如何在servlet中显示图片
在webapps下建立一个文件夹images,然后拷贝图片到此文件下,在servlet中添加:<img src=images/lola.jpg>即可
(二)分页技术详解
2.1分页方法一
先讲分页算法
需要定义四个变量:
int pageSize:每页显示多少条记录
int pageCount:一共有多少页
int pageNow:希望显示第几页
int rowCount:一共有多少条记录
说明:
pageSize是指定的
pageNow是用户选择的
rowCount是从表中查询得到的
pageCount是计算出来的:计算方法——
if(rowCount%pageSize==0){
pageCount=rowCount/pageSize;
}else{
pageCount=rowCount/pageSize+1;
}
举例说明:
有用户表共9条记录:rowCount=9;
每页显示3条记录:pageSize=3;
那么根据我们的算法:pageSize=3刚好不多不少
如果每页显示4条记录:pageSize=4 那么pageCount=3,那么最后一页只有一条记录,所以,不管怎样都是正确的
2.2分页方法二
针对前面提出的问题,用
select 字段名列表 from 表名 where id between ? and ?
以前面的users表为例,显示第三页,该查询语句就是:
select * from users where userId between 7 and 9
这个sql语句确实是比较快,但是它有一个问题,就是如果表的id被删除,那么,某页可能就会少一个记录
解决方案:
ms sqlserver数据库
select top pageSize 字段名列表 from 表名 where id not in
(select top pageSize*(pageNow-1) id from 表名)
以users表为例,显示第三页,查询语句为:
select top 3 * from users where userId not in
(select top 6 userId from users)
My sql数据库
My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为:
SELECT * FROM 表名称 LIMIT M,N
例如从表Sys_option(主键为sys_id)中从第10条记录后开始检索20条记录,语句如下:
select * from sys_option limit 10,20
快速为表增加记录:
insert into users (username,passwd,email,grade) select username,passwd,email,grade from users;
(三)用户登录系统功能改进
参考代码:Wel.java
view plainpublic void process(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html;charset=UTF-8");
PrintWriter pw = res.getWriter();
Connection ct = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 从session中得到用户名
HttpSession hs = req.getSession(true);
String myName = (String) hs.getAttribute("name");
if (myName == null) {
// 返回登陆界面
res.sendRedirect("login?info=error1");
return;
}
// 调整格式
pw.println("<body><center>");
// 在servlet中显示图片
pw.println("<img src="images/lola.gif" mce_src="images/lola.gif"><br>");
pw.println("Welcom,hello<br>");
pw.println("你的用户名是:" + myName);
// 做个超链接
pw.println("<br><a href="login" mce_href="login">返回重新登录</a>");
// ================分页功能===============
int pageSize = 3;// 一页显示几条记录(规定)
int pageNow = 1;// 希望显示第几页(规定)
int rowCount = 0;// 共有几条记录(查表)
int pageCount = 0;// 共有几页(计算)
// 动态的接收pageNow
String sPageNow = req.getParameter("pageNow");
if (sPageNow != null) {
pageNow = Integer.parseInt(sPageNow);// 转换成整数
}
// 首先得到rowCount
// 连接数据库
Class.forName("com.mysql.jdbc.Driver");// 加载驱动
// 得到连接
ct = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/spdb", "root", "root");
ps = ct.prepareStatement("select count(*) from users");
rs = ps.executeQuery();
if (rs.next()) {
rowCount = rs.getInt(1);
}
// 计算pageCount
if (rowCount % pageSize == 0) {
pageCount = rowCount / pageSize;
} else {
pageCount = rowCount / pageSize + 1;
}
ps = ct.prepareStatement("select * from users limit "
+ (pageNow - 1) * pageSize + "," + pageSize);
// 给问号赋值
// ps.setInt(1,(pageNow-1)*pageSize);
// ps.setInt(2,pageSize );
rs = ps.executeQuery();
// 表头
pw.println("<table border=1>");
pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");
while (rs.next()) {
pw.println("<tr>");
pw.println("<td>" + rs.getInt(1) + "</td>");
pw.println("<td>" + rs.getString(2) + "</td>");
pw.println("<td>" + rs.getString(3) + "</td>");
pw.println("<td>" + rs.getString(4) + "</td>");
pw.println("<td>" + rs.getInt(5) + "</td>");
pw.println("</tr>");
}
pw.println("</table>");
// ================分页功能===============
// 上一页
if (pageNow != 1) {
pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow - 1)
+ ">上一页</a>");
}
// 显示超链接
// for (int i = 1; i <= pageCount; i++) {
for (int i = pageNow; i <= pageNow + 4; i++) {
pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + i + ">" + i + "</a>");
}
if (pageNow != pageCount) {
pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow + 1)
+ ">下一页</a>");
}
pw.println("</center></body>");
// String u = req.getParameter("uname");// 得到从LoginCl传递的用户名
// String p = req.getParameter("pass");
} catch (Exception ex) {
ex.printStackTrace();
}
}
(一)如何在servlet中显示图片
在webapps下建立一个文件夹images,然后拷贝图片到此文件下,在servlet中添加:<img src=images/lola.jpg>即可
(二)分页技术详解
2.1分页方法一
先讲分页算法
需要定义四个变量:
int pageSize:每页显示多少条记录
int pageCount:一共有多少页
int pageNow:希望显示第几页
int rowCount:一共有多少条记录
说明:
pageSize是指定的
pageNow是用户选择的
rowCount是从表中查询得到的
pageCount是计算出来的:计算方法——
if(rowCount%pageSize==0){
pageCount=rowCount/pageSize;
}else{
pageCount=rowCount/pageSize+1;
}
举例说明:
有用户表共9条记录:rowCount=9;
每页显示3条记录:pageSize=3;
那么根据我们的算法:pageSize=3刚好不多不少
如果每页显示4条记录:pageSize=4 那么pageCount=3,那么最后一页只有一条记录,所以,不管怎样都是正确的
2.2分页方法二
针对前面提出的问题,用
select 字段名列表 from 表名 where id between ? and ?
以前面的users表为例,显示第三页,该查询语句就是:
select * from users where userId between 7 and 9
这个sql语句确实是比较快,但是它有一个问题,就是如果表的id被删除,那么,某页可能就会少一个记录
解决方案:
ms sqlserver数据库
select top pageSize 字段名列表 from 表名 where id not in
(select top pageSize*(pageNow-1) id from 表名)
以users表为例,显示第三页,查询语句为:
select top 3 * from users where userId not in
(select top 6 userId from users)
My sql数据库
My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为:
SELECT * FROM 表名称 LIMIT M,N
例如从表Sys_option(主键为sys_id)中从第10条记录后开始检索20条记录,语句如下:
select * from sys_option limit 10,20
快速为表增加记录:
insert into users (username,passwd,email,grade) select username,passwd,email,grade from users;
(三)用户登录系统功能改进
参考代码:Wel.java
view plainpublic void process(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html;charset=UTF-8");
PrintWriter pw = res.getWriter();
Connection ct = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 从session中得到用户名
HttpSession hs = req.getSession(true);
String myName = (String) hs.getAttribute("name");
if (myName == null) {
// 返回登陆界面
res.sendRedirect("login?info=error1");
return;
}
// 调整格式
pw.println("<body><center>");
// 在servlet中显示图片
pw.println("<img src="images/lola.gif" mce_src="images/lola.gif"><br>");
pw.println("Welcom,hello<br>");
pw.println("你的用户名是:" + myName);
// 做个超链接
pw.println("<br><a href="login" mce_href="login">返回重新登录</a>");
// ================分页功能===============
int pageSize = 3;// 一页显示几条记录(规定)
int pageNow = 1;// 希望显示第几页(规定)
int rowCount = 0;// 共有几条记录(查表)
int pageCount = 0;// 共有几页(计算)
// 动态的接收pageNow
String sPageNow = req.getParameter("pageNow");
if (sPageNow != null) {
pageNow = Integer.parseInt(sPageNow);// 转换成整数
}
// 首先得到rowCount
// 连接数据库
Class.forName("com.mysql.jdbc.Driver");// 加载驱动
// 得到连接
ct = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/spdb", "root", "root");
ps = ct.prepareStatement("select count(*) from users");
rs = ps.executeQuery();
if (rs.next()) {
rowCount = rs.getInt(1);
}
// 计算pageCount
if (rowCount % pageSize == 0) {
pageCount = rowCount / pageSize;
} else {
pageCount = rowCount / pageSize + 1;
}
ps = ct.prepareStatement("select * from users limit "
+ (pageNow - 1) * pageSize + "," + pageSize);
// 给问号赋值
// ps.setInt(1,(pageNow-1)*pageSize);
// ps.setInt(2,pageSize );
rs = ps.executeQuery();
// 表头
pw.println("<table border=1>");
pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");
while (rs.next()) {
pw.println("<tr>");
pw.println("<td>" + rs.getInt(1) + "</td>");
pw.println("<td>" + rs.getString(2) + "</td>");
pw.println("<td>" + rs.getString(3) + "</td>");
pw.println("<td>" + rs.getString(4) + "</td>");
pw.println("<td>" + rs.getInt(5) + "</td>");
pw.println("</tr>");
}
pw.println("</table>");
// ================分页功能===============
// 上一页
if (pageNow != 1) {
pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow - 1)
+ ">上一页</a>");
}
// 显示超链接
// for (int i = 1; i <= pageCount; i++) {
for (int i = pageNow; i <= pageNow + 4; i++) {
pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + i + ">" + i + "</a>");
}
if (pageNow != pageCount) {
pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow + 1)
+ ">下一页</a>");
}
pw.println("</center></body>");
// String u = req.getParameter("uname");// 得到从LoginCl传递的用户名
// String p = req.getParameter("pass");
} catch (Exception ex) {
ex.printStackTrace();
}
}
相关文章推荐
- servlet学习笔记5——分页实现(登录网站的完善)
- spring 3.x 学习笔记_spring mvc、spring jdbc 实现网站的登录注册功能
- JavaWeb学习记录总结(二十九)--Servlet\Session\Cookie\Filter实现自动登录和记住密码
- servlet学习笔记1——用户登录网站(servlet1.0)
- Servlet学习(三)Servlet编程实例-网站登录(修改版-增加数据库-附源码)
- servlet学习笔记4——用户登录网站(数据库验证)
- 最近学习框架做了一个小网站,基本功能都实现了但是分页没办法用框架思想实现,查了资料找到一个不错的,修改了下分享下
- servlet第2讲(下集)----通过HttpServlet实现一个用户登录网站(继承HttpServlet)
- Servlet学习:利用Cookie实现两周内不用重复登录的效果
- 用Servlet实现简单的网站登录
- JSP+JavaBean+Servlet技术实现某网站用户注册和登录功能
- Servlet学习:实现分页效果的方法
- Servlet学习之二实现简单的登录功能
- Android学习之servlet登录、注册实现
- servlet学习笔记3——用户登录网站(通过session验证登陆用户)
- Servlet学习-登录验证码的实现
- Servlet学习:实现分页效果的方法
- Servlet学习(五)使用Servlet过滤器实现登录权限校验-附源码下载
- 学习jsp+servlet+jquery实现的一个分页
- servlet+JDBC实现登录 增删查改 分页显示