2019-8-3 [Java_JSP] 实战:Servlet 模式开发动态网页达成数据库表的增删改查业务

15 篇文章 0 订阅
13 篇文章 0 订阅

4.Servlet实战

4.1 需求概述

完成人员信息表的数据CURD的练习

4.2 具体实现

4.2.1 项目初始化

需求 :
理财产品 需要进行会员信息管理

1) 整理数据库

数据库 : userdb

2) 整理表

数据表 : user_info

-- 创建表
create table user_info(
u_id int not null PRIMARY key auto_increment,
u_name VARCHAR(32),
u_regdate date,
u_money double
)
-- 验证数据
select * from user_info;

会员信息 :
1) 会员编号 2) 会员姓名 3) 会员注册时间 4) 会员金额

3) 创建项目

项目类型 : Dynamic Web Project
导入jar包

4) 创建各类包在src下

com.hnxy.dao 数据层接口
com.hnxy.entity 实体类
com.hnxy.service 业务层接口
com.hnxy.util 工具包
com.hnxy.web 控制器包
com.hnxy.test 测试包

4.2.2 entity层-用户数据实体类 UserInfo.java

我们将用户数据的实体类UserInfo.java放在com.hnxy.entity 文件夹下

package com.hnxy.entity;
import java.util.Date;

/**
 * 用户数据
 * @author My
 *
 */
public class UserInfo {
	
	// 属性	
	private Integer uid;	// 主键ID
	private String uname;	// 会员姓名
	private Date regDate;	// 入会时间
	private Double money;	// 会员余额
	
	// 对外方法
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public Date getRegDate() {
		return regDate;
	}
	public void setRegDate(Date regDate) {
		this.regDate = regDate;
	}
	public Double getMoney() {
		return money;
	}
	public void setMoney(Double money) {
		this.money = money;
	}	
}

4.2.3 utils层-数据库连接工具类 JdbcUtil.java

我们将数据库连接工具类 JdbcUtil.java放在com.hnxy.uitls 文件夹下

package com.hnxy.utils;

import java.sql.SQLException;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSource;

/**
 * 数据库连接工具类
 * @author My
 */
public class JdbcUtil {
	
	// 四大属性	
	private static final String CONN_DRIVER = "com.mysql.jdbc.Driver";
	private static final String CONN_URL = "jdbc:mysql://127.0.0.1:3306/user_db?characterEncoding=UTF-8";
	private static final String CONN_USER = "root";
	private static final String CONN_PASS = "root";
		
	// 创建数据源
	private static DruidDataSource dataSource = new DruidDataSource();
	
