Java | 超市管理系统demo

  • 1.系统功能简介
  • 2. 项目搭建
    • 2.1 搭建一个maven web项目
    • 2.2 配置Tomcat
    • 2.3 测试Tomcat
    • 2.4 导入依赖
    • 2.5 创建项目结构
    • 2.6 编写实体类(ORM映射)
    • 2.7 编写基础公共类(BaseDao)
    • 2.8 编写字符编码过滤器
  • 3. 登录功能
    • 3.1 登录功能简介
    • 3.2 前端页面以及设置首页
    • 3.3 Dao接口
    • 3.4 Dao实现类
    • 3.5 Service接口
    • 3.6 Service实现类
    • 3.7 Servlet
    • 3.8 注销功能
    • 3.9 过滤器,使在注销情况下不能访问后台页面
  • 4. 密码修改功能
    • 4.1 导入前端素材
    • 4.2 功能实现思路
    • 4.3 Dao层
    • 4.4 Service层
    • 4.5 Servlet层
  • 5. 用户管理功能
    • 5.1 功能实现思路
    • 5.2 准备素材
    • 5.3 查询用户数量
    • @Test 测试方法
    • 5.4 获取用户列表
    • 5.5 获取角色列表
    • 一个小tip
    • 5.6 显示用户的Servlet
  • 6.我的总结
    • 6.1 重点
    • 6.2 难点
    • 6.3 不足之处

1.系统功能简介

2. 项目搭建

2.1 搭建一个maven web项目

2.2 配置Tomcat

2.3 测试Tomcat

2.4 导入依赖

<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>javax.servlet.jsp.jstl</groupId><artifactId>jstl-api</artifactId><version>1.2</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.61</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.61</version></dependency>

2.5 创建项目结构

2.6 编写实体类(ORM映射)

2.7 编写基础公共类(BaseDao)

  • getConnection方法:获取数据库的链接
  • execute方法:编写公共查询方法
  • execute方法:编写增删改公共方法(方法重载)
  • closeResource方法:释放资源
package com.young.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();InputStream stream = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");try {properties.load(stream);} catch (IOException e) {e.printStackTrace();}driver = properties.getProperty("driver");url = properties.getProperty("url");username = properties.getProperty("username");password = properties.getProperty("password");}//getConnection方法:获取数据库的链接//返回值:一个数据库的连接对象connectionpublic static Connection getConnection() throws SQLException {Connection connection=null;try {Class.forName(driver);connection = DriverManager.getConnection(url, username, password);} catch (ClassNotFoundException e) {e.printStackTrace();}return  connection;}//execute方法:编写公共查询方法//返回值:查询结果ResultSetpublic static ResultSet execute(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet,String sql,Object[] params) throws SQLException {preparedStatement = connection.prepareStatement(sql);for (int i = 0; i < params.length; i++) {//注意这里的下标preparedStatement.setObject(i+1,params[i]);}resultSet = preparedStatement.executeQuery();return resultSet;}//execute方法:编写增删改公共方法(方法重载)//返回值:数据库中改变的行数 (int)updatepublic static int execute(Connection connection,String sql,Object[] params,PreparedStatement preparedStatement) throws SQLException {preparedStatement = connection.prepareStatement(sql);for (int i = 0; i < params.length; i++) {preparedStatement.setObject(i+1,params[i]);}int update = preparedStatement.executeUpdate();return update;}//closeResource方法:释放资源//返回值:是否成功 flagpublic static boolean closeResource(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet){boolean flag=true;if(connection!=null){try {connection.close();} catch (SQLException e) {e.printStackTrace();flag=false;}}if(preparedStatement!=null){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();flag=false;}}if(resultSet!=null){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();flag=false;}}return flag;}}

数据库配置文件:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/smbms?useSSL=true&useUnicode=true&characterEncoding=utf-8
username=root
password=123456

2.8 编写字符编码过滤器

public class CharacterEncodingFilter  implements Filter {public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding("utf-8");servletResponse.setCharacterEncoding("utf-8");filterChain.doFilter(servletRequest,servletResponse);}public void destroy() {}
}

映射:

    <!--字符编码过滤器--><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>com.young.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

3. 登录功能

3.1 登录功能简介

3.2 前端页面以及设置首页

导入前端页面,设置欢迎页

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

3.3 Dao接口

//得到要登录的用户public User getLoginUser (Connection connection, String userCode)throws SQLException;

