SMBMS(Supermarket Billing Management System )

目录

1. 项目架构

graph LR
id1[SMBMS]

id2[登录注销]
id3[用户管理]
id4[订单管理]
id5[供应商管理]

id6[增]
id7[删]
id8[改]
id9[查]
id10[ ]
id11[数据库]

id1 --> id2
id1 --> id3
id1 --> id4
id1 --> id5

id10 --> id6
id10 --> id7
id10 --> id8
id10 --> id9

id3 --> id10
id4 --> id10
id5 --> id10

id6 --> id11
id7 --> id11
id8 --> id11
id9 --> id11

2. 项目搭建的准备工作

  1. 搭建一个Maven Web项目

  2. 配置Tomcat

  3. 测试项目是否能够跑起来

  4. 导入项目中需要用到的Jar包:jsp,Servlet, mysql驱动, jstl, standard

  5. 创建项目包结构

  6. 编写实体类

    ORM映射:表 -- 类映射

  7. 编写基础公共类

    1. 数据库配置文件(db.properties)
    driver = com.mysql.jdbc.Driver
    url = jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8
    username = root
    password = 123456
    1. 编写数据库公共类
    package com.wang.dao;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.*;
    import java.util.Properties; //操作数据库的公共类
    public class BaseDao { private static String driver;
    private static String url;
    private static String username;
    private static String password; //静态代码块,类加载的时候就初始化了
    static {
    Properties properties = new Properties();
    //通过类加载器读取对应的资源
    //由于getResourceAsStream中调用了private方法,此处必须用反射来读配置文件
    InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties"); try {
    properties.load(is);
    } catch (IOException e) {
    e.printStackTrace();
    } driver = properties.getProperty("driver");
    url = properties.getProperty("url");
    username = properties.getProperty("username");
    password = properties.getProperty("password");
    } //获取数据库的连接
    public static Connection getConnection() {
    Connection connection = null;
    try {
    Class.forName(driver);
    connection = DriverManager.getConnection(url, username, password);
    } catch (Exception e) {
    e.printStackTrace();
    }
    return connection;
    } //编写查询公共类
    public static ResultSet execute(Connection connection, String sql, Object[] params, ResultSet resultSet, PreparedStatement preparedStatement) throws SQLException {
    //预编译的sql,在后面直接执行就可以了,不用传参
    preparedStatement = connection.prepareStatement(sql); //给预编译的sql传参数
    for (int i = 0; i < params.length; i++) {
    //setObject方法,占位符从1开始,但是我们的数组是从0开始的,因此下面写 i+1
    preparedStatement.setObject(i + 1, params[i]);
    } resultSet = preparedStatement.executeQuery();
    return resultSet;
    } //编写增删改公共方法
    public static int execute(Connection connection, String sql, Object[] params, PreparedStatement preparedStatement) throws SQLException {
    preparedStatement = connection.prepareStatement(sql); //给预编译的sql传参数
    for (int i = 0; i < params.length; i++) {
    //setObject方法,占位符从1开始,但是我们的数组是从0开始的,因此下面写 i+1
    preparedStatement.setObject(i + 1, params[i]);
    } int updateRows = preparedStatement.executeUpdate();
    return updateRows;
    } //释放资源
    public static boolean closeResource(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
    boolean flag = true; if (resultSet != null){
    try {
    resultSet.close();
    //GC回收
    resultSet = null;
    } catch (SQLException e) {
    e.printStackTrace();
    flag = false;
    }
    } if (preparedStatement != null){
    try {
    preparedStatement.close();
    //GC回收
    preparedStatement = null;
    } catch (SQLException e) {
    e.printStackTrace();
    flag = false;
    }
    } if (connection != null){
    try {
    connection.close();
    //GC回收
    connection = null;
    } catch (SQLException e) {
    e.printStackTrace();
    flag = false;
    }
    } return flag;
    } }
    1. 编写字符编码过滤器并注册
    package com.wang.filter;
    
    import javax.servlet.*;
    import java.io.IOException; public class CharacterEncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException { } @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8"); chain.doFilter(request, response);
    } @Override
    public void destroy() { }
    }
    <!--字符编码过滤器-->
    <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>com.wang.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <!--所有的url都会被过滤-->
    <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
  8. 导入静态资源

