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

以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程 JavaWeb应用开发,撇开分布式不谈,只讨论一个功能服务应用的开发,无论是使用原生的Servlet/JSP方案,还是时下的SSM架构,都有一套经过工程实践考验的最佳实践,这综合考虑了团队协作、项目管理、可用性等方方面面的问题。 一些约定 考虑到项目管理的方便,一般前端不能直接访问到jsp页面,而是必须通过Servlet来管理到Jsp页面的跳转 <li><a href="${pageContext.request.contextPath}/UserServlet?method= 阅读详情

学习目标:
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程序设计基础教程》

JSP培训目录:

JSP培训(1)——概述
JSP培训(2)——运行原理、文档结构、简单输入输出
JSP培训(3)——客户端验证、常用输出方式、JSTL基本用法
JSP培训(4)——实例:登录功能、jsp:forward标签、jsp:include标签、include指令、EL、c:if
JSP培训(5)——使用JavaBean完成业务逻辑
JSP培训(6)——使用Servlet作为控制器实现MVC模式
JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
JSP培训(8)——添加功能和分页显示
JSP培训(9)——使用MVC模式完成删除和修改功能
JSP培训(10)——使用JavaBean封装对数据库的访问、连接池的配置和使用
JSP培训(11)——Java Web中的安全控制
JSP培训(12)——Java Web应用国际化
JSP培训(13)——异常处理
JSP培训(14)——购物车实例(上)
JSP培训(15)——购物车实例(下)及小结
教师培训管理系统(JSP+java+springmvc+mysql+MyBatis) 随着教育信息化的不断推进,教师培训已成为提高教育质量和促进教育公平的重要手段。然而,传统的教师培训管理方式存在诸多问题,如信息不透明、培训内容单一等。系统将通过整合各类教育资源,实现对教师培训需求的精准分析、培训计划的个性化制定以及培训效果的全面评估,为教师提供更加专业、便捷的培训服务,提高教师教育教学水平,促进教育事业的发展。其他版本理论上也可以。用户发送请求:用户通过浏览器或其他客户端向系统发送请求,请求访问特定的页面或执行特定的操作。后端程序接收到请求后,根据请求的类型和参数进行相应的处理。 阅读详情

相关推荐

Web程序设计--ASP.NET实用网站开发课后习题及答案

Web程序设计--ASP.NET实用网站开发(沈士根)课后填空题,是非题,选择题答案

MVC设计模式应用实例-登录程序

----知道自己错在哪的猿是幸福的。 基本功: 要求会用自己的话讲解、MVC设计模式特点、画出MVC处理流程图:程序编写要靠思想!!! 登录程序流程图: 程序清单及作用:整体编程思想!!! -- 使用 zz 数据库 use zz; -- 删除 user 表 drop table user if exists user; -- 创建 us

zhangze_wancheng的专栏 5286

避坑指南:WSL2网络模式修改导致无法上网的解决方案(附备份还原技巧)

本文深入解析WSL2默认网络隔离机制,并提供三种安全的端口互通方案,重点推荐通过配置Windows防火墙规则实现稳定访问。同时,针对网络配置修改可能引发的无法上网问题,给出了从重置配置到系统级备份的完整恢复指南,确保开发环境安全可靠。

jj890的博客 782

MVC设计模式

Servlet经典的应用就是用在MVC设计模式上了。 MVC设计模式分为3个核心层: 1. 显示层(view):主要负责接收Servlet传递过来的数据,并且调用JAvaBean,将内容显示给用户。 2. 控制层(Controller):主要负责所有的用户请求参数,判断请求参数是否合法。根据请求参数是否合法,根据请求的类型调用JavaBean执行操作并将最后的结果交给显示层显示。 3. 模...

天天向上的编程技术分享博客 460

算法设计与分析 0-1背包问题 动态规划解法【超详细】

0-1背包问题 问题描述 给定i个物品和一个容量为的背包,物品的重量是Wi,其价值为Vi 物品个数为i,背包容量为C。 如何选择装入背包内的物品,使得装入背包中的物品的总价值最大? 其中,每种物品只有全部装入背包或不装入背包两种选择。 物品不能分割,不能重复使用。 动态规划算法思路 首先建立一个数组B[i][c],最上面一行表示背包容量,最左边一列表示物品编号,中间填充的数值表示当当前背包容量为C...

