伙伴云客服论坛»论坛 S区 S客户管理 查看内容

0 评论

0 收藏

分享

SMBMS超市订单管理系统

文章目录

    MVC三层架构(代码整体以此分层编写)根本架构项目搭建准备工作
      1- 45 创建项目包构造6-78 导致静态资源
    登录功能实现
      1.编写前端页面2.设置首页3.编写Dao层用户登录的接口4.编写Dao接口实现类5.业务层接口6.业务层实现类7.编写servlet8.注册servlet整体流程
    登录功能优化
      注销功能:登陆拦截优化
        为什么要登陆拦截优化详细步骤

    密码修改
      1.导入前端素材2.写项目,建议从下向上写3.编写Dao层修改当前用户密码接口4.编写Dao接口实现类5.业务层接口6.业务层接口实现类7.servlet记得实现复用需要提取出方法优化密码修改使用Ajax1.阿里巴巴的fastjson2.后台代码修改
    用户管理实现(查询)
      思路导入静态资源
        1.导入分页的工具类2.导入用户列表页面
      1.获取用户数量
        1.UerDao接口2.UerDaoImpl【使用动态SQL】3.UerService接口4.UeServiceImpl
      2.获取用户列表3.获取角色列表4.用户显示的servlet【这个servlet较为复杂】
    用户管理实现(增删改)供给商管理、订单管理


MVC三层架构(代码整体以此分层编写)

SMBMS超市订单管理系统-1.jpg


    整体的流程与代码编写思路

    SMBMS超市订单管理系统-2.jpg

建议是从后往前写,便于调试与debug,先编写Dao层,主要负责与数据库交互,编写sql语句等。然后编写Servicce层,主要负责调用Dao层,再编写Servlet层,其也是主要调用Service和前端的一些数据交互,比如resquet和response等。
根本架构

SMBMS超市订单管理系统-3.jpg


项目搭建准备工作

1- 4

SMBMS超市订单管理系统-4.jpg


5 创建项目包构造

SMBMS超市订单管理系统-5.jpg


6-7

SMBMS超市订单管理系统-6.jpg

  1. package com.tong.dao;import java.io.IOException;import java.io.InputStream;import java.sql.*;import java.util.Properties;/**
  2. * 操作数据库的基类--静态类
  3. * @author Administrator
  4. *
  5. */publicclassBaseDao{static{//静态代码块,在类加载的时候执行init();}privatestatic String driver;privatestatic String url;privatestatic String user;privatestatic String password;//初始化连接参数,从配置文件里获得publicstaticvoidinit(){
  6.                 Properties params=newProperties();
  7.                 String configFile ="db.properties";
  8.                 InputStream is=BaseDao.class.getClassLoader().getResourceAsStream(configFile);try{
  9.                         params.load(is);}catch(IOException e){
  10.                         e.printStackTrace();}
  11.                 driver=params.getProperty("driver");
  12.                 url=params.getProperty("url");
  13.                 user=params.getProperty("user");
  14.                 password=params.getProperty("password");}/**
  15.          * 获取数据库连接
  16.          * @return
  17.          */publicstatic Connection getConnection(){
  18.                 Connection connection = null;try{
  19.                         Class.forName(driver);
  20.                         connection = DriverManager.getConnection(url, user, password);}catch(Exception e){// TODO Auto-generated catch block
  21.                         e.printStackTrace();}return connection;}/**
  22.          * 查询操作
  23.          * @param connection
  24.          * @param pstm
  25.          * @param rs
  26.          * @param sql
  27.          * @param params
  28.          * @return
  29.          */publicstatic ResultSet execute(Connection connection,PreparedStatement pstm,ResultSet rs, String sql,Object[] params)throws Exception{
  30.                 pstm = connection.prepareStatement(sql);//向sql中的占位符加载参数Object[] paramsfor(int i =0; i < params.length; i++){
  31.                         pstm.setObject(i+1, params[i]);}
  32.                 rs = pstm.executeQuery();return rs;}/**
  33.          * 更新操作
  34.          * @param connection
  35.          * @param pstm
  36.          * @param sql
  37.          * @param params
  38.          * @return
  39.          * @throws Exception
  40.          */publicstaticintexecute(Connection connection,PreparedStatement pstm, String sql,Object[] params)throws Exception{int updateRows =0;
  41.                 pstm = connection.prepareStatement(sql);for(int i =0; i < params.length; i++){
  42.                         pstm.setObject(i+1, params[i]);}
  43.                 updateRows = pstm.executeUpdate();return updateRows;}/**
  44.          * 释放资源
  45.          * @param connection
  46.          * @param pstm
  47.          * @param rs
  48.          * @return
  49.          */publicstaticbooleancloseResource(Connection connection,PreparedStatement pstm,ResultSet rs){boolean flag =true;if(rs != null){try{
  50.                                 rs.close();
  51.                                 rs = null;//GC回收,假设rs.close();没关上,让其等于null,使垃圾回收器自动回收。}catch(SQLException e){// TODO Auto-generated catch block
  52.                                 e.printStackTrace();
  53.                                 flag =false;}}if(pstm != null){try{
  54.                                 pstm.close();
  55.                                 pstm = null;//GC回收}catch(SQLException e){// TODO Auto-generated catch block
  56.                                 e.printStackTrace();
  57.                                 flag =false;}}if(connection != null){try{
  58.                                 connection.close();
  59.                                 connection = null;//GC回收}catch(SQLException e){// TODO Auto-generated catch block
  60.                                 e.printStackTrace();
  61.                                 flag =false;}}return flag;}}