3. 登陆功能实现

graph LR
id1[用户]
id2[登录界面<br>用户名<br>密码]
id3[判断是否登陆成功]
id4[失败]
id5[成功]
id6[后台首页]
id7[数据库]
id8[Dao]

id1 --> id2
id2 --login.dao--> id3
id3 --> id4
id4 --提示登录失败--> id2
id3 --> id5
id5 --跳转到后台首页--> id6
id6 --> id1
id3 --> id8
id8 --> id3
id7 --> id8
id8 --> id7

1. 编写前端页面

2. 设置首页

<!--设置欢迎页面-->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>

3. 编写Dao层,用户登录的接口

package com.wang.dao.user;

import com.wang.pojo.User;

import java.sql.Connection;
import java.sql.SQLException; public interface UserDao { //得到登录的用户
public User getLoginUser(Connection connection, String userCode) throws SQLException; }

4. 编写Dao接口的实现类

package com.wang.dao.user;

import com.wang.dao.BaseDao;
import com.wang.pojo.User; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class UserDaoImpl implements UserDao {
@Override
public User getLoginUser(Connection connection, String userCode) throws SQLException {
PreparedStatement pstm = null;
ResultSet rs = null;
User user = null; if (connection != null) {
String sql = "select * from smbms_user where userCode = ?";
Object[] params = {userCode}; rs = BaseDao.execute(connection, sql, params, rs, pstm); if (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUserCode(rs.getString("userCode"));
user.setUserName(rs.getString("userName"));
user.setUserPassword(rs.getString("userPassword"));
user.setGender(rs.getInt("gender"));
user.setBirthday(rs.getDate("birthday"));
user.setPhone(rs.getString("phone"));
user.setAddress(rs.getString("address"));
user.setUserRole(rs.getInt("userRole"));
user.setCreatedBy(rs.getInt("createdBy"));
user.setCreationDate(rs.getTimestamp("creationDate"));
user.setModifyBy(rs.getInt("modifyBy"));
user.setModifyDate(rs.getTimestamp("modifyDate"));
}
BaseDao.closeResource(null, pstm, rs); } return user; }
}

5. 业务层接口

package com.wang.service.user;

import com.wang.pojo.User;

public interface UserService {

    //用户登录
public User login(String userCode, String password); }

6. 业务层实现

package com.wang.service.user;

import com.wang.dao.BaseDao;
import com.wang.dao.user.UserDao;
import com.wang.dao.user.UserDaoImpl;
import com.wang.pojo.User;
import org.junit.Test; import java.sql.Connection;
import java.sql.SQLException; public class UserServiceImpl implements UserService { //业务层都会调用dao层,因此我们要引入dao层
private UserDao userDao;
public UserServiceImpl() {
userDao = new UserDaoImpl();
} @Override
public User login(String userCode, String password) {
Connection connection = null;
User user = null; try {
connection = BaseDao.getConnection();
//通过业务层调用对应的具体的数据库操作
user = userDao.getLoginUser(connection, userCode);
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
BaseDao.closeResource(connection, null, null);
}
return user;
} @Test
public void test() {
UserServiceImpl userService = new UserServiceImpl();
User admin = userService.login("admin", "1234567");
System.out.println(admin.getUserPassword());
} }

7. 编写Servlet

package com.wang.servlet.user;