3.4 Dao实现类

//得到要登录的用户public User getLoginUser(Connection connection, String userCode) throws SQLException {PreparedStatement preparedStatement=null;ResultSet rs = null;User user = null;if(connection!=null){String sql="select * from smbms_user where userCode=?";//这里可以进行改进,我觉得应该是用户名和密码都正确,才可以在数据库中查询到该用户。Object[] paras={userCode};rs = BaseDao.execute(connection, preparedStatement, rs, sql, paras);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"));}}return user;}

3.5 Service接口

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

3.6 Service实现类

 //业务层都会调用dao层,所以我们要引入Dao层;private UserDao userDao;public UserServiceImp(){userDao= new UserDaoImp();}//用户登录public User login(String usercode, String password) {Connection connection=null;User user=null;try {connection = BaseDao.getConnection();//通过业务层调用对应的具体的数据库操作user = userDao.getLoginUser(connection, usercode);} catch (SQLException e) {e.printStackTrace();}finally {BaseDao.closeResource(connection,null,null);}return user;}

3.7 Servlet

public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("LoginServlet--start");//获取用户名和密码String userCode = req.getParameter("userCode");String userPassword = req.getParameter("userPassword");//和数据库中的密码进行对比,调用业务层;UserService userService = new UserServiceImp();User user = userService.login(userCode, userPassword); //这里已经把登录的人给查出来了if(user!=null && user.getUserPassword().equals(userPassword)){//查有此人,可以登录//将用户的信息放到Session中req.getSession().setAttribute(Constant.USER_SESSION,user);//跳转到主页resp.sendRedirect("jsp/frame.jsp");}else {//查无此人,无法登录//转发回登录页面,顺带提示它,用户名或者密码错误;req.setAttribute("error","用户名或者密码不正确");req.getRequestDispatcher("login.jsp").forward(req,resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

3.8 注销功能

public class LogoutServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.getSession().removeAttribute(Constant.USER_SESSION);resp.sendRedirect(req.getContextPath()+"/login.jsp");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

3.9 过滤器,使在注销情况下不能访问后台页面

public class SysFilter implements Filter {public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) servletRequest;HttpServletResponse resp = (HttpServletResponse) servletResponse;Object user = req.getSession().getAttribute(Constant.USER_SESSION);if(user==null){resp.sendRedirect(req.getContextPath()+"/error.jsp");}else{filterChain.doFilter(servletRequest,servletResponse);}}public void destroy() {}
}

4. 密码修改功能

4.1 导入前端素材


导入 pwdmodify.jsp文件:

4.2 功能实现思路


从底层向上层进行代码实现

4.3 Dao层

UserDao 接口:

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

UserDao 接口实现类:

//修改当前用户的密码public boolean updatePwd(Connection connection, int id, String password) throws SQLException {boolean flag=false;PreparedStatement preparedStatement=null;String sql="update smbms_user set userPassword =? where id=?";if(connection!=null){Object[] params={id,password};int execute = BaseDao.execute(connection, sql, params, preparedStatement);flag=true;BaseDao.closeResource(null,preparedStatement,null);}return flag;}

4.4 Service层

UserService接口:

    //修改密码public boolean updatePassword(int id, String password);

UserService实现类:

    //密码更新public boolean updatePassword(int id, String password) {Connection connection=null;boolean flag=false;try {connection = BaseDao.getConnection();flag = userDao.updatePwd(connection, id, password);} catch (SQLException e) {e.printStackTrace();} finally {BaseDao.closeResource(connection,null,null);}return flag;}

4.5 Servlet层

Servlet层可以通过提出取方法实现复用
下面的代码中,通过updatePassword()方法和pwdModify()方法,实现doGet的复用