复制代码
SMBMS超市订单管理系统-7.png


8 导致静态资源

    放在webapp目录下,因为是网站资源

    SMBMS超市订单管理系统-8.png


登录功能实现

SMBMS超市订单管理系统-9.jpg


1.编写前端页面

    login.jsp

    SMBMS超市订单管理系统-10.jpg

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%><!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title>系统登录 - 超市订单管理系统</title><link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/css/style.css"/><script type="text/javascript">/* if(top.location!=self.location){
  3.               top.location=self.location;
  4.          } */</script></head><body class="login_bg"><section class="loginBox"><header class="loginHeader"><h1>超市订单管理系统</h1></header><section class="loginCont"><form class="loginForm" action="${pageContext.request.contextPath }/login.do"  name="actionForm" id="actionForm"  method="post"><div class="info">${error }</div><div class="inputbox"><label for="userCode">用户名:</label><input type="text"class="input-text" id="userCode" name="userCode" placeholder="请输入用户名" required/></div><div class="inputbox"><label for="userPassword">密码:</label><input type="password" id="userPassword" name="userPassword" placeholder="请输入密码" required/></div><div class="subBtn"><input type="submit" value="登录"/><input type="reset" value="重置"/></div></form></section></section></body></html>
复制代码
2.设置首页
  1. <!--设置欢送界面--><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list>
复制代码
3.编写Dao层用户登录的接口

    Dao层(数据耐久层)负责操作数据库,业务(比如用户登录,比对账号密码)有业务层负责。

    SMBMS超市订单管理系统-11.png

  1. public User getLoginUser(Connection connection, String userCode)throws Exception;
复制代码
4.编写Dao接口实现类
  1. public User getLoginUser(Connection connection, String userCode)throws Exception {// TODO Auto-generated method stub
  2.                 PreparedStatement pstm = null;
  3.                 ResultSet rs = null;
  4.                 User user = null;if(null != connection){
  5.                         String sql ="select * from smbms_user where userCode=?";
  6.                         Object[] params ={userCode};
  7.                         rs = BaseDao.execute(connection, pstm, rs, sql, params);if(rs.next()){
  8.                                 user =newUser();
  9.                                 user.setId(rs.getInt("id"));
  10.                                 user.setUserCode(rs.getString("userCode"));
  11.                                 user.setUserName(rs.getString("userName"));
  12.                                 user.setUserPassword(rs.getString("userPassword"));
  13.                                 user.setGender(rs.getInt("gender"));
  14.                                 user.setBirthday(rs.getDate("birthday"));
  15.                                 user.setPhone(rs.getString("phone"));
  16.                                 user.setAddress(rs.getString("address"));
  17.                                 user.setUserRole(rs.getInt("userRole"));
  18.                                 user.setCreatedBy(rs.getInt("createdBy"));
  19.                                 user.setCreationDate(rs.getTimestamp("creationDate"));
  20.                                 user.setModifyBy(rs.getInt("modifyBy"));
  21.                                 user.setModifyDate(rs.getTimestamp("modifyDate"));}//connection设成null不让其关闭,是因为后面业务层还需要数据库连接。
  22.                         BaseDao.closeResource(null, pstm, rs);}return user;}