	// 数据源绑定四大属性 方便创建连接
	static{
		dataSource.setDriverClassName(CONN_DRIVER);
		dataSource.setUrl(CONN_URL);
		dataSource.setUsername(CONN_USER);
		dataSource.setPassword(CONN_PASS);
		
		// 开启druid的web监控功能 开启SQL监控
		try {
			dataSource.addFilters("stat");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
		
	/**
	 * 获取数据源的方法
	 * @return
	 */
	public static DataSource getDS(){
		return dataSource;
	}	
}

4.2.4 DAO层-数据库操作类 UserDAO.java

DAO层UserDAO.java编写底层SQL程序语言作为接口,放在com.hnxy.dao 文件夹下

package com.hnxy.dao;

import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.hnxy.entity.UserInfo;
import com.hnxy.utils.JdbcUtil;

/**
 * user_info表的数据库操作类
 * @author My
 *
 */
public class UserDAO {
	
	// 编写SQL执行对象
	private QueryRunner qr = new QueryRunner(JdbcUtil.getDS());
	
	//更新
	public int updateUser(UserInfo user)throws Exception{
		// 创建方法的返回值
		int count = 0;
		// 编写SQL语句
		String sql = "update user_info set u_name=?,u_regdate=?,u_money=? where u_id = ?";
		// 占位符赋值
		Object[] params = {user.getUname(),user.getRegDate(),user.getMoney(),user.getUid()};
		// 执行
		count = qr.update(sql,params);
		// 返回
		return count;
	}
	
	//删除
	public int deleteUser(UserInfo user)throws Exception{
		// 创建方法的返回值
		int count = 0;
		// 编写SQL语句
		String sql = "delete from user_info where u_id = ?";
		// 占位符赋值
		Object[] params = {user.getUid()};
		// 执行
		count = qr.update(sql,params);
		// 返回
		return count;
	}
	
	//查找ID
	public UserInfo findUserByID(Integer uid)throws Exception{
		// 创建方法的返回值
		UserInfo user = null;
		// 编写SQL语句
		String sql = "select u_id uid,u_name uname,u_regdate regDate,u_money money from user_info where u_id = ?";
		// 占位符赋值
		Object[] params = {uid};
		// 执行
		user = qr.query(sql, new BeanHandler<UserInfo>(UserInfo.class),params);
		// 返回
		return user;
	}
	
	//批量查找
	public List<UserInfo> findUserListByPage(Integer start,Integer size)throws Exception{
		// 创建方法的返回值
		List<UserInfo> list = null;
		// 编写SQL语句
		String sql = "select u_id uid,u_name uname,u_regdate regDate,u_money money from user_info order by u_id desc limit ?,?";
		// 占位符赋值
		Object[] params = {start,size};
		// 执行SQL语句
		list = qr.query(sql, new BeanListHandler<UserInfo>(UserInfo.class),params);
		// 返回
		return list;
	}
	
	// 查询数据总条数
	public int findUserListByPageCount()throws Exception{
		// 创建方法的返回值
		int totalCount = 0;
		// 编写SQL语句
		String sql = "select count(*) from user_info";
		// 占位符赋值
		// 执行
		Number num = qr.query(sql, new ScalarHandler<Number>(1));
		// 处理返回值
		totalCount = num.intValue();
		// 返回
		return totalCount;
	}

	// 添加会员信息
	public int insertUser(UserInfo user)throws Exception{
		// 创建方法的返回值
		int count = 0;
		// 编写SQL语句
		String sql = "insert into user_info values (null,?,?,?)";
		// 占位符赋值
		Object[] params = {user.getUname(),user.getRegDate(),user.getMoney()};
		// 执行
		count = qr.update(sql,params);
		// 返回
		return count;
	}
}

4.2.5 Service层-业务层UserService.java

Service层编写的UserService.java放置在service包下

package com.hnxy.service;

import java.util.Date;
import java.util.List;
import com.hnxy.dao.UserDAO;
import com.hnxy.entity.UserInfo;

/**
 * 业务层
 * @author My
 *
 */
public class UserService {

	// 创建DAO层对象
	private UserDAO userDAO = new UserDAO();
	//更新
	public int updateUser(UserInfo user){
		// 创建方法的返回值
		int count = 0;
		try {
			// 调用
			count = userDAO.updateUser(user);
		} catch (Exception e) {
			System.out.println("[错误]更新会员信息报错!原因:" + e.getMessage());
			e.printStackTrace();
		}
		// 返回
		return count;
	}
	
	// 删除
	public int deleteUser(UserInfo user){
		// 创建方法的返回值
		int count = 0;
		try {
			// 调用
			count = userDAO.deleteUser(user);
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 返回
		return count;
	}
	
	// 按ID查询	
	public UserInfo findUserByID(String uid){
		// 创建方法的返回值
		UserInfo user = null;
		try {
			// 获取数据
			user = userDAO.findUserByID(Integer.parseInt(uid));
		}  catch (Exception e) {
			System.out.println("[错误]按ID查询报错!错误原因:" + e.getMessage());
			e.printStackTrace();
		}
		// 返回
		return user;
	}
	
	
	//添加
	public int insertUser(UserInfo user){
		// 创建方法的返回值
		int count = 0;
		
		try {
			// 执行
			count = userDAO.insertUser(user);
		} catch (Exception e) {
			System.out.println("[错误]添加会员信息报错!原因:" + e.getMessage());
			e.printStackTrace();
		}		
		// 返回
		return count;
	}
		
	
	 // 分页方法
	public List<UserInfo> findUserListByPage(Integer pageIndex,Integer pageSize){
		// 创建方法的返回值
		List<UserInfo> list = null;
		// 进行参数处理
		if(null != pageIndex && null != pageSize){
			if(pageIndex > 0 && pageSize > 0){ // 业务要求 
				int start = (pageIndex-1)*pageSize;
				int size = pageSize;
				try {
					list = userDAO.findUserListByPage(start, size);
				} catch (Exception e) {
					System.out.println("[错误]获取分页数据失败,原因:" + e.getMessage());
					e.printStackTrace();
				}
			}
		}
		// 返回
		return list;
	}
	
	// 获取总条数	
	public int findUserListByPageCount(){
		// 创建方法的返回值
		int count = 0;
		try {
			// 执行业务操作
			count = userDAO.findUserListByPageCount();
		} catch (Exception e) {
			System.out.println("[错误]获取总条数失败!原因:" + e.getMessage());
			e.printStackTrace();
		}
		// 返回
		return count;
	}
	
	// 批量添加	
	public boolean insertUsers(){
		// 创建方法的返回值
		boolean con = false;
		// 循环调用DAO层 357次完成初始化会员数据
		int count = 0;
		UserInfo user = null;
		for (int i = 1; i <= 357; i++) {
			user = new UserInfo();
			user.setUname("测试数据");
			user.setRegDate(new Date());
			user.setMoney(-1D);
			try {
				count += userDAO.insertUser(user);
			} catch (Exception e) {
				System.out.println("添加失败!错误原因:"+e.getMessage());
				break;
				// e.printStackTrace();
			}
		}
		if(count == 357){
			con = true;
		}
		// 返回
		return con;
	}
}

4.2.6 test层-测试test.java

没啥用,哈哈

package com.hnxy.test;

import com.hnxy.service.UserService;

public class Test1 {
	public static void main(String[] args) {
		UserService service = new UserService();
		boolean con = service.insertUsers();
		System.out.println(con);
	}
}

4.2.7 [核心] web控制器层

4.2.7.1 分页展示数据的控制器
package com.hnxy.web;

import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.hnxy.entity.UserInfo;
import com.hnxy.service.UserService;

/**
 * 分页展示数据的Action(控制器)
 * @author My
 */
public class FindUserByPageAction extends HttpServlet {

	private static final long serialVersionUID = 1L;
	// 创建业务层对象
	private UserService userService = new UserService();

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 分页? 总条数 每页展示多少条(页容量) 总页数 页码(1-总页数)
		int totalCount = 0; // 总条数
		int totalPage = 0; // 总页数
		int pageSize = 10; // 页容量
		int pageIndex = 1;

		// 获取分页集合
		List<UserInfo> users = null;

		// 获取第一个数据
		totalCount = userService.findUserListByPageCount();
		// 获取第二个数据
		totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
		// 接收页面传递的pageIndex
		String pi = request.getParameter("pageIndex");
		if (null != pi && !"".equals(pi.trim())) {
			// xxxAction?pageIndex=-1
			pageIndex = Integer.parseInt(pi);
		}
		// 判断一下pageIndex的边界值
		// 1. pageIndex一定不能小于1
		if (pageIndex < 1) {
			pageIndex = 1;
		}
		// 2. pageIndex 一定不能大于 总页数
		if (pageIndex > totalPage) {
			pageIndex = totalPage;
		}
		// 获取当前页的数据集合 pageIndex pageSize limit start = (pageIndex-1)*pageSize
		// size=pageSize
		users = userService.findUserListByPage(pageIndex, pageSize);
				
		// 保存这些数据
		request.setAttribute("totalCount", totalCount);
		request.setAttribute("totalPage", totalPage);
		request.setAttribute("pageSize", pageSize);
		request.setAttribute("pageIndex", pageIndex);		
		request.setAttribute("users", users);
		
		// 转发到展示页面
		request.getRequestDispatcher("show.jsp").forward(request, response);		
	}
}
4.2.7.2 添加人员信息的控制器
package com.hnxy.web;

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.hnxy.entity.UserInfo;
import com.hnxy.service.UserService;

/**
 * 添加人员信息的控制器
 * @author My
 */
public class AddUserAction extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	// 创建UserService
	private UserService userService = new UserService();
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 添加
		// 接收页面数据
		String uname = request.getParameter("uname");
		String regdate = request.getParameter("regdate");
		String money = request.getParameter("money");
		// 封装数据
		UserInfo user = new UserInfo();
		user.setUname(uname);
		user.setMoney(Double.parseDouble(money));
		// 2018-11-09
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		try {
			user.setRegDate(df.parse(regdate));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		// 调用service执行
		int count = userService.insertUser(user);
		// 判断
		if(count > 0){
			// 添加成功
			response.sendRedirect("FindUserByPageAction");
		}else{
			// 保存错误信息
			request.setAttribute("msg", "对不起,添加失败!");
			request.getRequestDispatcher("error.jsp").forward(request, response);
		}		
	}
}
4.2.7.3 删除的控制器
package com.hnxy.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.hnxy.entity.UserInfo;
import com.hnxy.service.UserService;

/**
 * 删除的控制器
 * @author My
 */
public class DeleteUserAction extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	// 创建Service对象
	private UserService userService = new UserService();
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 接收UID
		String uid = request.getParameter("uid");
		// 先传递给Service判断一下有没有如果有再删除没有就删除
		UserInfo user = userService.findUserByID(uid);
		if(null != user){
			// 正常删除
			int count = userService.deleteUser(user);
			// 判断
			if(count > 0){
				response.sendRedirect("FindUserByPageAction");
			}else{
				request.setAttribute("msg", "对不起,删除失败!");
				request.getRequestDispatcher("error.jsp").forward(request, response);
			}
		}else{
			// 报错
			request.setAttribute("msg", "对不起,没有找到要删除的数据!");
			request.getRequestDispatcher("error.jsp").forward(request, response);
		}
	}
}
4.2.7.4 准备更新的控制器
package com.hnxy.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.hnxy.entity.UserInfo;
import com.hnxy.service.UserService;

