JSP培训(8)——添加功能和分页显示

学习目标:
l 进一步掌握MVC设计模式;
l 掌握添加功能的实现;
l 掌握分页显示功能的实现。
主要内容:
l 通过用户信息添加功能进一步介绍MVC模式;
l 通过用户信息的分页显示介绍分页显示功能的原理和实现。
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、添加分页显示
经过不断的添加,数据库表中已经有大量的记录。当记录比较多的时候就应该进行分页显示。分页显示可以采用多种方式:
l 在SQL中进行控制,只查询需要的记录;
l 在遍历结果集的时候,只封装相关的记录;
l 在显示的时候进行控制。
第一种方式对开发人员的SQL水平要求比较高,第三种方式传递的数据量比较大,所以我们介绍第二种。
要完成分页显示,需要做3个方面的修改:
l 界面上增加分页显示的超链接;
l 修改User.java,在遍历结果集的时候进行控制,另外需要增加获取页码数的方法;
l 在控制器中传递需要的页码和总页码。
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){}

参考教材:《Java Web程序设计基础教程》

可以include的jsp独立分页 有很详细的注释解释,是中国人都应该看的懂,在你需要的分页的页面嵌入这个jsp,通过修改它的默认属性,和使用它的内置方法,就可以达到分页效果,而且可以有自己的样式效果,以下是例子: 你的页面头顶部加入<%@include file="你的文件路径" %> 页面的任意部位加入page_title = "你的分页提交参数名称"; 如Action提交时使用 method=query 则page_title="method" 在要显示上一页或页符的地方加入对应的方法,如上一页加入:getPrePage("项目连接主要路径", 当前页号, "鼠标旋停提示文本"); 立即下载

相关推荐

JSP实现添加功能和分页显示实例分析

本文实例讲述了JSP实现添加功能和分页显示的方法。分享给大家供大家参考。具体如下: 学习目标: ① 进一步掌握MVC设计模式; ② 掌握添加功能的实现; ③ 掌握分页显示功能的实现。 主要内容: ① 通过用户信息添加功能进一步介绍MVC模式; ② 通过用户信息的分页显示介绍分页显示功能的原理和实现。 1、如何采用MVC模式完成用户添加? 首先考虑与人如何交互:应该有一个输入用户信息的界面,包含用户名和口令,另外需要一反馈的界面。 然后考虑功能如何实现:需要在User类中添加一个方法,完成用户信息的添加。 最后考虑控制器:获取信息;调用JavaBean;传值;选择界面响应。 2、添加用户的界面

Mybatis Plus的使用(Mybatis增强工具)- Mybatis从学习到忘记

概述 如果你是刚刚学习完Mybatis那么恭喜你,你竟然在起步阶段,就发现了一款可以让Mybatis起飞的东西;如果你是Mybatis熟客,或者是会使用Mybatis-generator、Mybatis-PageHelper、Mybatis通用mapper,那么也提前恭喜你,你可以放弃这些“散件”,只需要掌握今天这个东西,上面这些过客可以统统说“拜拜”了。Mybatis Plus看似有着一统M...

小流至江河的博客 3574

jsp连接MySQL实现插入insert操作功能示例

下午终于实现了jsp连接MySQL执行插入操作的功能。在index.jsp页面输入数据,提交到mysql——insert.jsp页面进行插入数据库的操作。  index.jsp页面代码如下: 代码如下: <%@ page language=”java” pageEncoding=”utf-8″%> <%@ page contentType=”text/html;charset=utf-8″%>  <%     request.setCharacterEncoding(“UTF-8”);     response.setCharacterEncoding(“UTF-8”);     respo

JavaWeb学习——Servlet&JSP“添加”功能(20)

日常学习笔记

Hoorus的窝 1933

网络抓包实战:如何捕获与解析802.1Q VLAN标签报文

在网络通信中,数据包是信息传输的基本单元,而VLAN(虚拟局域网)技术通过在数据链路层插入802.1Q标签,实现了网络流量的逻辑隔离与高效管理。其核心原理是在标准以太网帧头中嵌入4字节的VLAN标识,使交换机能够根据VID(VLAN ID)进行精准转发。掌握VLAN报文的捕获与解析技术,对于网络故障排查、安全审计和性能优化具有重要价值,尤其在需要验证网络隔离策略或诊断Trunk链路异常时。本文聚焦于使用Wireshark工具,结合端口镜像等实操方法,详细演示如何抓取并解读携带802.1Q标签的原始报文,帮助