复制代码
5.业务层接口

    业务层都会调用Dao层,来获取业务所需的数据。

    SMBMS超市订单管理系统-12.png

  1. publicinterfaceUserService{//用户登录public User login(String userCode, String userPassword);}
复制代码
6.业务层实现类

    因为业务层要调用Dao层(来获取数据库的数据),调用Dao层,就需要给它传参数,则connection此时传给Dao层,所以connection对象在业务层创建。业务层存在事务,失败了会回滚。,所以connection对象在业务层创建。
  1. publicclassUserServiceImplimplementsUserService{private UserDao userDao;publicUserServiceImpl(){
  2.                 userDao =newUserDaoImpl();}public User login(String userCode, String userPassword){// TODO Auto-generated method stub
  3.                 Connection connection = null;
  4.                 User user = null;try{
  5.                         connection = BaseDao.getConnection();
  6.                         user = userDao.getLoginUser(connection, userCode);}catch(Exception e){// TODO Auto-generated catch block
  7.                         e.printStackTrace();}finally{
  8.                         BaseDao.closeResource(connection, null, null);}//匹配密码if(null != user){if(!user.getUserPassword().equals(userPassword))
  9.                                 user = null;}return user;}}
复制代码
7.编写servlet

    servlet是控制层,用来调用业务层控制层的作用:接受用户的恳求交给业务层去做,这里用户的恳求是登录(输入用户名和密码恳求登录),业务层要做的是在数据库中匹配输入的用户名和密码。
  1. publicclassLoginServletextendsHttpServlet{//servlet:控制层,接收用户的恳求,调用业务层代码。@OverrideprotectedvoiddoGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//从前端获取用户名和密码(接收用户的恳求)
  2.         String userCode = req.getParameter("userCode");
  3.         String userPassword = req.getParameter("userPassword");//接收恳求后需处置业务,业务是:和数据库中的数据停止对比,所以需调用业务层
  4.         UserServiceImpl userService =newUserServiceImpl();
  5.         User user = userService.login(userCode, userPassword);//这里已经把登录的人给查出来了if(user != null){//查有此人,可以登录//将用户的信息放入Session中
  6.             req.getSession().setAttribute(Constant.USER_SESSION , user);//跳转主页(跳转到另一个页面,地址变了,所以用重定向)
  7.             resp.sendRedirect("jsp/frame.jsp");}else{//查无此人,无法登录//转发会登录页面,顺带提示它,用户名或密码错误。((跳转到本页面,只是在本页面加了些信息(用户名或密码错误),地址没变,所以用恳求转发))
  8.             req.setAttribute("error","用户名或密码错误");//恳求可以携带数据
  9.             req.getRequestDispatcher("login.jsp").forward(req , resp);}}@OverrideprotectedvoiddoPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}}
复制代码
8.注册servlet
  1. <!--servlet--><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.tong.servlet.user.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login.do</url-pattern></servlet-mapping>
复制代码
整体流程

前端一启动,执行login.jsp(设置成了首页),直接到web.xml中设置的login.do(servlet映射),调用对应的控制器servlet(LoginServlet),servlet中会调用业务(UserServiceImpl),然后业务会调用想用的Dao(UserDaoImpl)来获取数据。
登录功能优化

注销功能:

思路:移除session,返回登录界面;
    LogoutServlet
  1. publicclassLogoutServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
  2.         req.getSession().removeAttribute(Constant.USER_SESSION);
  3.         resp.sendRedirect(req.getContextPath()+"/login.jsp");}@OverrideprotectedvoiddoPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}}
复制代码
注册
  1. <!--注销--><servlet><servlet-name>LogoutServlet</servlet-name><servlet-class>com.tong.servlet.user.LogoutServlet</servlet-class></servlet><servlet-mapping><servlet-name>LogoutServlet</servlet-name><url-pattern>/jsp/logout.do</url-pattern></servlet-mapping>