import com.wang.pojo.User;
import com.wang.service.user.UserServiceImpl;
import com.wang.util.Constants; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; public class LoginServlet extends HttpServlet { //Servlet:控制层,调用业务层代码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("LoginServlet -- start ......"); //获取用户名和密码
String userCode = req.getParameter("userCode");
String userPassword = req.getParameter("userPassword"); //和数据库中的密码进行对比,调用业务层
UserServiceImpl userService = new UserServiceImpl();
//这里已经把登录的人给查出来了
User user = userService.login(userCode, userPassword); if (user != null) {
//查有此人,可以登录
//将用户的信息放到session中
req.getSession().setAttribute(Constants.USER_SESSION, user);
//跳转到主页
resp.sendRedirect("jsp/frame.jsp");
}else {
//查无此人,无法登陆
//转发会登录页面,顺带提示用户名或密码错误
req.setAttribute("error", "用户名或密码不正确");
req.getRequestDispatcher("login.jsp").forward(req, resp); }
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

8. 注册Servlet

<!--Servlet-->
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.wang.servlet.user.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>

9. 测试访问,确保以上功能都能实现

4. 登录功能优化

注销功能:

思路:移除Session,返回登录页面

package com.wang.servlet.user;

import com.wang.util.Constants;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; public class LogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//移除用户的Session
req.getSession().removeAttribute(Constants.USER_SESSION);
//返回登录页面
resp.sendRedirect(req.getContextPath() + "/login.jsp");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

注册xml

<servlet>
<servlet-name>LogoutServlet</servlet-name>
<servlet-class>com.wang.servlet.user.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LogoutServlet</servlet-name>
<url-pattern>/jsp/logout.do</url-pattern>
</servlet-mapping>

登录拦截优化

编写过滤器并注册

package com.wang.filter;

import com.wang.pojo.User;
import com.wang.util.Constants; import javax.servlet.*; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; public class SysFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp; //过滤器,从session中获取用户
User user = (User) request.getSession().getAttribute(Constants.USER_SESSION); //已经被移除或者被注销了,或者未登录
if (user == null) {
response.sendRedirect("/smbms/error.jsp");
}else {
chain.doFilter(req, resp);
}
} @Override
public void destroy() { }
}
<!--用户登录过滤器-->
<filter>
<filter-name>SysFilter</filter-name>
<filter-class>com.wang.filter.SysFilter</filter-class>
</filter>
<!--所有的访问jsp目录下的资源都会被过滤-->
<filter-mapping>
<filter-name>SysFilter</filter-name>
<url-pattern>/jsp/*</url-pattern>
</filter-mapping>

5. 密码修改

1. 导入前端素材

2. 写项目,建议从底层向上写

3. UserDao接口

//修改当前用户的密码
public int updatePwd(Connection connection, int id, int password) throws SQLException;

4. UserDao实现类

//修改当前用户的密码,返回受影响的行数
@Override
public int updatePwd(Connection connection, int id, int password) throws SQLException { PreparedStatement pstm = null;
int execute = 0; if (connection != null) {
String sql = "update smbms_user set userPassword = ? where id = ?";
Object params[] = {password, id};
execute = BaseDao.execute(connection, sql, params, pstm);
BaseDao.closeResource(null, pstm, null);
} return execute; }

5. UserService接口

//根据用户ID修改密码
public boolean updatePwd(int id, int pwd);

6. UserService实现类

@Override
public boolean updatePwd(int id, int pwd) {
Connection connection = null;
boolean flag = false; //修改密码
try {
connection = BaseDao.getConnection();
if (userDao.updatePwd(connection, id, pwd) > 0) {
flag = true;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
BaseDao.closeResource(connection, null, null);
}
return flag;
}

7. 记得实现复用,需要提取出方法!

package com.wang.servlet.user;

import com.mysql.jdbc.StringUtils;
import com.wang.pojo.User;
import com.wang.service.user.UserService;
import com.wang.service.user.UserServiceImpl;
import com.wang.util.Constants; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; //实现Servlet服用
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getParameter("method");
if (method.equals("savepwd") && method != null) {
this.updatePwd(req, resp);
}
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
} public void updatePwd(HttpServletRequest req, HttpServletResponse resp) {
//从Session里面拿ID
Object o = req.getSession().getAttribute(Constants.USER_SESSION);
String newpassword = req.getParameter("newpassword"); boolean flag = false; if (o != null && !StringUtils.isNullOrEmpty(newpassword)) {
UserService userService = new UserServiceImpl();
flag = userService.updatePwd(((User) o).getId(), newpassword);
if (flag) {
req.setAttribute("message", "修改密码成功,请退出,使用新密码登录");
//密码修改成功,移除当前Session
req.getSession().removeAttribute(Constants.USER_SESSION);
} else {
req.setAttribute("message", "密码修改失败");
}
} else {
req.setAttribute("message", "新密码有问题");
} try {
req.getRequestDispatcher("pwdmodify.jsp").forward(req,resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

8. 注册Servlet

<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.wang.servlet.user.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/jsp/user.do</url-pattern>
</servlet-mapping>

6. 优化密码修改:使用AJAX

1. 引入阿里巴巴的fastjson

2. 后台代码修改

//验证旧密码,session中有用户的密码
public void pwdModify(HttpServletRequest req, HttpServletResponse resp) {
//从Session里面拿ID
Object o = req.getSession().getAttribute(Constants.USER_SESSION);
String oldpassword = req.getParameter("oldpassword"); //万能的map: 结果集
Map<String, String> resultMap = new HashMap<>(); if (o == null) {
//Session失效了,Session过期了
resultMap.put("result", "sessionerror");
} else if (StringUtils.isNullOrEmpty(oldpassword)) {
resultMap.put("result", "error");
} else {
//Session用户的密码
String userPassword = ((User) o).getUserPassword();
if (oldpassword.equals(userPassword)) {
resultMap.put("result", "true");
} else {
resultMap.put("result", "false");
}
} try {
//限定响应返回的格式为json
resp.setContentType("application/json");
PrintWriter writer = resp.getWriter();
//JSONArray 阿里巴巴的JSON工具类转换格式
/*
把resultMap转为JSON格式
*/
writer.write(JSONArray.toJSONString(resultMap));
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}