package com.young.servlet.user;import com.alibaba.fastjson.JSONArray;
import com.mysql.jdbc.StringUtils;
import com.young.pojo.User;
import com.young.service.user.UserService;
import com.young.service.user.UserServiceImp;
import com.young.util.Constant;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;public class UpdataPassword extends HttpServlet {@Override//实现Servlet的复用protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String method = req.getParameter("method");if(method.equals("savepwd")){//与jsp/pwdmodify.jsp 中 <input type="hidden" name="method" value="savepwd"> 代码对应this.updatePassword(req,resp);}else if(method.equals("pwdmodify")){//与js/pwdmodify.js中 data:{method:"pwdmodify",oldpassword:oldpassword.val()} 代码对应this.pwdModify(req,resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}//密码更新private void updatePassword(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//从Session中获取IDObject o = req.getSession().getAttribute(Constant.USER_SESSION);String newpassword = req.getParameter("newpassword");boolean flag=false;if(o!=null && newpassword!=null){UserService userService = new UserServiceImp();flag = userService.updatePassword((int) (((User) o).getId()), newpassword);if(flag){//密码修改成功:提示密码修改成功,移除Sessionreq.setAttribute("message","密码修改成功,请重新登录");req.getSession().removeAttribute(Constant.USER_SESSION);}else {//密码修改失败:提示密码修改修改req.setAttribute("message","密码修改失败");}}else {req.setAttribute("message","新密码设置不符合要求");}req.getRequestDispatcher("pwdmodify.jsp").forward(req,resp);//转发与重定向// resp.sendRedirect(req.getContextPath()+"/login.jsp");}//验证旧密码(旧密码从Session中获取即可)private void pwdModify(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{Object o = req.getSession().getAttribute(Constant.USER_SESSION);String oldpassword = req.getParameter("oldpassword");//万能的Map : 结果集HashMap<String, String> hashMap = new HashMap<String, String>();if(o==null){//Session失效了,session过期了hashMap.put("result", "sessionerror");}else if(StringUtils.isNullOrEmpty(oldpassword)){//输入的密码为空hashMap.put("result", "error");}else {String userPassword = ((User) o).getUserPassword();if(oldpassword.equals(userPassword)){hashMap.put("result","true");}else {hashMap.put("result","false");}}resp.setContentType("application/json");PrintWriter writer = resp.getWriter();//JSONArray 阿里巴巴的JSON工具类 , 用于转换格式/*hashMap = ["result","sessionerror","result","error"]Json格式 = {key:value}*/writer.write(JSONArray.toJSONString(hashMap));writer.flush();writer.close();}}

5. 用户管理功能

5.1 功能实现思路

5.2 准备素材

  1. 导入分页的工具类
package com.young.util;public class PageSupport {//当前页码-来自于用户输入private int currentPageNo = 1;//总数量(表)private int totalCount = 0;//页面容量private int pageSize = 0;//总页数-totalCount/pageSize(+1)private int totalPageCount = 1;public int getCurrentPageNo() {return currentPageNo;}public void setCurrentPageNo(int currentPageNo) {if(currentPageNo > 0){this.currentPageNo = currentPageNo;}}public int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {if(totalCount > 0){this.totalCount = totalCount;//设置总页数this.setTotalPageCountByRs();}}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {if(pageSize > 0){this.pageSize = pageSize;}}public int getTotalPageCount() {return totalPageCount;}public void setTotalPageCount(int totalPageCount) {this.totalPageCount = totalPageCount;}public void setTotalPageCountByRs(){if(this.totalCount % this.pageSize == 0){this.totalPageCount = this.totalCount / this.pageSize;}else if(this.totalCount % this.pageSize > 0){this.totalPageCount = this.totalCount / this.pageSize + 1;}else{this.totalPageCount = 0;}}
}

上述代码中复习的知识点:
面向对象三大特性:封装 继承 多态
其中,封装指的是:属性私有,set/get方法 ,在set中限定一些不安全的情况


2. 用户列表页面(jsp/userlist.jsp)导入

5.3 查询用户数量

  1. UserDao
 //查询用户数量public int getUserNum(Connection connection,String username,int userRole)throws SQLException;
  1. UserDaoImpl
 //查询用户数量public int getUserNum(Connection connection, String username, int userRole) throws SQLException {PreparedStatement preparedStatement =null;ResultSet resultSet=null;int count=0;if(connection!=null){StringBuffer sql = new StringBuffer();sql.append(" select count(1) as count from smbms.smbms_user u,smbms.smbms_role r where u.userRole=r.id");ArrayList<Object> list = new ArrayList<Object>();if(!StringUtils.isNullOrEmpty(username)){sql.append(" and u.username like ?");list.add("%"+username+"%");}if(userRole>0){sql.append(" and u.userRole = ?");list.add(userRole);}//把list转换为数组Object[] params = list.toArray();System.out.println("UserDaoImp -> getUserNum"+sql);ResultSet rs = BaseDao.execute(connection, preparedStatement, resultSet, sql.toString(), params);if(rs.next()){count=rs.getInt("count");}}BaseDao.closeResource(null,preparedStatement,resultSet);return count;}
  1. UserService
//查询记录数public int getUserCount(String username,int userRole);
  1. UserServiceImpl
//查询public int getUserCount(String username, int userRole) {Connection connection=null;int num = 0;try {connection = BaseDao.getConnection();num = userDao.getUserNum(connection, username, userRole);} catch (SQLException e) {e.printStackTrace();}finally {BaseDao.closeResource(connection,null,null);}return num;}

@Test 测试方法

在导入junit依赖的情况下,使用@Test,可以不用main方法调用就可以测试出运行结果,是一种测试方法。
注意被测试的方法必须是public修饰的!

在UserServiceImpl里面继续局部测试

 @Testpublic void test(){UserServiceImp imp = new UserServiceImp();int count = imp.getUserCount(null, 0);System.out.println(count);}

输出:

依赖:

    <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>

5.4 获取用户列表

  1. UserDao
//通过查询获取用户列表 userlistpublic List<User> getUserList(Connection connection,String userName,int userRole,int currentPageNo,int pageSize)throws SQLException;
  1. UserDaoImp
//通过查询获取用户列表userlistpublic List<User> getUserList(Connection connection, String userName, int userRole, int currentPageNo, int pageSize) throws SQLException {PreparedStatement preparedStatement=null;ResultSet resultSet=null;List<User> userlist = new ArrayList<User>();if(connection!=null){ArrayList<Object> list = new ArrayList<Object>();StringBuffer sql=new StringBuffer();//sql写数据库命令//list记录数据库中的参数sql.append("select u.*,r.roleName as userRoleName from smbms.smbms_user u,smbms.smbms_role r where u.userRole=r.id");if(!StringUtils.isNullOrEmpty(userName)){sql.append(" and u.username like ?");list.add("%"+userName+"%");}if(userRole>0){sql.append(" and u.userRole = ?");list.add(userRole);}//分页的sql写法:limit startIndex,pageSize;/* 第一个参数:(当前页-1)*页面大小第二个参数:页面大小0,55,510,5*/sql.append(" order by creationDate desc limit ?,?");int startIndex=(currentPageNo-1)*pageSize;list.add(startIndex);list.add(pageSize);System.out.println("UserDaoImp.getUserList->sql:"+sql);Object[] params = list.toArray();resultSet = BaseDao.execute(connection, preparedStatement, resultSet, sql.toString(), params);while (resultSet.next()){User _user = new User();_user.setId(resultSet.getInt("id"));_user.setUserCode(resultSet.getString("userCode"));_user.setUserName(resultSet.getString("userName"));_user.setGender(resultSet.getInt("gender"));_user.setBirthday(resultSet.getDate("birthday"));_user.setPhone(resultSet.getString("phone"));_user.setUserRole(resultSet.getInt("userRole"));_user.setUserRoleName(resultSet.getString("userRoleName"));userlist.add(_user);}BaseDao.closeResource(null,preparedStatement,resultSet);}return userlist;}
  1. UserService
 //通过条件查询 获取用户列表 userlistpublic List<User> getUserList(String queryUserName, int queryuserRole,int currentPageNo,int pageSize);
  1. UserServiceImp
    //通过条件查询 获取用户列表 userlistpublic 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 e) {e.printStackTrace();}finally {BaseDao.closeResource(connection,null,null);}return userList;}

5.5 获取角色列表

  1. UserDao
public interface RoleDao {//获取角色列表public List<Role> getRoleList(Connection connection)throws SQLException;
}
  1. UserDaoImp
package com.young.dao.Role;import com.young.dao.BaseDao;
import com.young.pojo.Role;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class RoleDaoImp implements RoleDao  {public List<Role> getRoleList(Connection connection) throws SQLException {//获取角色列表PreparedStatement preparedStatement=null;ResultSet resultSet=null;ArrayList<Role> list = new ArrayList<Role>();if(connection!=null){String sql="select * from smbms_role";Object[] params={};resultSet = BaseDao.execute(connection, preparedStatement, resultSet, sql, params);while (resultSet.next()){Role role = new Role();role.setId(resultSet.getInt("id"));role.setRoleCode(resultSet.getString("roleCode"));role.setRoleName(resultSet.getString("roleName"));list.add(role);}BaseDao.closeResource(null,preparedStatement,resultSet);}return list;}
}
  1. UserService
public interface RoleService {//获取角色列表public List<Role> getRoleList();
}
  1. UserServiceImp
package com.young.service.role;import com.young.dao.BaseDao;
import com.young.dao.Role.RoleDao;
import com.young.dao.Role.RoleDaoImp;
import com.young.pojo.Role;
import org.junit.Test;import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;public class RolServiceImp implements RoleService {private RoleDao roleDao;public RolServiceImp() {roleDao = new RoleDaoImp();}public List<Role> getRoleList() {Connection connection = null;List<Role> list = null;try {connection=BaseDao.getConnection();list = roleDao.getRoleList(connection);} catch (SQLException e) {e.printStackTrace();}finally {BaseDao.closeResource(connection,null,null);}return list;}@Testpublic void test(){RolServiceImp rolServiceImp = new RolServiceImp();List<Role> list = rolServiceImp.getRoleList();for (Role role : list) {int s = role.getId();System.out.println(s);}}
}

一个小tip

Object[] params={};
sout.prams.length;// 输出是0
Object[] params=null;
sout.prams.length;// 空指针异常,直接报错

5.6 显示用户的Servlet

步骤:

  1. 获取用户前端的数据
  2. 根据参数的值判断页面请求是否合法
  3. 为实现分页准备
  4. 用户列表展示
  5. 返回前端

代码:

    //用户管理页面的显示private void query(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//  1.获取用户前端的数据String queryname = req.getParameter("queryname");String queryUserRoletemp = req.getParameter("queryUserRole");String pageIndex = req.getParameter("pageIndex");int queryUserRole=0;//默认的用户角色为全选,用0表示。//  获取用户列表UserServiceImp userService = new UserServiceImp();List<User> userList = null; //为了调用userService里面的getUserList方法做准备// 后面的都是在为getUserList的调用而准备参数//  2.根据参数的值判断页面请求是否合法//  第一次走这个请求,默认在第一页,页面的大小固定int pageSize =5;       //后期可以优化到配置文件中去int currentPageNo=1;   //默认为当前页if(queryname==null){queryname="";      //避免出现空指针异常}if(queryUserRoletemp!=null && !queryUserRoletemp.equals("")){queryUserRole=Integer.parseInt(queryUserRoletemp);}if(pageIndex!=null){currentPageNo=Integer.parseInt(pageIndex);}//  3. 为实现分页准备//获取用户总数int totalCount = userService.getUserCount(queryname, queryUserRole);//计算分页的总页数int totolPageCount = (int) (totalCount / pageSize) + 1;//控制首位页if(currentPageNo<1){currentPageNo=1;}else if(currentPageNo>totolPageCount){currentPageNo=totolPageCount;}//  4. 用户列表展示userList = userService.getUserList(queryname, queryUserRole, currentPageNo, pageSize);// 向前端展示userListreq.setAttribute("userList",userList);// 给前端提供roleList选项RolServiceImp rolServiceImp = new RolServiceImp();List<Role> roleList = rolServiceImp.getRoleList();req.setAttribute("roleList",roleList);// 给前端提供其他需要的数据req.setAttribute("queryUserName",queryname);req.setAttribute("totalPageCount",totolPageCount );req.setAttribute("totalCount",totalCount );req.setAttribute("currentPageNo",currentPageNo );req.setAttribute("queryUserRole",queryUserRole );//  5. 返回前端req.getRequestDispatcher("userlist.jsp").forward(req,resp);}

6.我的总结

6.1 重点

MVC三层架构:

  • Dao层直接操作数据库,实现增删改查等功能
  • Service层调用Dao层,完成业务逻辑
  • Servllet层接收用户的请求,交给业务层处理对应的代码并且控制视图的跳转。

6.2 难点

动态的SQL( 5.3 UserDaoImpl 代码)
Servlet 的动态获取数据库中的信息,返回到前端(用户角色列表展示部分 5.5 和 5.6 相关部分)

6.3 不足之处

前端知识严重不足 ,有待提高

Java | 仓库管理系统demo相关推荐

  1. JAVA仓库管理系统

    仓库管理系统 系统概要 仓库管理系统总共分为两个大的模块,分别是系统模块和业务模块.其中系统模块和业务模块底下又有其子模块. 功能模块 一.业务模块 1.客户管理 客户列表 客户分页和模糊查询 客户添 ...

  2. java仓库管理系统sql_仓库管理系统 java+sql server

    [实例简介] 用java和sql server做的仓库管理系统 [实例截图] [核心代码] CangKuGL └── CangKuGL ├── bin │   └── com │   └── jx │ ...

  3. [附源码]计算机毕业设计JAVA社区生鲜仓库管理系统

    [附源码]计算机毕业设计JAVA社区生鲜仓库管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(In ...

  4. SSM毕设项目仓库管理系统lyf55(java+VUE+Mybatis+Maven+Mysql)

    SSM毕设项目仓库管理系统lyf55(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(W ...

  5. 课程设计——基于JAVA的仓库管理系统

    要求如下: 系统总需求分析: "仓库管理系统"包括七大功能,一:进仓管理:通过管理员输入货物进仓的时间,系统自动分配进仓编号:二:出仓管理:通过管理员输入货物出仓的时间,实现出仓: ...

  6. Eclipse+Java+Swing+Mysql实现仓库管理系统

    目录 一.系统介绍 1.软件环境 2.系统功能 3.数据库 4.工程截图 二.系统展示 1.用户-登录页 2.用户-登录成功 3.用户-主页面 4.用户-用户管理-个人信息 5.用户-用户管理-修改密 ...

  7. SSM毕设项目仓库管理系统n30qt(java+VUE+Mybatis+Maven+Mysql)

    SSM毕设项目仓库管理系统n30qt(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(W ...

  8. java毕业设计东方水处理厂原材料仓库管理系统Mybatis+系统+数据库+调试部署

    java毕业设计东方水处理厂原材料仓库管理系统Mybatis+系统+数据库+调试部署 java毕业设计东方水处理厂原材料仓库管理系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B ...

  9. 基于javaweb的仓库管理系统(java+springboot+layui+html+thymeleaf+mysql+实训报告)

    基于javaweb的仓库管理系统(java+springboot+layui+html+thymeleaf+mysql+实训报告) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse ...

  10. java项目-第126期SSM的物流仓库管理系统-java毕业设计_计算机毕业设计

    java项目-第126期SSM的物流仓库管理系统-java毕业设计_计算机毕业设计 [源码请到资源专栏下载] 大家好,今天分享的源码是<基于SpringBoot+Thymeleaf的物流仓库后台 ...

最新文章

  1. 解析postgresql 删除重复数据案例
  2. 微信小程序API·目录
  3. 机器人搬运礼盒程序_礼盒厂公司2020范文
  4. 设计模式学习之代理模式学习(一)
  5. 计算机网络相关的知识,计算机网络知识整理
  6. 八、深入Go 编程语言接口
  7. 从外网Thinkphp3日志泄露到杀入内网域控 - 红队攻击之域内靶机渗透实战演练
  8. IOS 单行文本输入框 UITextField 使用
  9. 基于javaEE技术的课程设计管理系统设计与实现
  10. .NET Core Web API:您需要了解的最少知识(第1部分,共2部分)
  11. 《iOS 6高级开发手册(第4版)》——1.8节使用加速度移动屏幕上的对象
  12. 【java进阶之路】(并发编程篇)1.Java线程
  13. 单体民宿小程序开发运营方案
  14. 文献翻译__基于自适应全变差L1正则化的椒盐图像去噪
  15. 用python写邮件和附件自动生成发送系统
  16. 6种常用的项目管理模式
  17. 美国出台最严技术出口管制!14项前沿科技面临封锁
  18. 未来10年35项最值得你期待的技术(中)
  19. 线性回归(Lasso,Ridge,ElasticNet)调参
  20. HDF/NC/GRIB 数据浏览利器 panoply软件分享

热门文章

  1. 2021年化工自动化控制仪表考试题库及化工自动化控制仪表作业考试题库
  2. 饥荒控制台输入没用_《饥荒》控制台正确使用教程 如何使用控制台
  3. java 爬虫 微博_最新新浪微博爬虫程序Java版 2015
  4. 详解函数的三种传递方式
  5. 然并卵却很拉风!360超级充电器评测_天极网
  6. todo已完成任务_我已经完成了自己该做的任务用英文怎么
  7. mysql判断字符串长度 超出用省略号_divcss超出长度文字自动隐藏或用省略号表示...
  8. tfs java_Java SDK for TFS
  9. 智能中线保护装置-零线电流保护器-中性线保护装置
  10. java安装教程win7_给win7系统搭建Java环境的详细教程(图文)