复制代码
登陆拦截优化

为什么要登陆拦截优化

    正常登陆后,将登录界面的网址复制下来,在注销后的登录界面,黏贴复制的网址,在没填用户名和密码的前提下,进入了系统。所以需要登录拦截拦截判断的条件是 session中有无user这个属性,因为在用户注销,或还没登录的情况下,session中没有user这个属性,假设没有,说明不是正常登录,停止拦截;只要当正常登录时,会创建session中user这个属性,此时可以正常登录。

    SMBMS超市订单管理系统-13.jpg

    SMBMS超市订单管理系统-14.jpg

    注销后,黏贴网址,仍然能登录进来,需停止拦截。

    SMBMS超市订单管理系统-15.jpg

详细步骤

编写一个过滤器,并注册
  1. publicclassSysFilterimplementsFilter{publicvoidinit(FilterConfig filterConfig)throws ServletException {}publicvoiddoFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {
  2.         HttpServletRequest request =(HttpServletRequest) req;
  3.         HttpServletResponse response =(HttpServletResponse) resp;//过滤器,从session中获取用户
  4.         User user =(User) request.getSession().getAttribute(Constant.USER_SESSION);if(user == null){//session已经被移除,或者用户注销,或还没登录
  5.             response.sendRedirect("error.jsp");}else{
  6.             chain.doFilter(req , resp);}}publicvoiddestroy(){}}