寒泉 4万+

嵌入式常用通信协议 #概述

嵌入式通信协议

AFK3060的博客 2117

javaweb小项目 mvc模式 (客户)(个人)用户信息管理系统

一、项目概况 1、该项目采用jsp+servlet+javabean的mvc模式 2、包含列表条件模糊查询、添加、修改、删除 3、这个项目是比较简单的javaweb小项目,没有包含登录和注册功能,即使单纯的增删查改,不过在里面增加了分页的优化以及模糊查询,这两部分是这个项目的难点。 二、项目运行截图 ...

YKbsmn的博客 2724

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码)

本文详细介绍了如何利用Python爬虫技术,快速抓取东方财富网的实时股票数据。通过逆向分析其JSONP数据接口,构建了包含请求处理、数据清洗、分页调度及多格式存储的完整自动化采集系统,并提供了应对反爬策略与生产部署的进阶优化思路,附有可直接运行的完整代码。

weixin_29084231的博客 875

用户注册案例(MVC三层结构&SQL)

实体类entityUser.javapackage com.bzxy.entity;public class User {private int id;private String user;private String pwd;public int getId() {return id;}public void setId(int id) {this.id = id;}public String...

可可的博客 578

用废旧汽车电池DIY家用UPS:手把手教你低成本搭建Wi-Fi不断电系统

本文详细介绍了如何利用废旧汽车电池DIY低成本家用UPS系统,确保Wi-Fi设备在断电时持续供电。通过精选材料、电路搭建和安全防护,实现高效稳定的电源转换与智能切换,成本仅为市售UPS的三分之一。特别适合家庭办公和远程工作者提升网络供电可靠性。

weixin_29200485的博客 468

Ubuntu 24.04 极速部署 Dify:从零到一的保姆级实践

本文详细介绍了在Ubuntu 24.04系统上快速部署Dify的完整教程,从环境准备到部署验证,再到深度优化和安全加固,提供了一套保姆级的实践指南。通过使用Docker和Docker Compose,结合国内镜像源加速,帮助用户高效完成Dify的安装和配置,确保系统稳定运行。

weixin_42662293的博客 246

1月8日——培训第40天

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

小袁的博客 1075

自动权重化图卷积网络(Auto-Weighted GCN)算法在反洗钱识别中的应用及代码实现

该算法通过自动学习节点之间的权重信息,能够更好地捕捉AML数据中的关系和结构,从而提高反洗钱识别的准确性和效果。传统的AML识别方法通常依赖于专家定义的规则和手动提取的特征,但这些方法在应对大规模和复杂的数据时存在一定的局限性。GCN通过在图上执行卷积操作来捕捉节点之间的关系和结构信息,从而实现对图数据的学习和表示。自动权重化图卷积网络是一种基于GCN的改进算法,能够自动学习节点之间的权重信息,从而更好地捕捉图中的关系。利用自动计算的权重值执行图卷积操作。根据节点之间的相似度,计算每个节点的权重。

syntax_api860的博客 377

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

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

CK3028的博客 1112

27930-2015+充电协议解析

对2015+充电与2015充电进行硬件电路对比、通信协议对比和2015+通信协议解析。

manjixingkong1234的专栏 239

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

基于JSP的员工培训系统

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

weixin_45769113的博客 517

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

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

Spring Boot之添加JSP支持

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

2401_84009993的博客 1120

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

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

visio安装包

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

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

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

wanglindda的博客 556

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基于jsp大学生英语等级培训服务系统0ay04

随着全球化进程的加速,英语作为国际通用语言的重要性日益凸显。大学生作为未来社会的中坚力量,其英语水平直接影响到其国际竞争力和职业发展。因此,开发一套针对大学生英语等级考试的培训服务系统显得尤为重要。本系统旨在通过JSP技术,为大学生提供个性化、高效、便捷的英语学习与备考平台,助力其顺利通过英语等级考试。

CK3041的博客 1104
上一篇: JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
下一篇: JSP培训(9)——使用MVC模式完成删除和修改功能
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值