1.列表查询以及添加功能的需求

列表查询功能:

*用户可以通过点击一个超链接或者按钮,经过UserListServlet 类处理后,跳转到查询后的界面list.jsp

*使用Druid数据库连接池技术,操作mysql,day17数据库中user表

* 使用JdbcTemplate技术封装JDBC

*编写UserListServlet 类,来响应用户点击查询的请求,将请求提交给service层处理,然后将处理后的数据,存储到request域或者session域中,之后跳转到list.jsp页面

*service层,将数据提交给dao层处理。

*dao层:利用JdbcTemplate技术操作数据库。

添加功能:

*用户可以通过点击一个超链接或者按钮,跳转到增加的界面add.jsp。

*创建一个UserListServlet 类来处理add.jsp添加的信息。

*封装add.jsp中的数据,然后将它插入到数据库中

*UserListServlet 类处理add.jsp后,重新跳转到UserListServlet 类中,重新查询。

2.分析

三.开发步骤

1.创建项目,配置文件,导入相关的jar包

参考前面的登录功能:用jsp实现登录界面_笼中鸟-CSDN博客

2.创建数据库环境

CREATE DATABASE day17; -- 创建数据库
USE day17;             -- 使用数据库
CREATE TABLE USER(   -- 创建客户表(并不是登录用户)id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL,gender VARCHAR(5),age INT,address VARCHAR(32),qq    VARCHAR(20),eamil VARCHAR(50)
);

3.创建前端查询的jsp页面

(效果图如下)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>首页</title><!-- 1. 导入CSS的全局样式 --><link href="css/bootstrap.min.css" rel="stylesheet"><!-- 2. jQuery导入,建议使用1.9以上的版本 --><script src="js/jquery-2.1.0.min.js"></script><!-- 3. 导入bootstrap的js文件 --><script src="js/bootstrap.min.js"></script><script type="text/javascript"></script></head><body><div align="center"><%--点击按钮就调转到userListServlet处理--%><ahref="${pageContext.request.contextPath }/userListServlet" style="text-decoration:none;font-size:33px">查询所有用户信息</a></div></body>
</html>

4.在domain包下创建类User ---存储客户信息

package domain;public class User {private int id;private String name;private String gender;private int age;private String address;private String qq;private String email;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + ", address=" + address+ ", qq=" + qq + ", email=" + email + "]";}}

5.写utils包下的工具类JDBCUtils ,主要是与mysql数据库连接,创建数据库连接池对象

package utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;/*** JDBC工具类 使用Durid连接池*/
public class JDBCUtils {private static DataSource ds ;static {try {//1.加载配置文件Properties pro = new Properties();//使用ClassLoader加载配置文件,获取字节输入流InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//2.初始化连接池对象ds = DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/*** 获取连接池对象*/public static DataSource getDataSource(){return ds;}/*** 获取连接Connection对象*/public static Connection getConnection() throws SQLException {return  ds.getConnection();}
}

6.在web层创建userListServlet

用来处理前端(前面第三点)的请求

package web.servlet;import java.io.IOException;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import domain.User;
import service.USerService;
import service.UserServiceImpl;
@WebServlet("/userListServlet")
public class UserListServlet extends HttpServlet{/*** */private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubthis.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.设置编码req.setCharacterEncoding("utf-8");//2.调用UserServiceimplUSerService us=(USerService) new UserServiceImpl();List<User> ul=us.findAll();  //查询的结果//3.存储到request域中req.setAttribute("list", ul);//4.转发jsp页面list.jspreq.getRequestDispatcher("/list.jsp").forward(req, resp);  }
}

7.在service层UserService接口,UserServiceImpl实现类

package service;
//user的业务接口import java.util.List;
import domain.User;public interface USerService {//定义业务查询所有用户的抽象方法public List<User> findAll();//定义业务添加抽象方法public void addUser(User user);//定义删除的抽象方法public void deluser(String id);//按id查询用户信息的抽象方法public User findUserById(String idString);//修改用户信息抽象方法public void updateuser(User user);}
package service;import java.util.List;import dao.UserDao;
import dao.UserDaoImpl;
import domain.User;public class UserServiceImpl implements USerService{UserDao userDao=new UserDaoImpl();@Overridepublic List<User> findAll() {//调用dao,操作数据库//查询所有用户的信息return userDao.findAll();}public void addUser(User user) {//调用添加用户的方法userDao.addUser(user);}public void deluser(String id) {//删除用户信息userDao.deluser(Integer.parseInt(id));   //将参数变为整数}@Overridepublic User findUserById(String idString) {//通过id来查询需要修改的用户信息   return userDao.findUserById(Integer.parseInt(idString));    }@Overridepublic void updateuser(User user) {// 根据update.jsp中的用户信息修改数据库的用户信息userDao.updateuser(user);      }
}

8.在Dao层UserDao接口,UserDaoImpl实现类

与数据库之间进行操作

package dao;import java.util.List;import domain.User;public interface UserDao {public List<User> findAll();  //抽象方法public void addUser(User user);public void deluser(int id);public User findUserById(int parseInt);public void updateuser(User user);}
package dao;import java.util.List;import javax.xml.transform.Templates;import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;import domain.LoginUser;
import domain.User;
import utils.JDBCUtils;public class UserDaoImpl implements UserDao{JdbcTemplate jdbcTemplate =new JdbcTemplate(JDBCUtils.getDataSource());public List<User> findAll() {// 操作数据库,查询所有用户的信息String sql="select * from user";List<User> users=jdbcTemplate.query(sql,new BeanPropertyRowMapper(User.class));return users;}public LoginUser checkLoginUser( LoginUser loginUser) {//查询登录用户信息String sqlString="select* from loginuser where username=? and password=?";//System.out.println("111"+loginUser);try {LoginUser lu=(LoginUser) jdbcTemplate.queryForObject(sqlString, new BeanPropertyRowMapper<LoginUser>(LoginUser.class),loginUser.getUserName(),loginUser.getPassword());return lu;} catch (Exception e) {// TODO: handle exceptione.printStackTrace();return null;}  }public void addUser(User user) {//调用添加用户的方法,//使用sql语句String sql="insert into user values(null,?,?,?,?,?,?)";jdbcTemplate.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());}@Overridepublic void deluser(int id) {//删除用户信息String sql="delete from user where id=?";jdbcTemplate.update(sql,id);}@Overridepublic User findUserById(int parseInt) {//根据id查询用户的信息String sql="select * from user where id=?";User user=jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),parseInt);return user;    }@Overridepublic void updateuser(User user) {// 根据update.jsp中的用户信息修改数据库的用户信息String sql="update user set name=?,gender=?,age=?,address=?,qq=?,email=? where id=?";jdbcTemplate.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail(),user.getId());     }}

9.编写查询后的list.jsp页面

将查询的数据库所有用户信息封装到user中,存储到request域中

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head><!-- 指定字符集 --><meta charset="utf-8"><!-- 使用Edge最新的浏览器的渲染方式 --><meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。width: 默认宽度与设备的宽度相同initial-scale: 初始的缩放比,为1:1 --><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>用户信息管理系统</title><!-- 1. 导入CSS的全局样式 --><link href="css/bootstrap.min.css" rel="stylesheet"><!-- 2. jQuery导入,建议使用1.9以上的版本 --><script src="js/jquery-2.1.0.min.js"></script><!-- 3. 导入bootstrap的js文件 --><script src="js/bootstrap.min.js"></script><style type="text/css">td, th {text-align: center;}</style><script type="text/javascript">function deluser(i) {//用户安全提示if(confirm("您确定需要删除吗?")){location.href="${pageContext.request.contextPath }/delUserServlet?id="+i;}}</script>
</head>
<body>
<div class="container"><h3 style="text-align: center">用户信息列表</h3><div style="float: left;"><form class="form-inline"><div class="form-group"><label for="exampleInputName2">姓名</label><input type="text" class="form-control" id="exampleInputName2" ></div><div class="form-group"><label for="exampleInputName3">籍贯</label><input type="text" class="form-control" id="exampleInputName3" ></div><div class="form-group"><label for="exampleInputEmail2">邮箱</label><input type="email" class="form-control" id="exampleInputEmail2"  ></div><button type="submit" class="btn btn-default">查询</button></form></div><div style="float: right; margin: 5px;">    <a class="btn btn-primary" href="${pageContext.request.contextPath }/add.jsp">添加联系人</a><a class="btn btn-primary" href="delete.jsp">删除选中</a>  </div><table border="1" class="table table-bordered table-hover"><tr class="success"><th><input type="checkbox"></th><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>籍贯</th><th>QQ</th><th>邮箱</th><th>操作</th></tr><c:forEach items="${list}" var="user" varStatus="s"><tr><td><input type="checkbox"></td><td>${s.count}</td><td>${user.name}</td><td>${user.gender }</td><td>${user.age }</td><td>${user.address }</td><td>${user.qq }</td><td>${user.email }</td><td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath }/queryupdate?id=${user.id}">修改</a>&nbsp;<a class="btn btn-default btn-sm"href="javascript:deluser(${user.id});" >删除</a></td></tr></c:forEach></table><div><nav aria-label="Page navigation"><ul class="pagination"><li><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li><li><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li><span style="font-size: 25px;margin-left: 5px;">共16条记录,共4页</span></ul></nav></div>
</div>
</body>
</html>

展示效果:

注意:这里修改,删除,添加功能还没实现,只是单纯显示所有用户这个页面

其他:

  在jsp页面中查询用到标签库jstl,  所以必须首先导入jstl库

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

标签:

1.   <c:if></c:if>,   

<c:if test="${number %2 !=0}">
                   ${number}是奇数
                </c:if>
注意:
                    * c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签

2.   <c:forEach></c:forEach>

容器遍历:l

属性:
                items : 容器对象
                var   : 容器中元素的临时变量
                varStatus  :循环状态对象
                      index : 容器中的索引,从0开始
                      count : 循环次数 ,从1开始
                      
                <c:forEach items="${list}" var="str" varStatus="s">
                   ${s.index} ${s.count} ${str}<br>
                </c:forEach>

示例:

<c:forEach items="${l}"  var="s" varStatus="n">

普通遍历:

foreach:相当于java代码的for语句
                属性:
                   begin  :开始
                   emd    : 结束
                   var    : 变量名
                   step   :  步长
                   varStatus  : 循环状态对象
                        index  :容器中元素的索引,从0开始
                        count : 循环次数  从1开始

示例:

<c:forEach begin="1" end="10" var="i" step="1">${i}<br></c:forEach>

3. choose:相当于java代码的switch语句

 使用choose标签声明                     相当于switch声明
            2. 使用when标签做判断                     相当于case
            3. 使用otherwise标签做其他情况的声明        相当于default

示例:
            <c:choose>
                  <c:when test="${number==1 }">星期一</c:when>
                  <c:when test="${number==2 }">星期二</c:when>
                  <c:when test="${number==3 }">星期三</c:when>
                  <c:otherwise>${number}数字错误</c:otherwise>
            </c:choose>

添加功能  --下一篇》》》》添加功能---jsp,servlet_笼中鸟-CSDN博客

列表查询,添加功能---JSP,servlet相关推荐

  1. 添加功能---jsp,servlet

    接上篇:>>>列表查询,添加功能---JSP,servlet_笼中鸟-CSDN博客 一.jsp之间的跳转 list.jsp >> <%@ page language ...

  2. 使用Vue 简化 用户查询/添加功能

    使用Vue简化 用户查询/添加功能 1. 查询功能 1.1 Vue核心对象: 1.2 brand.html: 1.3 selectAllServlet(无变化): 2. 添加功能 2.1 addBra ...

  3. 易课寄在线购课系统开发笔记(十一)--完成课程列表查询的功能

    展示后台首页 功能分析 请求的url:/ 参数:无 返回值:逻辑视图String Controller package cn.ecourses.controller; //页面跳转Controller ...

  4. ASP.NET MVC 2入门演练 3 - 列表和添加功能

    一.列表显示-View:List.aspx 此功能实现起来比较简单,之前我们在Site.Master添加了如下一行代码: <li><%: Html.ActionLink(" ...

  5. 【JAVA项目实战】【图书管理系统】用户添加功能【Servlet】+【Jsp】+【Mysql】

  6. 修改记录功能--jsp,servlet

    >>>接上篇:https://blog.csdn.net/hgnuxc_1993/article/details/123108586 一.分析 原理分析: 1.前端jsp页面绑定该条 ...

  7. JAVAWEB使用JSP+Servlet实现商品管理功能,后台为数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。

    商品管理功能 一.功能介绍 1.1显示 1.2商品详情 1.3新增 1.4修改 1.5删除 二.数据库语句 三.项目结构 四.java代码 4.1Good类 4.2 Charge类 4.3GoodDa ...

  8. jsp模糊查询_[内附完整源码和文档] 基于JSP+Servlet校园二手交易平台

    摘 要 本系统采用JSP/servlet技术,是使用Java编程语言编写的一套校园网二手交易平台软件.系统采用的是最近几年流行的B/S开发模式,以互联网方式运行,服务器端只需要安装本系统,而客户端用户 ...

  9. c语言 上传图片至服务器,JSP+Servlet实现文件上传到服务器功能

    本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao.service.servlet 这 ...

最新文章

  1. SpringBoot的构造方法中使用@AutoWird注入的类会报错null
  2. wsl(windows上运行linux)安装到非C盘解决方案
  3. python如何通过以太网发送指令_用scapy在python中编写一个以太网桥
  4. Kafka Connect简介
  5. android自定义布局实现优惠券效果
  6. shiro学习(21):动态添加验证规则1
  7. C语言课后习题(54)
  8. latex 中表格怎么指定编号_在医学论文中,应用表格怎么用才是正确的?
  9. IDEA 炫酷编辑器主题大全,真的好看
  10. Findbugs错误总结
  11. 自底向上与自顶向下(递归与动态规划)
  12. 漂浮广告代码 php,JS带关闭按钮的网页漂浮广告代码
  13. js模板引擎template.js的使用
  14. Glide加载圆形图片并且带边框
  15. mysqlError: Can't connect to MySQL server on 'localhost' (10061)
  16. 20.P153课后习题6-13 背包问题。设有一个背包可以放入物品的重量为s,现有n件物品,重量分别为w[0],w[1],...w[n-1]。问题是能否从这n件物品中选择若干件放入此背包中使得放入的重
  17. Word添加水印很简单,但是Excel添加水印你是真的不会!
  18. MUI 调用原生方法跳转QQ添加群
  19. SQL server 2008不允许保存更改的解决办法
  20. 电容参数X5R,X7R,Y5V,COG

热门文章

  1. boost::mpl::filter_view模块实现日历相关的测试程序
  2. boost::math::arcsine用法的测试程序
  3. boost::math模块实现对贝塞尔函数的零点求和的测试程序
  4. boost::hana::slice用法的测试程序
  5. boost::hana::to用法的测试程序
  6. Boost.Flyweight 性能比较示例
  7. Boost:宏BOOST_NO_EXCEPTIONS的使用实例
  8. ITK:自定义操作以对应两个图像中的像素
  9. VTK:可视化之BoxClipStructuredPoints
  10. C语言已排序链表插入新节点保持排序状态(附完整源码)