复制代码
  1. <!--用户登录过滤器--><filter><filter-name>SysFilter</filter-name><filter-class>com.tong.filter.SysFilter</filter-class></filter><filter-mapping><filter-name>SysFilter</filter-name><url-pattern>/jsp/*</url-pattern></filter-mapping>
复制代码
密码修改

密码修改,需要和数据库打交道,所以还需要走dao层、service层、servlet层这一条线。
    Dao层:根据用户ID修改用户密码(update语句);service层:接收传过来的密码和调用Dao获取后台的密码,作对比。servlet层:把框里输入的新旧密码拿到,交给业务层。
1.导入前端素材

SMBMS超市订单管理系统-16.png


2.写项目,建议从下向上写

SMBMS超市订单管理系统-17.jpg


3.编写Dao层修改当前用户密码接口

    public interface UserDao里
  1. //修改当前用户密码//增删改返回的都是int类型,查找返回对应的实体类;publicintupdatePwd(Connection connection,int id, String pwd)throws Exception;
复制代码
4.编写Dao接口实现类

    public class UserDaoImpl implements UserDao里
  1. publicintupdatePwd(Connection connection,int id, String pwd)throws Exception {// TODO Auto-generated method stubint flag =0;
  2.                 PreparedStatement pstm = null;if(connection != null){
  3.                         String sql ="update smbms_user set userPassword= ? where id = ?";
  4.                         Object[] params ={pwd,id};
  5.                         flag = BaseDao.execute(connection, pstm, sql, params);
  6.                         BaseDao.closeResource(null, pstm, null);}return flag;}
复制代码
5.业务层接口

    public interface UserService里
  1. //根据userId修改密码publicbooleanupdatePwd(int id, String pwd);
复制代码
6.业务层接口实现类

    因为业务层要调用Dao层(来获取数据库的数据),调用Dao层,就需要给它传参数,则connection此时传给Dao层,所以connection对象在业务层创建。业务层存在事务,失败了会回滚。,所以connection对象在业务层创建。因为业务层需要调用Dao层,即,这里调用userDao中的方法,这就涉及userDao的创建,有以下两种方法:
    ①在每个方法方法里new一个:UserDao userDao = new UserDaoImpl();
    ②【推荐】利用私有化 加 构造函数引入Dao:
  1. publicclassUserServiceImplimplementsUserService{//引入Dao,以后spring会替代这一步private UserDao userDao;publicUserServiceImpl(){
  2.                 userDao =newUserDaoImpl();}
  3.        
  4.         。。。。(各个函数)
  5. }
复制代码
    public class UserServiceImpl implements UserService里
  1. publicbooleanupdatePwd(int id, String pwd){boolean flag =false;//使用标志位,判断密码是否修改胜利。
  2.                 Connection connection = null;try{
  3.                         connection = BaseDao.getConnection();if(userDao.updatePwd(connection,id,pwd)>0)
  4.                                 flag =true;}catch(Exception e){
  5.                         e.printStackTrace();}finally{
  6.                         BaseDao.closeResource(connection, null, null);}return flag;}
复制代码
7.servlet记得实现复用需要提取出方法
  1. //实现servlet复用publicclassUserServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
  2.         String method = req.getParameter("method");if(method.equals("savepwd")){this.updatePwd(req , resp);}}@OverrideprotectedvoiddoPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}publicvoidupdatePwd(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//从session里拿Uer实体类
  3.         Object o = req.getSession().getAttribute(Constant.USER_SESSION);
  4.         String newPassword = req.getParameter("newPassword");boolean flag =false;if(o != null && newPassword != null && newPassword.length()!=0){//Uer实体类和新密码newPassword都拿到了,开端调用业务层
  5.             UserServiceImpl userService =newUserServiceImpl();
  6.             flag = userService.updatePwd(((User) o).getId(), newPassword);if(flag){
  7.                 req.setAttribute("message","修改密码胜利,请退出,使用新密码登录");//密码修改胜利,当前session。因为密码变了,session的内容自然也变了,所以需要移除,又因为密码变了需要重新登录,所以session会重新创建
  8.                 req.getSession().removeAttribute(Constant.USER_SESSION);}else{
  9.                 req.setAttribute("message","密码修改失败");}}else{
  10.             req.setAttribute("message","新密码有问题");}
  11.         req.getRequestDispatcher("pwdmodify.jsp").forward(req , resp);}}
复制代码
优化密码修改使用Ajax

1.阿里巴巴的fastjson
  1. <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.61</version></dependency>
复制代码
2.后台代码修改

    public class UserServlet extends HttpServlet里
  1. publicvoidpwdModify(HttpServletRequest req, HttpServletResponse resp)throws IOException {//从Session中拿ID
  2.         Object o = req.getSession().getAttribute(Constant.USER_SESSION);
  3.         String oldpassword = req.getParameter("oldpassword");//万能的Map : 结果集
  4.         Map<String, String> resultMap =newHashMap<String, String>();if(null == o ){//session过期、失效
  5.             resultMap.put("result","sessionerror");}elseif(StringUtils.isNullOrEmpty(oldpassword)){//旧密码输入为空
  6.             resultMap.put("result","error");}else{
  7.             String sessionPwd =((User)o).getUserPassword();if(oldpassword.equals(sessionPwd)){
  8.                 resultMap.put("result","true");}else{//旧密码输入不正确
  9.                 resultMap.put("result","false");}}
  10.         resp.setContentType("application/json");
  11.         PrintWriter outPrintWriter = resp.getWriter();
  12.         outPrintWriter.write(JSONArray.toJSONString(resultMap));
  13.         outPrintWriter.flush();
  14.         outPrintWriter.close();}
复制代码
用户管理实现(查询)

SMBMS超市订单管理系统-18.jpg

SMBMS超市订单管理系统-19.jpg


思路

SMBMS超市订单管理系统-20.jpg


导入静态资源

1.导入分页的工具类

SMBMS超市订单管理系统-21.png

  1. publicclassPageSupport{//当前页码-来自于用户输入privateint currentPageNo =1;//总数量(表)privateint totalCount =0;//页面容量privateint pageSize =0;//总页数-totalCount/pageSize(+1)privateint totalPageCount =1;publicintgetCurrentPageNo(){return currentPageNo;}publicvoidsetCurrentPageNo(int currentPageNo){if(currentPageNo >0){this.currentPageNo = currentPageNo;}}publicintgetTotalCount(){return totalCount;}publicvoidsetTotalCount(int totalCount){if(totalCount >0){this.totalCount = totalCount;//设置总页数this.setTotalPageCountByRs();}}publicintgetPageSize(){return pageSize;}publicvoidsetPageSize(int pageSize){if(pageSize >0){this.pageSize = pageSize;}}publicintgetTotalPageCount(){return totalPageCount;}publicvoidsetTotalPageCount(int totalPageCount){this.totalPageCount = totalPageCount;}publicvoidsetTotalPageCountByRs(){if(this.totalCount %this.pageSize ==0){this.totalPageCount =this.totalCount /this.pageSize;}elseif(this.totalCount %this.pageSize >0){this.totalPageCount =this.totalCount /this.pageSize +1;}else{this.totalPageCount =0;}}}
复制代码
2.导入用户列表页面

    userlist.jsprollpage.jsp
1.获取用户数量

SMBMS超市订单管理系统-22.jpg


1.UerDao接口
  1. //通过条件查询-用户表记录数publicintgetUserCount(Connection connection, String userName,int userRole)throws Exception;
复制代码
2.UerDaoImpl【使用动态SQL】
  1. //根据用户名或用户角色查询用户总数publicintgetUserCount(Connection connection, String userName,int userRole)throws Exception {// TODO Auto-generated method stub
  2.                 PreparedStatement pstm = null;
  3.                 ResultSet rs = null;int count =0;if(connection != null){//用StringBuffer是因为userName和userRole可能有也可能没有(也就是sql语句不确定,可变-->动态sql),利用StringBuffer的可变性停止随时添加
  4.                         StringBuffer sql =newStringBuffer();
  5.                         sql.append("select count(1) as count from smbms_user u,smbms_role r where u.userRole = r.id");//用ArrayList也是因为应对userName和userRole有没有的情况,随时添加。// 假设直接用object[]={userName,userRole}的话,userName和userRole不一定谁有谁没有,这样在dao层的执行语句中给sql语句的占位符(?)复制时,可能参数对不上,使用ArrayList随时添加可以处置这个问题。
  6.                         List<Object> list =newArrayList<Object>();if(!StringUtils.isNullOrEmpty(userName)){
  7.                                 sql.append(" and u.userName like ?");
  8.                                 list.add("%"+userName+"%");}if(userRole >0){
  9.                                 sql.append(" and u.userRole = ?");
  10.                                 list.add(userRole);}//把list转换成数组。//经过判断,userName和userRole谁存在谁不存在已经确定,list中保管了存在的参数,此时可以转换成数组Object[] params,供BaseDao.execute()调用。
  11.                         Object[] params = list.toArray();
  12.                         System.out.println("sql ----> "+ sql.toString());
  13.                         rs = BaseDao.execute(connection, pstm, rs, sql.toString(), params);if(rs.next()){
  14.                                 count = rs.getInt("count");//从结果集中获取最终的数量。}
  15.                         BaseDao.closeResource(null, pstm, rs);}return count;}
复制代码
3.UerService接口
  1. //根据条件查询用户表记录数publicintgetUserCount(String queryUserName,int queryUserRole);
复制代码
4.UeServiceImpl
  1. publicintgetUserCount(String queryUserName,int queryUserRole){// TODO Auto-generated method stub
  2.                 Connection connection = null;int count =0;
  3.                 System.out.println("queryUserName ---- > "+ queryUserName);
  4.                 System.out.println("queryUserRole ---- > "+ queryUserRole);try{
  5.                         connection = BaseDao.getConnection();
  6.                         count = userDao.getUserCount(connection, queryUserName,queryUserRole);}catch(Exception e){// TODO Auto-generated catch block
  7.                         e.printStackTrace();}finally{
  8.                         BaseDao.closeResource(connection, null, null);}return count;}
复制代码
2.获取用户列表

SMBMS超市订单管理系统-23.jpg


    public List<User> getUserList(),对这个查询用户列表函数,再走一遍上面的流程(如下)
    UerDao接口、UerDaoImpl、UerService接口、UeServiceImpl
3.获取角色列表

SMBMS超市订单管理系统-24.jpg

为了构造明晰,将角色相关的代码单独放在一个包中,和pojo类对应,编写对应的dao和service

SMBMS超市订单管理系统-25.png

SMBMS超市订单管理系统-26.png


4.用户显示的servlet【这个servlet较为复杂】

SMBMS超市订单管理系统-27.jpg


至此效劳处置完了,编写最后的servlet,这个servlet程序主要包括以下5部分。

SMBMS超市订单管理系统-28.jpg

  1. //重点、难点privatevoidquery(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//查询用户列表//从前端获取数据
  2.         String queryUserName = request.getParameter("queryname");
  3.         String temp = request.getParameter("queryUserRole");
  4.         String pageIndex = request.getParameter("pageIndex");int queryUserRole =0;
  5.         UserService userService =newUserServiceImpl();
  6.         List<User> userList = null;//设置页面容量。// 第一次走这个恳求,一定是第一页,页面大小固定int pageSize = Constant.pageSize;//当前页码int currentPageNo =1;/**
  7.          * http://localhost:8090/SMBMS/userlist.do
  8.          * ----queryUserName --NULL
  9.          * http://localhost:8090/SMBMS/userlist.do?queryname=
  10.          * --queryUserName ---""
  11.          */
  12.         System.out.println("queryUserName servlet--------"+queryUserName);
  13.         System.out.println("queryUserRole servlet--------"+queryUserRole);
  14.         System.out.println("query pageIndex--------- > "+ pageIndex);//判断这些恳求是否要处置if(queryUserName == null){
  15.             queryUserName ="";}if(temp != null &&!temp.equals("")){
  16.             queryUserRole = Integer.parseInt(temp);}if(pageIndex != null){try{
  17.                 currentPageNo = Integer.valueOf(pageIndex);}catch(NumberFormatException e){
  18.                 response.sendRedirect("error.jsp");}}//为了实现分页,需要计算出当前页面和总页面,页面大小...//总数量(表)int totalCount        = userService.getUserCount(queryUserName,queryUserRole);//总页数
  19.         PageSupport pages=newPageSupport();
  20.         pages.setCurrentPageNo(currentPageNo);
  21.         pages.setPageSize(pageSize);
  22.         pages.setTotalCount(totalCount);int totalPageCount = pages.getTotalPageCount();//控制首页和尾页if(currentPageNo <1){
  23.             currentPageNo =1;}elseif(currentPageNo > totalPageCount){
  24.             currentPageNo = totalPageCount;}//获取用户列表展示
  25.         userList = userService.getUserList(queryUserName,queryUserRole,currentPageNo, pageSize);
  26.         request.setAttribute("userList", userList);
  27.         List<Role> roleList = null;
  28.         RoleService roleService =newRoleServiceImpl();
  29.         roleList = roleService.getRoleList();
  30.         request.setAttribute("roleList", roleList);
  31.         request.setAttribute("queryUserName", queryUserName);
  32.         request.setAttribute("queryUserRole", queryUserRole);
  33.         request.setAttribute("totalPageCount", totalPageCount);
  34.         request.setAttribute("totalCount", totalCount);
  35.         request.setAttribute("currentPageNo", currentPageNo);
  36.         request.getRequestDispatcher("userlist.jsp").forward(request, response);}