7. 用户管理实现

1. 思路

graph LR
id1[用户]
id2[Servlet<br>1.处理请求<br>2.调用业务<br>3.返回页面]
id3[用户列表]
id4[角色列表]
id5[分页<br>pageSize&#40固定的&#41<br>总数&#40从数据库里查&#41]
id6[Service]
id7[Dao]
id8[数据库]

id1 --发起请求--> id2
id2 --返回前端页面--> id1
id2 --> id3
id2 --> id4
id2 --> id5

id3 --> id6
id4 --> id6
id5 --> id6
id6 --> id7
id7 --> id8

2. 导入分页的工具类

3. 用户列表页导入

  1. userlist.jsp
  2. rollpage.jsp

4. 获取用户数量

  1. UserDao
//根据用户名或者角色查询用户总数
public int getUserCount(Connection connection, String username, int userRole) throws SQLException;
  1. UserDaoImpl
//根据用户名或者角色查询用户总数
@Override
public int getUserCount(Connection connection, String username, int userRole) throws SQLException { PreparedStatement pstm = null;
ResultSet rs = null;
int count = 0; if (connection != null) {
StringBuffer sql = new StringBuffer();
sql.append("select count(1) as count from smbms_user as u, smbms_role as r where u.userRole = r.id");
//存放我们的参数
ArrayList<Object> list = new ArrayList<>(); if (!StringUtils.isNullOrEmpty(username)) {
sql.append(" and u.userName like ?");
list.add("%" + username + "%"); //index = 0
} if (userRole > 0) {
sql.append(" and u.userRole like ?");
list.add(userRole); //index = 1
} //把list转为数组
Object[] objects = list.toArray(); rs = BaseDao.execute(connection, sql.toString(), objects, rs, pstm); if (rs.next()) {
//从结果集中获得最终的结果
count = rs.getInt("count");
} BaseDao.closeResource(null, pstm, rs); } return count;
}
  1. UserService
//查询记录数
public int getUserCount(String username, int userRole);
  1. UserServiceImpl
//查询记录数
@Override
public int getUserCount(String username, int userRole) { Connection connection = null;
int userCount = 0; try {
connection = BaseDao.getConnection();
userCount = userDao.getUserCount(connection, username, userRole);
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
BaseDao.closeResource(connection, null, null);
} return userCount;
}

5. 获取用户列表

  1. UserDao
//通过条件查询-userlist
public List<User> getUserList(Connection connection, String userName, int userRole, int currentPageNo, int pageSize) throws SQLException;
  1. UserDaoImpl
//通过条件查询-userlist
@Override
public List<User> getUserList(Connection connection, String userName, int userRole, int currentPageNo, int pageSize) throws SQLException { PreparedStatement pstm = null;
ResultSet rs = null;
ArrayList<User> userList = new ArrayList<>(); if (connection != null) {
StringBuffer sql = new StringBuffer();
sql.append("select u.*, r.roleName userRoleName from smbms_user as u join smbms_role as r on u.userRole = r.id");
//存放我们的参数
ArrayList<Object> list = new ArrayList<>(); if (!StringUtils.isNullOrEmpty(userName)) {
sql.append(" and u.userName like ?");
list.add("%" + userName + "%"); //index = 0
} if (userRole > 0) {
sql.append(" and u.userRole like ?");
list.add(userRole); //index = 1
} //在数据库中,分页使用limit startIndex, pageSize; 总数
//0,5
//6,5
//(当前页-1)*页面大小 sql.append("order by creationDate desc limit ?, ?");
currentPageNo = (currentPageNo - 1) * pageSize;
list.add(currentPageNo);
list.add(pageSize); Object[] params = list.toArray();
rs = BaseDao.execute(connection, sql.toString(), params, rs, pstm);
while (rs.next()) {
User _user = new User();
_user.setId(rs.getInt("id"));
_user.setUserCode(rs.getString("userCode"));
_user.setUserName(rs.getString("userName"));
_user.setGender(rs.getInt("gender"));
_user.setBirthday(rs.getDate("birthday"));
_user.setPhone(rs.getString("phone"));
_user.setUserRole(rs.getInt("userRole"));
_user.setUserRoleName(rs.getString("userRoleName"));
userList.add(_user);
}
BaseDao.closeResource(null, pstm, rs); }
return userList;
}
  1. UserService
//根据条件查询用户列表
public List<User> getUserList(String queryUserName, int queryUserRole, int currentPageNo, int pageSize);
  1. UserServiceImpl
//根据条件查询用户列表
@Override
public List<User> getUserList(String queryUserName, int queryUserRole, int currentPageNo, int pageSize) {
Connection connection = null;
List<User> userList = null; try {
connection = BaseDao.getConnection();
userList = userDao.getUserList(connection, queryUserName, queryUserRole, currentPageNo, pageSize);
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
BaseDao.closeResource(connection, null, null);
} return userList; }

6. 获取角色操作

为了我们职责统一,可以把角色的操作单独放在一个包中,和POJO类对应

RoleDao

public interface RoleDao {
//获取角色列表
public List<Role> getRoleList(Connection connection) throws SQLException;
}

RoleDaoImpl

package com.wang.dao.role;

import com.wang.dao.BaseDao;
import com.wang.pojo.Role; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List; public class RoleDaoImpl implements RoleDao{
//获取角色列表
@Override
public List<Role> getRoleList(Connection connection) throws SQLException { PreparedStatement pstm = null;
ResultSet rs = null;
List<Role> roleList = null; if (connection != null) {
String sql = "select * from smbms_role";
Object[] params = null;
rs = BaseDao.execute(connection, sql, params, rs, pstm); while (rs.next()) {
Role _role = new Role();
_role.setId(rs.getInt("id"));
_role.setRoleName(rs.getString("roleName"));
_role.setRoleCode(rs.getString("roleCode"));
roleList.add(_role);
}
BaseDao.closeResource(null, pstm, rs);
}
return roleList;
}
}

RoleService

package com.wang.service.role;

import com.wang.pojo.Role;

import java.util.List;

public interface RoleService {
//获取角色列表
public List<Role> getRoleList();
}

RoleServiceImpl

package com.wang.service.role;

import com.wang.dao.BaseDao;
import com.wang.dao.role.RoleDao;
import com.wang.dao.role.RoleDaoImpl;
import com.wang.pojo.Role; import java.sql.Connection;
import java.sql.SQLException;
import java.util.List; public class RoleServiceImpl implements RoleService{ //引入Dao
private RoleDao roleDao;
public RoleServiceImpl() {
roleDao = new RoleDaoImpl();
} @Override
public List<Role> getRoleList() {
Connection connection = null;
List<Role> roleList = null;
try {
connection = BaseDao.getConnection();
roleList = roleDao.getRoleList(connection);
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
BaseDao.closeResource(connection, null, null);
}
return roleList;
}
}

7. 用户显示的Servlet

  1. 获取用户前端的数据(查询)

  2. 判断请求是否需要执行,看参数的值判断

  3. 为了实现分页,需要计算出当前页面和总页面,页面参数

//重点,难点
public void query(HttpServletRequest req, HttpServletResponse resp) { //查询用户列表 //从前端获取数据
String queryUserName = req.getParameter("queryname");
String temp = req.getParameter("queryUserRole");
String pageIndex = req.getParameter("pageIndex");
int queryUserRole = 0; //获取用户列表
UserServiceImpl userService = new UserServiceImpl();
List<User> userList = null;
//第一次走这个请求,一定是第一页,页面大小是固定的
//可以把这个写在配置文件中,方便后期修改
int pageSize = 5;
int currentPageNo = 1; if (queryUserName == null) {
queryUserName = "";
}
if (temp != null && !temp.equals("")) {
queryUserRole = Integer.parseInt(temp); //给查询赋值
} if (pageIndex != null) {
currentPageNo = Integer.parseInt(pageIndex);
} //获取用户的总数(分页:上一页,下一页)
int totalCount = userService.getUserCount(queryUserName, queryUserRole);
//总页数支持
PageSupport pageSupport = new PageSupport();
pageSupport.setCurrentPageNo(currentPageNo);
pageSupport.setPageSize(pageSize);
pageSupport.setTotalCount(totalCount); int totalPageCount = pageSupport.getTotalPageCount(); //控制首页和尾页
//如果页面要小于1了,就显示第一页的东西
if (totalPageCount < 1) {
currentPageNo = 1;
} else if (currentPageNo > totalPageCount){
//当前页面大于最后一页
currentPageNo = totalPageCount;
} //获取用户列表展示
userList = userService.getUserList(queryUserName, queryUserRole, currentPageNo, pageSize);
req.setAttribute("userList", userList); //展示角色列表
RoleServiceImpl roleService = new RoleServiceImpl();
List<Role> roleList = roleService.getRoleList();
req.setAttribute("roleList", roleList);
req.setAttribute("queryUserName", queryUserName);
req.setAttribute("queryUserRole", queryUserRole); //展示分页
req.setAttribute("totalCount", totalCount);
req.setAttribute("currentPageNo", currentPageNo);
req.setAttribute("totalPageCount", totalPageCount); //返回前端
try {
req.getRequestDispatcher("userlist.jsp").forward(req, resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

SMBMS的更多相关文章

  1. SMBMS项目-准备工作

    项目搭建准备工作 1.基础准备工作 搭建一-个maven web项目 配置Tomcat 测试项目是否能够跑起来 导入项目中会遇到的jar包 jsp,Servlet,mysq|驱动, jstl, sta ...

  2. smbms项目核心功能实现

    SMBMS 数据库: 项目如何搭建? 考虑使用不使用Maven?依赖,Jar 1.项目搭建准备工作 搭建一个maven web项目 配置Tomcat 测试项目是否能够跑起来 导入项目中会遇到的jar包 ...

  3. 报错Could not find resource cn/smbms/dao/provider/ProviderMapper.xml

    原因:由于idea不会编译src下的java目录下的xml文件,所以找不到xml文件 方案一:在pom.xml中添加如下内容 <build> <resources> <r ...

  4. smbms系统中引用的js文件出现乱码

    问题如下显示: 时间显示出现了乱码,找到显示该时间的js文件,定位问题出现的地方. 解决方案: 改变该文件的编码方式,这里的使用了vscode进行改变js文件的编码方式 步骤如下: 使用vscode打 ...

  5. log4j配置文件,用时导入jar包buildPath且将配置文件改成log4j.properties即可

    log4j.rootLogger=debug,CONSOLE,file#log4j.rootLogger=ERROR,ROLLING_FILElog4j.logger.cn.smbms=debuglo ...

  6. log4j配置文件,用时导入jar包buildPAthena、

    log4j.rootLogger=debug,CONSOLE,file#log4j.rootLogger=ERROR,ROLLING_FILElog4j.logger.cn.smbms=debuglo ...

  7. 将传统项目改造为SSM框架的项目

    首先 第一步改变传统dao层 先要再resource文件夹下创建一个applicationContext.xml  内容如下 关键代码     <!--        使spring扫描包下的所 ...

  8. Spring整合MyBaytis

    1.准备jar包 A.第一种方式:配置SqlSessionFactoryBean+配置SqlSessionTemplate a.项目结构 b.applicationContext.xml  带详细注释 ...

  9. 关于Mybatis的一些随笔

    Mapper.xml头文件 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http:/ ...

随机推荐

  1. c++萌新到大牛,要看哪些书?

    基础语法 <c++primer> 语法进阶 <c++primer plus> 专为c++编著.支持c++14国际标准. 数据结构和算法 <大话数据结构> 编程规范 ...

  2. 【java】解决java compiler level does not match the version of the installed java project facet

    翻译内容:java编译器jdk版本与安装的java项目方面的版本不匹配 修改编译器jdk版本 项目右键选择->properties 如果项目的开发版本为,jdk1.8 ,选择修改为1.8 ,点击 ...

  3. java web应用启动报错:Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.

    Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use. The serve ...

  4. Assembly.LoadFrom() 方法加载程序集,无法转换类型

    有些情况在开发一个C#框架的时候,要用到反射加载另外程序集,这是必然考虑的事情.这样做的好处就是多个工程同时作业的时候,可以互不干扰,替换DLL文件即可. Assembly.Load();这个方法只能 ...

  5. C#LeetCode刷题-数学

    数学篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 7 反转整数 C#LeetCode刷题之#7-反转整数(Reverse Integer) 28.6% 简单 8 字符串转整数 ...

  6. Linux学习笔记 一 第三章 Linux常用命令

    第三章Linux常用命令 一.文件处理命令 1.命令格式 2.目录处理命令:ls 3.目录处理命令:mkdir 4.文件处理命令: touch

  7. Vue-Router 基础入门教程

    Vue-Router 基础入门教程 前言 这周的计划是用VUE将之前的小demo的前端给重构了,并且做成前后端分离的样式,因为之前的那个聊天室的demo几乎都是在一个路由上完成的,所以学习Vue-ro ...

  8. eric4 编译 中文 控件 报错 解决

    eric4 在qt设计师界面, 设计 中文名控件 时,有时候不能编译,报错如下: 解决办法: 打开eric4---setting----preferences 按下图操作后 ,重新启动eric4即可解 ...

  9. nohup 命令的使用

    nohup 命令的使用 1. nohup简介 nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号.在注销后使用 nohup 命令运行后台中的 ...

  10. ethtool 设置网卡接收哈希

    检查 [root@localhost]# ethtool -n eth1 rx-flow-hash tcp4 TCP over IPV4 flows use these fields for comp ...