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

servlet+jsp添加管理员功能 压缩包中有数据库文件,是使用servlet+jsp技术实现,个人觉得用于课堂测验是可以的得,通过这个简单的实例进行java入门,并且可以进行毕设的编写。 立即下载
 
学习目标:
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实现添加功能和分页显示,以实例形式较为详细的分析了JSP基于MVC框架的添加及分页功能的注意事项与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

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

为什么桥式传感器(Bridge Sensor)需要用到仪表放大器?

仪表放大器在桥式传感器的应用里起到关键作用,本文介绍桥式传感器的原理、特性,以及信号调理过程,并附上了一个 TINA - TI 的仿真电路。

疯狂的运放 1528

养龙虾经验:OpenClaw用户必看的3个“省token”救命配置

本文分享了3个优化OpenClaw使用成本的配置方案:1)启用上下文压缩功能,可选择全局或单个代理设置,支持safeguard/adaptive两种压缩模式;2)修改SOUL.md提示词,要求模型回答简洁直接;3)限制对话历史长度。方案一效果最佳,可减少长对话的token消耗,但可能影响连贯性。三种方案可单独或组合使用,需根据实际场景调整参数。文章最后邀请读者分享使用痛点,将针对高频问题撰写解决方案。

wpplvhq的专栏 1418

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

android11-修改屏幕显示方向和触摸方向

参数0表示12点钟方向显示参数90表示3点钟方向显示参数180表示6点钟方向显示参数270表示9点钟方向显示。

Paper_Love的博客 2119

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

【STM32】STM32 CANFD外设的几种消息接收过滤模式

在控制器区域网络(CAN)系统中,正确配置消息过滤器对于有效管理网络通信至关重要。特别是在使用Flexible Data-rate Controller Area Network(FDCAN)时,选择合适的过滤器类型可以大大提高网络效率和消息处理速度。

林愿留的博客 6230

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1367

列表查询,添加功能---JSP,servlet

1.列表查询以及添加功能的需求 列表查询功能: *用户可以通过点击一个超链接或者按钮,经过UserListServlet 类处理后,跳转到查询后的界面list.jsp *使用Druid数据库连接池技术,操作mysql,day17数据库中user表 * 使用JdbcTemplate技术封装JDBC *编写UserListServlet 类,来响应用户点击查询的请求,将请求提交给service层处理,然后将处理后的数据,存储到request域或者session域中,之后跳转到list.jsp页面 *

笼中鸟 4777

电机瞬态分析基础(2):理想电机的基本假设和正方向规定

电机瞬态分析基础之理想电机假设条件和正方向规定

weixin_45670943的博客 1146

1月8日——培训第40天

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

小袁的博客 1075

WorkBuddy最新更新特性(2026-07-21)

WorkBuddy最新更新特性

AI人人懂 582

撸毛笔记-朴朴超市 v1.01

朴朴超市 v1.01脚本地址:自动签到和组队赚朴分, 朴分可以抵扣50%的金额组队瓜分需要4人成团, 每个号每天只能开团和入队各一次每天跑一两次即可使用扫码或自己想办法捉refreshToken扫码获取token: (先微信进入朴朴超市小程序并登录注册过账号再扫码)把获取的refreshToken和备注(非必须)填到文件pupuCookie.txt里(第一次运行会自动创建), 多账号换行或&或@隔开。

xiaoshun007的专栏 1812

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

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

CK3028的博客 1112

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

基于JSP的员工培训系统

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

weixin_45769113的博客 517

visio安装包

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring Boot之添加JSP支持

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

2401_84009993的博客 1120

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

中小学教师进修培训管理系统-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
上一篇: JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
下一篇: JSP连接Microsoft SQL Server出错:Error establishing socket解决方法
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值