复制代码
用户管理实现(增删改)

SMBMS超市订单管理系统-29.jpg


    一切的增删改都需要处置事务,下面是一个增加的使用事务的例子:
  1. publicbooleanadd(User user){// TODO Auto-generated method stubboolean flag =false;
  2.                 Connection connection = null;try{
  3.                         connection = BaseDao.getConnection();
  4.                         connection.setAutoCommit(false);//开启JDBC事务管理int updateRows = userDao.add(connection,user);
  5.                         connection.commit();if(updateRows >0){
  6.                                 flag =true;
  7.                                 System.out.println("add success!");}else{
  8.                                 System.out.println("add failed!");}}catch(Exception e){
  9.                         e.printStackTrace();try{
  10.                                 System.out.println("rollback==================");//假设执行出错就回滚
  11.                                 connection.rollback();}catch(SQLException e1){// TODO Auto-generated catch block
  12.                                 e1.printStackTrace();}}finally{//在service层停止connection连接的关闭
  13.                         BaseDao.closeResource(connection, null, null);}return flag;}
复制代码
供给商管理、订单管理

供给商管理、订单管理,和用户管理一样,也分查询和增删改两部分。施行方式也大致类似

回复

举报 使用道具

相关帖子
全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

可以绿你吗
注册会员
主题 11
回复 19
粉丝 0
|网站地图
快速回复 返回顶部 返回列表