目录
4.在service层中,UserService接口添加代码
5.在serviceImp层中,UserServiceImp类中添加代码
6.在Controller中,添加ListByPageServlet类
9.在Controller中,添加LoadUpdateUserServlet类
12.在Controller中,添加UpdateStatusServlet类
13.在Controller中,添加LoginServlet类,实现登陆功能
项目源码:链接:https://pan.baidu.com/s/1xwuJ6HNxl5wEf2JB9v84kQ 密码:5env
最终效果:
1.在UserDao接口中,添加Count方法
用来获取总数据量
/**
* 获取user的总数
* @return
*/
public int getCount();
2.在UserDaoImp类中实现这个方法
@Override
public int getCount() {
Connection connection=JDBCUtil.getConnection();
PreparedStatement pstm=null;
ResultSet rs=null;
String sqlstring="select count(*) from user";
try {
pstm=connection.prepareStatement(sqlstring);
rs=pstm.executeQuery();
while(rs.next()){
return rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.closeAll(rs, pstm, connection);
}
return 0;
}
3.在entity层中,添加PageUtil类
这里的PageUtil其实可以看做是视图模型也就是ViewModel,用来把数据传到视图上的模型
/**
*
* @author Administrator
* 分页的实体
*/
public class PageUtil<T> {
/**
* 当前是第几页
*/
private int curIndex;
/**
* 一页的数量
*/
private int pageSize;
/**
* 总页数
*/
private int totalPage;
/**
* 总数据:
*/
private int totalNum;
private List<T> list;
public int getCurIndex() {
return curIndex;
}
public void setCurIndex(int curIndex) {
this.curIndex = curIndex;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getTotalNum() {
return totalNum;
}
public void setTotalNum(int totalNum) {
this.totalNum = totalNum;
}
@Override
public String toString() {
return "PageUtil [curIndex=" + curIndex + ", pageSize=" + pageSize
+ ", totalPage=" + totalPage + ", totalNum=" + totalNum
+ ", list=" + list + "]";
}
}
4.在service层中,UserService接口添加代码
/**
* 登录业务
*/
public boolean login(String username,String pwd);
/**
* 根据用户名和密码找一个u对象
*/
public User findUserByName(String username,String pwd);
/**
* 分页显示用户
*/
public PageUtil<User> listByPage(int curIndex,int pageSize);
public User findById(int id);
5.在serviceImp层中,UserServiceImp类中添加代码
@Override
public boolean login(String username, String pwd) {
User u= dao.findUserByNamePwd(username, pwd);
if(u!=null){
return true;
}
return false;
}
@Override
public User findUserByName(String username, String pwd) {
return dao.findUserByNamePwd(username, pwd);
}
@Override
public PageUtil<User> listByPage(int curIndex, int pageSize) {
PageUtil<User> page=new PageUtil<User>();
page.setCurIndex(curIndex);
page.setPageSize(pageSize);
page.setTotalNum(dao.getCount());
// 20 ---> 12 1.4 2
//20/12=1
int pages=(int)Math.ceil((double)dao.getCount()/pageSize);
page.setTotalPage(pages);
List<User> list=dao.listByPage(curIndex, pageSize);
page.setList(list);
return page;
}
@Override
public User findById(int id) {
return dao.findUserById(id);
}
6.在Controller中,添加ListByPageServlet类
浏览器访问这个Servlet,先获取数据库里面的数据和设置每页显示的数据条数,把数据丢到PageUtil模型中。然后再把请求转发到index.jsp。而不是直接访问index.jsp这个页面
package com.ly.controller;
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.ly.entity.PageUtil;
import com.ly.entity.User;
import com.ly.service.UserService;
import com.ly.servicelmp.UserServicelmp;
public class ListByPageServlet extends HttpServlet {
private static final long serialVersionUID = -5544844869939793697L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int curIndex=1;
int pageSize=10;
String cur=req.getParameter("curIndex");
if (cur!=null) {
curIndex=Integer.parseInt(cur);
}
UserService userService=new UserServicelmp();
PageUtil<User> pages=userService.listByPage(curIndex, pageSize);
req.setAttribute("pages", pages);
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
}
7.编写index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>列表页</title>
</head>
<body>
<h4>用户展示</h4>
<table cellpadding="0" cellspacing="0" border="1">
<tr>
<td>序号</td>
<td>用户名</td>
<td>状态</td>
<td>角色</td>
<td>操作</td>
</tr>
<c:forEach var="u" items="${pages.list }" varStatus="status">
<tr>
<td>${status.index+1 }</td>
<td>${u.username}</td>
<c:choose>
<c:when test="${u.status==1 }">
<c:set var="sta" value="正常"></c:set>
</c:when>
<c:when test="${u.status==2 }">
<c:set var="sta" value="离职"></c:set>
</c:when>
</c:choose>
<td>${sta}</td>
<c:choose>
<c:when test="${u.role == 1}">
<c:set var="role" value="普通人员"></c:set>
</c:when>
<c:when test="${u.role == 2}">
<c:set var="role" value="管理员"></c:set>
</c:when>
<c:when test="${u.role == 3}">
<c:set var="role" value="超级管理员"></c:set>
</c:when>
</c:choose>
<td>${role}</td>
<td><a href="LoadUpdateUserServlet?id=${u.id}">修改状态</a></td>
</tr>
</c:forEach>
</table>
<a href="ListByPageServlet?curIndex=${pages.curIndex==1?1:pages.curIndex-1}">上一页</a>
<a href="ListByPageServlet?curIndex=${pages.curIndex==pages.totalPage?pages.totalPage:pages.curIndex+1}">下一页</a>
</body>
</html>
8.查看列表效果
9.在Controller中,添加LoadUpdateUserServlet类
在点击上面的修改状态时,会携带ID访问这个Servlet,通过ID找出这条信息,再转发请求到updateStatus.jsp页面
package com.ly.controller;
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.ly.entity.User;
import com.ly.service.UserService;
import com.ly.servicelmp.UserServicelmp;
public class LoadUpdateUserServlet extends HttpServlet {
private static final long serialVersionUID = 185829281120159402L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String sid= req.getParameter("id");
UserService us=new UserServicelmp();
User u=us.findById(Integer.parseInt(sid));
if(u!=null){
req.setAttribute("u", u);
req.getRequestDispatcher("updateStatus.jsp").forward(req, resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
10.添加updateStatus.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>修改页面</title>
</head>
<body>
<h2>修改人员的状态:离职</h2>
<form action="UpdateStatusServlet?id=${u.id}" method="post">
<lable>用户:</lable> <input type="text" value="${u.username}" readonly="readonly"/> <br/>
<lable>状态</lable>
<select name="status">
<option value="1">正常</option>
<option value="2">离职</option>
</select>
<input type="submit" value="修改"/>
</form>
<p style="color:red">${msg}</p>
</body>
</html>
11.运行效果
12.在Controller中,添加UpdateStatusServlet类
点击上面的修改按钮会访问这个Servlet,获取提交上来的用户名和状态,再更新到数据库。
package com.ly.controller;
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.ly.service.UserService;
import com.ly.servicelmp.UserServicelmp;
public class UpdateStatusServlet extends HttpServlet {
private static final long serialVersionUID = -7611113973578900805L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String status= req.getParameter("status");
String sid= req.getParameter("id");
if(status!=null && sid!=null){
UserService us=new UserServicelmp();
boolean flag= us.updateStatus(Integer.parseInt(sid), Integer.parseInt(status));
if(flag){
req.getRequestDispatcher("ListByPageServlet").forward(req, resp);
}else{
String msg="修改失败!";
req.setAttribute("msg", msg);
req.getRequestDispatcher("updateStatus.jsp").forward(req, resp);
}
}
}
}
13.在Controller中,添加LoginServlet类,实现登陆功能
package com.ly.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.ly.entity.User;
import com.ly.service.UserService;
import com.ly.servicelmp.UserServicelmp;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 6392410094721738202L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
// 第一:获取请求的参数
String user = req.getParameter("user");
String pwd = req.getParameter("pwd");
System.out.println(user+"+"+pwd);
// 第二步:调用业务层:注册的业务即可
// 父类的应用指向子类的实例
UserService us = new UserServicelmp();
// 第二调用业务层逻辑
boolean flag = us.login(user, pwd);
if (flag) {
// 如果是超级管理员,直接讲所有的用户进行分页显示
User u = us.findUserByName(user, pwd);
HttpSession session = req.getSession();
session.setAttribute("user", u);
if (u != null && u.getRole() == 2) {
// 分页显示对象的用户
req.getRequestDispatcher("ListByPageServlet").forward(req, resp);
}
} else {
System.out.println("转到登陆界面");
resp.sendRedirect("login.jsp");
}
}
}
14.编写Login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="LoginServlet" method="post" >
<lable>用户名:</lable> <input type="text" name="user"/> <br/>
<lable>密码:</lable> <input type="password" name="pwd"/>
<button type="submit">登录</button>
</form>
</body>
</html>