weixin_33417488的博客 383

IEEE PHM 2012轴承数据实战:用LSTM预测剩余寿命的完整流程与调参心得

本文详细解析了如何利用IEEE PHM 2012轴承数据集和LSTM模型进行轴承剩余寿命预测。从数据预处理、特征工程到LSTM模型架构设计和调参技巧,提供了完整的实战流程。特别分享了FEMTO-ST数据集的处理方法、RUL标签构建策略以及提升预测精度的关键技巧,帮助工程师实现更准确的预测性维护。

weixin_31100517的博客 368

jsp添加功能

1.dao类相应添加方法: /** * 2.添加员工 * @param employee */ public boolean save(Employee employee){ StringBuffer sql=new StringBuffer("insert into employee"+" values(emp_seq.nextval,?,...

Begin_W_T_E_I_M的博客 2667

置顶必读(1) |《滚雪球学SpringBoot 3.x》· 高质量专栏介绍,你值得拥有!

《滚雪球学SpringBoot 3.x》 并不是普通的技术讲解合集,它是专为开发者精心设计的系统化学习路径。通过不断“滚动学习”,我们将带领你从基础入门到高阶应用,从理解每一行代码到设计和优化大规模分布式系统,最终帮助你成长为一位精通 spring架构 的工程师。

**My Coding Family** 12万+

struts2_day02问题记录

struts2_day02问题记录: 1.eclipse j2EE中dynamic Web module version:-2.5,3.0? 1&amp;amp;amp;gt;dynamic web module version是与你的servlet版本有关的,若使用tomcat7.0,一般是3.0;若tomcat6,则一般是2.4或2.5. 2&amp;amp;amp;gt;当选择不同时,生成的web.xml的dtd文件也不同。 参考...

Json Yao的博客 524

Vue3 - 详解实现网站接入微信扫码登录功能,微信授权生成登录二维码用户用手机扫描二维码登陆,微信扫描二维码登录详细流程及示例代码,支持弹框式、浏览器单独新开页显示,最新vue集成微信扫码授权登录!

vue3,nuxt3,PC网站,网页,微信扫码登录,微信登陆,vue3微信扫码登录,获取个人信息,扫码登录后如何获取用户手机号,微信扫码授权登录,vue3详细实现微信扫一扫登陆,pc网页微信登录,vue3集成微信扫码登录,详细流程和示例源码,第三方扫码登录,vue3微信扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,微信扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描微信二维码登录网站,最好用的插件,vue-wxlo

🏆 前端领域优质创作者 1万+

深度学习实战102-基于深度学习的网络入侵检测系统,利用各种AI模型和pytorch框架实现网络入侵检测

在明确了研究背景后,我们需要设定明确的项目目标。本项目的核心目标是开发一个高精度、低延迟的网络入侵检测系统检测准确率:达到95%以上,确保系统能够有效识别各类已知和未知的入侵行为。响应时间:控制在毫秒级范围内,以实现实时监测和快速响应。模型鲁棒性:在面对不同类型的网络环境和攻击手法时,系统需保持稳定的性能输出。可扩展性:系统设计需考虑未来可能面临的新型威胁,便于后续升级和维护。

微学AI的博客 1793

1月8日——培训第40天

培训的第40天了……这个培训真的能够上够100天么?虽然某培训机构的广告上说的是100天,但我反正是不太相信。我们中国人什么时候能诚信到那种程度呢?反正一期是绝对没有上够100天,可能局外人觉得这是个很小的事情,不足为道,多几天少几天的又有什么所谓呢?只要该学的知识学到了,该得到的项目经验得到手了不就成了么?在乎这么多作什么呢?但我觉得好像不这么简单,事情总是起于这些细节,如果细节都不能严格恪守的

小袁的博客 1075

AI上推荐 之 NeuralCF与PNN模型(改变特征交叉方式)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 1万+

jsp村级技能培训管理系统q7e84

因此,开发一套基于JSP技术的村级技能培训管理系统(q7e84),旨在通过信息化手段优化资源配置,提高培训效率,促进农村就业和创业,具有重要的现实意义和广泛的应用前景。同时,本项目的成功也将为类似系统的开发提供有益的参考和借鉴。:JSP支持标签库(Taglib),它提供了一组预定义的标签,用于在JSP页面中执行常见任务,如数据迭代、条件判断和表单处理。:用于构建Web页面的结构和样式。以上是JSP开发的基本流程,每一步都需要细致的设计和实施,以确保最终开发出的Web应用程序能够满足预期的功能和性能要求。

CK3028的博客 1112

从“能跑”到“好用”:一名 Python 开发者的工程化进阶之路【Python心得篇】

Python 早已不只是写脚本、跑数据的工具。后端服务AI Agent 编排层自动化平台核心语言数据与业务之间的“中枢层”区别只在于:你是用脚本方式,还是工程方式在写。如果你已经能写“能跑的 Python”,下一步,就是让它长期可跑、稳定可演进。Python 的真正价值不在于“写得快”,而在于能否支撑持续演进的工程实践。当代码从一次性脚本走向长期运行的系统,开发者必须从结构设计、职责拆分、性能意识和类型约束等方面进行系统性思考。

博客 1548

Unity 之jenkins自动打包

1.Jenkins 是什么? jenkins官方网址:https://www.jenkins.io/zh/ Jenkins是一款开源 CI&CD(持续集成&持续部署) 软件,用于自动化各种任务,包括构建、测试和部署软件。 简易安装:Jenkins 是一个基于 Java 的独立程序,可以立即运行,包含 Windows、Mac OS X 和其他类 Unix 操作系统。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。 插件扩展:通过更新中心中的

TxNet 2136

基于JSP的员工培训系统

本员工培训系统在设计方面采用B/S模式,同时使用JSP技术进行基本页面的设计与功能实现,后台数据库选用SQL Server 2005数据库。 本系统一共分为管理员模块、部门管理模块、员工模块、培训课程模块、培训计划模块、培训成绩模块,各个模块之间虽然在表面上是相互独立的,但是在对数据库的访问上是紧密相连的,各个模块访问的是同一个数据库,只是所访问的表不同而已。每个模块的功能都是按照在调研中搜集的资料进行编排制作的。 经过员工培训的过程进行考察、分析,要求本系统具有以下功能。 (1)系统管理员负责管理整个系

weixin_45769113的博客 517

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring Boot之添加JSP支持

truetrueprovidedjstlprovidedprovidedspring-web3.1.0fork : 如果没有该项配置,devtools不会起作用,即应用不会restarttrue3.添加配置文件#页面默认前缀#响应页面默认前缀4.创建jsp文件helloJsp${hello}5.创建controller。

2401_84009993的博客 1120

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

中小学教师进修培训管理系统-ssm+jsp

本文介绍了一个基于SSM+JSP的中小学教师进修培训管理系统,专为初学者学习参考而设计。系统包含用户、员工和管理员三大模块,分别实现课程管理、培训安排、宿舍分配、公告发布等功能。开发环境为IDEA2024.1+JDK1.8+MySQL5.7+Tomcat8.0,采用SSM框架和JSP技术实现。项目提供了完整的源码和测试账号(管理员admin/123456,员工a11/123456,用户a1/123456),适合作为编程入门实践项目。

wanglindda的博客 556

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JSP企业消防安全培训系统8d5wl(程序+源码+数据库+调试部署+开发环境)

随着城市化进程的加速和工业化的发展,企业消防安全问题日益凸显。火灾事故频发,给企业和员工生命财产安全带来了严重威胁。因此,加强企业消防安全培训,提高员工消防安全意识和自救能力,已成为企业安全管理的重要任务。本项目旨在开发一套企业消防安全培训系统,以提升企业消防安全水平。

CK3043的博客 824

JAVA 培训题库-JSP

一、JSP_选择题1. 以下选项中不是jsp隐式对象的是:( )A  pageContext B  context C  application D  out 参考答案:B 2. 下面哪一个不是JSP本身已加载的基本类?( )A  java.lang.* B  java.io.* C  javax.servlet.* D  javax.servlet

wxh2008hyl的专栏 3510
上一篇: JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
下一篇: JSP连接Microsoft SQL Server出错:Error establishing socket解决方法
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值