/**
 * 准备更新的控制器
 * @author My
 */
public class FindUserByIDAction extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private UserService userService = new UserService();

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 获取页面数据
		String uid = request.getParameter("uid");
		// 获取要更新的数据
		UserInfo user = userService.findUserByID(uid);
		// 判断
		if(null != user){
			// 跳转展示要更新的页面
			request.setAttribute("user", user);
			request.getRequestDispatcher("update.jsp").forward(request, response);
		}else{
			request.setAttribute("msg", "对不起,没有找到要更新的数据!");
			request.getRequestDispatcher("error.jsp").forward(request, response);
		}
	}
}
4.2.7.5 更新控制器
package com.hnxy.web;

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.hnxy.entity.UserInfo;
import com.hnxy.service.UserService;

/**
 * 更新控制器
 * @author My
 */
public class UpdateUserAction extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    private UserService userService = new UserService();
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 接收页面数据
		String uid = request.getParameter("uid");
		String uname = request.getParameter("uname");
		String regdate = request.getParameter("regdate");
		String money = request.getParameter("money");
		// 封装数据
		UserInfo user = userService.findUserByID(uid);
		if(null != user){
			// 正常更新
			user.setUname(uname);
			user.setMoney(Double.parseDouble(money));
			DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
			try {
				user.setRegDate(df.parse(regdate));
			} catch (ParseException e) {
				e.printStackTrace();
			}
			// 更新
			int count = userService.updateUser(user);
			if(count > 0){
				response.sendRedirect("FindUserByPageAction");
			}else{
				request.setAttribute("msg", "对不起,更新失败!");
				request.getRequestDispatcher("error.jsp").forward(request, response);
			}
		}else{
			request.setAttribute("msg", "对不起,没有找打要更新的数据");
			request.getRequestDispatcher("error.jsp").forward(request, response);
		}		
	}
}
4.2.7.6 FilterChain 过滤器链
package com.hnxy.web;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {

	public void destroy() {
		System.out.println("[信息]中文乱码过滤器已停止工作......");
	}
	
	public void init(FilterConfig fConfig) throws ServletException {
		System.out.println("[信息]中文乱码过滤器初始化工作完成........");
	}
	
	/**
	 * FilterChain 过滤器链 
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// 处理中文乱码问题
		request.setCharacterEncoding("UTF-8");
		// pass the request along the filter chain
		chain.doFilter(request, response); // 执行下一个过滤器 直到最后一个过滤器执行完 把处理给servlet
	}
}

4.2.8 WebContent下创建各类页面

4.2.8.1 首页index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>海牛学院-会员信息管理系统</title>
	<link rel="stylesheet" href="${pageContext.request.contextPath}/css/bootstrap.min.css">  
	<script src="${pageContext.request.contextPath}/js/jquery-1.9.1.js"></script>
	<script src="${pageContext.request.contextPath}/js/bootstrap.min.js"></script>
	<script type="text/javascript">
		// 查询数据请求
		function showUsers(){
			window.location.href = "FindUserByPageAction";
		}
		// 跳转添加人员页面
		function addUser(){
			window.location.href = "add.jsp";
		}
	</script>
</head>
<body>

<div class="jumbotron">
	<div class="container">
		
		<h1>欢迎使用海牛会员信息管理系统!</h1>
		<p>请选择一个功能吧......</p>
		<p>
			<a class="btn btn-primary btn-lg" role="button" onclick="showUsers();">查询会员信息</a>
			<a class="btn btn-success btn-lg" role="button" onclick="addUser();">添加新会员</a>
		</p>
	</div>
</div>
</body>
</html>

效果:
在这里插入图片描述

4.2.8.2 展示页面 show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>海牛学院-会员信息管理系统</title>
	<link rel="stylesheet" href="${pageContext.request.contextPath}/css/bootstrap.min.css">  
	<script src="${pageContext.request.contextPath}/js/jquery-1.9.1.js"></script>
	<script src="${pageContext.request.contextPath}/js/bootstrap.min.js"></script>
	<script type="text/javascript">
		// 分页
		function goPage(pi){
			window.location.href = "FindUserByPageAction?pageIndex="+pi;
		}
		// 删除
		function goDelete(uid){
			var con = window.confirm("确定要删除这条数据么?");
			if(con == true){
				window.location.href = "DeleteUserAction?uid="+uid;
			}
		}
		// 更新
		function goUpdate(uid){
			window.location.href = "FindUserByIDAction?uid="+uid;
		}
	</script>
</head>
<body>
	<div>
		<h1>会员信息展示</h1>
		<div style="margin: 10px;">
			<button type="button" class="btn btn-primary" onclick="javascript:window.location.href='index.jsp;'">返回首页</button>
		</div>
		
		<table class="table table-hover">
			<tr class="active">
				<td colspan="5">
					一共查询出数据<strong style="color: blue;font-size: 20px;"> ${totalCount} </strong>
					条,每页展示<strong style="color: blue;font-size: 20px;"> ${pageSize} </strong>
					条,一共需要展示<strong style="color: blue;font-size: 20px;"> ${totalPage} </strong>
					页,当前是第<strong style="color: blue;font-size: 20px;"> ${pageIndex} </strong>页;
				</td>
			</tr>
			<tr class="info">
				<th>会员编号</th>
				<th>会员姓名</th>
				<th>入会时间</th>
				<th>会员余额</th>
				<th>操作</th>
			</tr>
			<c:forEach var="u" items="${users}">
				<tr>
					<td>${u.uid}</td>
					<td>${u.uname}</td>
					<td>
						<fmt:formatDate value="${u.regDate}" pattern="yyyy年MM月dd日"/>
					</td>
					<td>
						<fmt:formatNumber type="currency" value="${u.money}" />
					</td>
					<th>
						<button type="button" onclick="goUpdate(${u.uid});" class="btn btn-warning">更新</button>
						<button type="button" onclick="goDelete(${u.uid});" class="btn btn-danger">删除</button>
					</th>
				</tr>
			</c:forEach>
			<tr>
				<th colspan="5" style="text-align: center;">
					<button type="button" onclick="goPage(1);" class="btn btn-default">首页</button>
					<c:choose>
						<c:when test="${pageIndex > 1}">
							<button type="button" onclick="goPage(${pageIndex -1});" class="btn btn-default">上一页</button>
						</c:when>
						<c:otherwise>
							<button type="button" disabled="disabled" class="btn btn-default">上一页</button>
						</c:otherwise>
					</c:choose>
					<!-- 正常情况 -->
					<c:choose>
						<c:when test="${totalPage > pageIndex}">
							<button type="button" onclick="goPage(${pageIndex+1});" class="btn btn-default">下一页</button>
						</c:when>
						<c:otherwise>
							<button type="button" disabled="disabled" class="btn btn-default">下一页</button>
						</c:otherwise>
					</c:choose>
					<button type="button" onclick="goPage(${totalPage});" class="btn btn-default">末页</button>
				</th>
			</tr>
		</table>
	</div>
</body>
</html>

效果:
在这里插入图片描述

4.2.8.3 添加页面 add.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>海牛学院会员信息管理系统</title>
	<link rel="stylesheet" href="${pageContext.request.contextPath}/css/bootstrap.min.css">  
	<script src="${pageContext.request.contextPath}/js/jquery-1.9.1.js"></script>
	<script src="${pageContext.request.contextPath}/js/bootstrap.min.js"></script>
	<script type="text/javascript">
	</script>
	
</head>
<body>
	<div class=container>
		<h1>添加会员信息!</h1>
		<form action="AddUserAction" method="post">
			<table class="table table hover">
			<tr>
				<td>会员姓名</td>
				<td>
					<input type="text" class="form-control" name="uname" required="required" placeholder="请输入会员真实姓名" />
				</td>
			</tr>
			<tr>
				<td>会员时间</td>
				<td>
					<input type="date" class="form-control" name="regdate" required="required" />
				</td>
			</tr>
			<tr>
				<td>充值金额</td>
				<td>
					<input type="text" class="form-control" name="money" required="required" placeholder="请输入会员充值金额" />
				</td>
			</tr>
			<tr>
				<td colspan="2" style="text-align: center;">
					<button type="submit" class="btn btn-success">确定</button>
					<button type="reset" class="btn btn-danger" onclick="javascript:history.go(-1);">取消
				</td>
			</tr>
			</table>
		</form>
	</div>
</body>
</html>

在这里插入图片描述

4.2.8.4 更新页面 update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>海牛学院会员信息管理系统</title>
	<link rel="stylesheet" href="${pageContext.request.contextPath}/css/bootstrap.min.css">  
	<script src="${pageContext.request.contextPath}/js/jquery-1.9.1.js"></script>
	<script src="${pageContext.request.contextPath}/js/bootstrap.min.js"></script>
	<script type="text/javascript">
	</script>
	
</head>
<body>
	<div class=container>
		<h1>更新会员信息</h1>
		<form action="UpdateUserAction" method="post">
			<input type="hidden" name="uid" value="${user.uid}"/>
			<table class="table table hover">
			<tr>
				<td>会员姓名</td>
				<td>
					<input type="text" class="${user.uname}" name="uname" required="required" placeholder="请输入会员真实姓名" />
				</td>
			</tr>
			<tr>
				<td>会员时间</td>
				<td>
					<input type="date" class="${user.regDate}" name="regdate" required="required" />
				</td>
			</tr>
			<tr>
				<td>充值金额</td>
				<td>
					<input type="text" class="${user.money}" name="money" required="required" placeholder="请输入会员充值金额" />
				</td>
			</tr>
			<tr>
				<td colspan="2" style="text-align: center;">
					<button type="submit" class="btn btn-success">确定</button>
					<button type="reset" class="btn btn-danger" onclick="javascript:history.go(-1);">取消
				</td>
			</tr>
			</table>
		</form>
	</div>
</body>
</html>

在这里插入图片描述

4.2.8.5 错误页面 error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>海牛学院会员信息管理系统</title>
	<link rel="stylesheet" href="${pageContext.request.contextPath}/css/bootstrap.min.css">  
	<script src="${pageContext.request.contextPath}/js/jquery-1.9.1.js"></script>
	<script src="${pageContext.request.contextPath}/js/bootstrap.min.js"></script>
	<script type="text/javascript">
		function goIndex(){
			window.location.href = "index.jsp";
		}
	</script>

</head>
<body>

<div class="jumbotron">

	<div class=container>
		<h1>欢迎来到海牛学院管理系统!</h1>
		<p>报错了,错误原因${msg}</p>
		<p><a class="btn btn-primary btn-lg" role="button" onclick="goIndex();">
			返回首页</a>
		</p>
	</div>
</div>

</body>
</html>

效果:
在这里插入图片描述

4.2.9 xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>servlet03_day0803</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>FindUserByPageAction</display-name>
    <servlet-name>FindUserByPageAction</servlet-name>
    <servlet-class>com.hnxy.web.FindUserByPageAction</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>FindUserByPageAction</servlet-name>
    <url-pattern>/FindUserByPageAction</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>AddUserAction</display-name>
    <servlet-name>AddUserAction</servlet-name>
    <servlet-class>com.hnxy.web.AddUserAction</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AddUserAction</servlet-name>
    <url-pattern>/AddUserAction</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>DeleteUserAction</display-name>
    <servlet-name>DeleteUserAction</servlet-name>
    <servlet-class>com.hnxy.web.DeleteUserAction</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DeleteUserAction</servlet-name>
    <url-pattern>/DeleteUserAction</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>FindUserByIDAction</display-name>
    <servlet-name>FindUserByIDAction</servlet-name>
    <servlet-class>com.hnxy.web.FindUserByIDAction</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>FindUserByIDAction</servlet-name>
    <url-pattern>/FindUserByIDAction</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>UpdateUserAction</display-name>
    <servlet-name>UpdateUserAction</servlet-name>
    <servlet-class>com.hnxy.web.UpdateUserAction</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UpdateUserAction</servlet-name>
    <url-pattern>/UpdateUserAction</url-pattern>
  </servlet-mapping>
</web-app>

4.3 项目框架-思维导图

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值