SMBMS笔记—未完善

SMBMS

1.项目搭建准备工作

1.1.搭建一个maven web项目

1.2.配置Tomcat

1.3.导包

<dependencies>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.21</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.7.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.14</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
</dependencies>

1.4.创建项目包结构

1.5.编写实体类

  • Address.java
package com.mashiro.pojo;

import lombok.Data;

import java.util.Date;

@Data
public class Address {
    private Integer id;
    private String cootact;
    private String addressDesc;
    private String postCode;
    private String tel;
    private Integer createBy;
    private Date creationDate;
    private Integer modifyBy;
    private Date modifyDate;
    private Integer userId;
}
  • Bill.java
package com.mashiro.pojo;

import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

@Data
public class Bill {
    private Integer id;
    private String billCode;
    private String productName;
    private String productDesc;
    private String productUnit;
    private String productCount;
    private BigDecimal totalPrice;
    private Integer isPayment;
    private Integer createdBy;
    private Date creationDate;
    private Integer modifyBy;
    private Date modifyDate;
    private Integer providerId;

    private String providerName;
}
  • Provider.java
package com.mashiro.pojo;

import lombok.Data;

import java.util.Date;

@Data
public class Provider {
    private Integer id;
    private String proCode;
    private String proName;
    private String proDesc;
    private String proContact;
    private String proPhone;
    private String proAddress;
    private String proFax;
    private Integer createdBy;
    private Date creationDate;
    private Date modifyDate;
    private Integer modifyBy;
}
  • Role.java
package com.mashiro.pojo;

import lombok.Data;

import java.util.Date;

@Data
public class Role {
    private Integer id;
    private String roleCode;
    private String roleName;
    private Integer createdBy;
    private Date creationDate;
    private Integer modifyBy;
    private Date modifyDate;
}
  • User.java
package com.mashiro.pojo;

import lombok.Data;

import java.util.Date;

@Data
public class User {
    private Integer id;
    private String userCode;
    private String userName;
    private String userPassword;
    private Integer gender;
    private Date birthday;
    private String phone;
    private String address;
    private Integer userRole;
    private Integer createdBy;
    private Date creationDate;
    private Integer modifyBy;
    private Date modifyDate;

    private Integer age;
    private String userRoleName;

    public Integer getAge(){
        return (new Date()).getYear()-birthday.getYear();
    }
}

1.6.编写基础公共类

  • dp.properties
driver=com.mysql.cj.jdbc.Driver
url=url=jdbc:mysql://localhost:3306/smbms?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
name=root
password=123456
  • BaseDao.java
package com.mashiro.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 name;
    private static String password;

    static {
        InputStream resourceAsStream = BaseDao.class.getClassLoader().getResourceAsStream("dp.properties");
        Properties properties = new Properties();
        try {
            properties.load(resourceAsStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        driver = properties.getProperty("driver");
        url = properties.getProperty("url");
        name = properties.getProperty("name");
        password = properties.getProperty("password");
    }

    /**
     * 获取sql连接
     * @return
     */
    public static Connection getConnection() {
        Connection connection = null;
        try {
            Class.forName(driver);
            connection = DriverManager.getConnection(url, name, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

    /**
     * 查询公共类
     * @param connection
     * @param sql sql语句
     * @param params Object参数
     * @param statement
     * @return 返回查询到的结果集
     * @throws SQLException
     */
    public static ResultSet execute(Connection connection,String sql,Object[] params,PreparedStatement statement,ResultSet resultSet) throws SQLException {
        statement = connection.prepareStatement(sql);

        for (int i = 0; i < params.length; i++) {
            statement.setObject(i+1,params[i]);
        }
        resultSet = statement.executeQuery();
        return  resultSet;
    }

    /**
     * 增删改公共类
     * @param connection sql连接
     * @param sql sql语句
     * @param params Object参数
     * @param statement
     * @return 执行成功语句数
     * @throws SQLException
     */
    public static int execute(Connection connection,String sql,Object[] params,PreparedStatement statement) throws SQLException {
        statement = connection.prepareStatement(sql);
        for (int i = 0; i < params.length; i++) {
            statement.setObject(i+1,params[i]);
        }
        int i = statement.executeUpdate();
        return i;
    }

    /**
     * 关闭释放资源
     * @param resultSet
     * @param statement
     * @param connection
     * @return
     */
    public static boolean close(ResultSet resultSet,PreparedStatement statement,Connection connection){
        boolean flag = true;

        if (resultSet != null){
            try {
                resultSet.close();
                // resultSet关闭成功后, resultSet置为null GC回收
                resultSet = null;
            } catch (SQLException e) {
                flag = false;
                e.printStackTrace();
            }
        }

        if (statement != null){
            try {
                statement.close();
                statement = null;
            } catch (SQLException e) {
                flag = false;
                e.printStackTrace();
            }
        }

        if (connection != null){
            try {
                connection.close();
                // resultSet关闭成功后, resultSet置为null GC回收
                connection = null;
            } catch (SQLException e) {
                flag = false;
                e.printStackTrace();
            }
        }

        return flag;
    }
}

1.7.编写中文字符集编码过滤器

  • CharacterEncodingFilter.java
package com.mashiro.filter;

import javax.servlet.*;
import java.io.IOException;

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() {
        
    }
}
  • web.xml
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>com.mashiro.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

1.8.导入静态资源

2.实现登录功能

2.1.编写前端页面 && 设置为欢迎页

  • Login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    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){
	      top.location=self.location;
	 } */
    </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>用户名:</label>
					<input type="text" class="input-text" id="userCode" name="userCode" placeholder="请输入用户名" required/>
				</div>	
				<div class="inputbox">
                    <label>密码:</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>
  • web.xml
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>

2.2.编写用户登录的Dao接口

public interface UserDao {
    public User getUser(Connection connection,String userCode) throws SQLException;
}

2.3.编写Dao接口的实现类

package com.mashiro.dao.user;

import com.mashiro.dao.BaseDao;
import com.mashiro.pojo.User;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDaoImpl implements UserDao{

    public User getUser(Connection connection, String userCode) throws SQLException {

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        User user = null;

        String sql = "select * from `smbms_user` where userCode = ?";
        Object[] params = {userCode};      
        resultSet = BaseDao.execute(connection, sql, params, preparedStatement, resultSet);
        while (resultSet.next()){
            user = new User();
            user.setId(resultSet.getInt("id"));
            user.setUserCode(resultSet.getString("userCode"));
            user.setUserName(resultSet.getString("userName"));
            user.setUserPassword(resultSet.getString("userPassword"));
            user.setGender(resultSet.getInt("gender"));
            user.setBirthday(resultSet.getDate("birthday"));
            user.setPhone(resultSet.getString("phone"));
            user.setAddress(resultSet.getString("address"));
            user.setUserRole(resultSet.getInt("userRole"));
            user.setCreatedBy(resultSet.getInt("createBy"));
            user.setCreationDate(resultSet.getDate("creationDate"));
            user.setModifyBy(resultSet.getInt("modifyBy"));
            user.setModifyDate(resultSet.getDate("modifyDate"));
        }
        BaseDao.close(resultSet,preparedStatement,null);
        return user;
    }
}

2.4.编写业务层接口

public interface UserLogin {
    public User Login(String userCode,String password) throws SQLException;
}

2.5.编写业务层接口实现类

package com.mashiro.service;

import com.mashiro.dao.BaseDao;
import com.mashiro.dao.user.UserDao;
import com.mashiro.dao.user.UserDaoImpl;
import com.mashiro.pojo.User;
import org.junit.jupiter.api.Test;

import java.sql.Connection;
import java.sql.SQLException;

public class UserLoginImpl implements UserLogin {

    private UserDao userDao = null;

    public UserLoginImpl(){
        userDao = new UserDaoImpl();
    }

    public User Login(String userCode, String password) {
        Connection connection = null;
        User user = null;
        try {
            connection = BaseDao.getConnection();
            user = userDao.getUser(connection, userCode);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            BaseDao.close(null,null,connection);
        }
        return user;
    }
}

2.6.编写控制层代码

package com.mashiro.servlet.user;

import com.mashiro.pojo.User;
import com.mashiro.service.user.UserService;
import com.mashiro.service.user.UserServiceImpl;
import com.mashiro.util.Constants;
import lombok.SneakyThrows;


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 {
    @SneakyThrows
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进入Servlet");
        // 注意跟前端参数名对应
        String userCode = req.getParameter("userCode");
        String userPassword = req.getParameter("userPassword");

        UserService userService = new UserServiceImpl();
        User user = userService.login(userCode, userPassword);
        if (user != null){
            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);
    }
}

2.7.注册Servlet

    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.mashiro.servlet.user.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <!-- 注意跟前端给 action="${pageContext.request.contextPath }/login.do" 的一致 -->
        <url-pattern>/login.do</url-pattern>
    </servlet-mapping>

2.8.运行错误处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWW9ubIL-1603266788435)(C:\Users\25716\AppData\Roaming\Typora\typora-user-images\image-20201013133614835.png)]

解决方法: 在Tomcat下lib目录中导入mysql-connection-java的包

3.登录功能完善

3.1.注销登录功能

package com.mashiro.servlet.user;

import com.mashiro.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 {
        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);
    }
}

3.2.注册Servlet

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

3.3.权限拦截功能

package com.mashiro.filter;

import com.mashiro.pojo.User;
import com.mashiro.util.Constants;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

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;

        User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);
        if (user == null){
            resp.sendRedirect(req.getContextPath()+"/error.jsp");
        } else {
            filterChain.doFilter(req,resp);
        }
    }

    public void destroy() {

    }
}

3.4.注册拦截器

    <filter>
        <filter-name>SysFilter</filter-name>
        <filter-class>com.mashiro.filter.SysFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SysFilter</filter-name>
        <url-pattern>/jsp/*</url-pattern>
    </filter-mapping>

3.5.在service中添加密码判断,修改后代码如下

package com.mashiro.service.user;

import com.mashiro.dao.BaseDao;
import com.mashiro.dao.user.UserDao;
import com.mashiro.dao.user.UserDaoImpl;
import com.mashiro.pojo.User;

import java.sql.Connection;
import java.sql.SQLException;

public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public UserServiceImpl(){
        userDao = new UserDaoImpl();
    }

    public User login(String userCode, String password) {
        Connection connection = null;
        User user = null;
        try {
            connection = BaseDao.getConnection();
            user = userDao.getUser(connection, userCode);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            BaseDao.close(null,null,connection);
        }
        
        // 更新的代码如下
        if (user != null && user.getUserPassword().equals(password)){
            return user;
        } else {
            return null;
        }
    }
}

4.用户密码修改

4.1.UserDao层增加密码修改接口

http://localhost:8080/smbms/login.jsp

4.2. Dao层实现类

    // 修改用户密码
    public int updatePassword(Connection connection, int id, String password) throws SQLException {
        System.out.println("进入了updatePassword");
        String sql = "update `smbms_user` set `userPassword` = ? where `id` = ?";
        PreparedStatement prepareStatement = null;
        int execute = 0;
        Object[] params= {password,id};
        if (connection != null){
            execute = BaseDao.execute(connection, prepareStatement, sql, params);
        }
        BaseDao.close(null,prepareStatement,null);
        return execute;
    }

4.3.业务层接口

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

4.4.业务层实现类

    // 通过id来修改新密码
    public boolean updatePassword(int id,String password){
        System.out.println("进入了UserServiceImpl updatePassword");
        Connection connection = null;
        boolean flag = false;
        try {
            connection = BaseDao.getConnection();
             if(userDao.updatePassword(connection, id, password) > 0){
              flag = true;
             }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            BaseDao.close(null,null,connection);
        }
       return flag;
    }

4.5.Servlet层

package com.mashiro.servlet.user;

import com.mashiro.pojo.User;
import com.mashiro.service.user.UserService;
import com.mashiro.service.user.UserServiceImpl;
import com.mashiro.util.Constants;
import com.mysql.cj.util.StringUtils;

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 UpdatePasswordServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String oldpassword = req.getParameter("oldpassword");
        String newpassword = req.getParameter("newpassword");
        Object o = req.getSession().getAttribute(Constants.USER_SESSION);

        boolean flag = false;
        if ( o != null && !StringUtils.isNullOrEmpty(newpassword)) {
            UserService userService = new UserServiceImpl();
            flag = userService.updatePassword(((User)o).getId(),newpassword);
            if (flag){
                req.setAttribute("message","修改密码成功,请退出后 用新密码登录。");
                req.getSession().removeAttribute(Constants.USER_SESSION);
            } else {
                req.setAttribute("message","修改密码失败。");
            }
        } else {
            req.setAttribute("message","新密码不合法");
        }

        req.getRequestDispatcher("/jsp/pwdmodify.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

4.6.注册servlet

    <servlet>
        <servlet-name>UpdatePasswordServlet</servlet-name>
        <servlet-class>com.mashiro.servlet.user.UpdatePasswordServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UpdatePasswordServlet</servlet-name>
        <url-pattern>/jsp/user.do</url-pattern>
    </servlet-mapping>

4.7.代码优化,提高代码复用

package com.mashiro.servlet.user;

import com.mashiro.pojo.User;
import com.mashiro.service.user.UserService;
import com.mashiro.service.user.UserServiceImpl;
import com.mashiro.util.Constants;
import com.mysql.cj.util.StringUtils;

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 UserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //    <input type="hidden" name="method" value="savepwd">
        String method = req.getParameter("method");
        if (method != null && method.equals("savapwd")){
            this.updatePassword(req,resp);
        }
   

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

    public void updatePassword(HttpServletRequest req, HttpServletResponse resp) {
        String oldpassword = req.getParameter("oldpassword");
        String newpassword = req.getParameter("newpassword");
        Object o = req.getSession().getAttribute(Constants.USER_SESSION);

        boolean flag = false;
        if ( o != null && !StringUtils.isNullOrEmpty(newpassword)) {
            UserService userService = new UserServiceImpl();
            flag = userService.updatePassword(((User)o).getId(),newpassword);
            if (flag){
                req.setAttribute("message","修改密码成功,请退出后 用新密码登录。");
                req.getSession().removeAttribute(Constants.USER_SESSION);
            } else {
                req.setAttribute("message","修改密码失败。");
            }
        } else {
            req.setAttribute("message","新密码不合法");
        }

        req.getRequestDispatcher("/jsp/pwdmodify.jsp").forward(req,resp);
    }
}

5.密码修改优化

5.1.ajax局部动态更新

oldpassword.on("blur",function(){
		$.ajax({
			type:"GET",
			url:path+"/jsp/user.do",
			data:{method:"pwdmodify",oldpassword:oldpassword.val()},
			dataType:"json",
			success:function(data){
				if(data.result == "true"){//旧密码正确
					validateTip(oldpassword.next(),{"color":"green"},imgYes,true);
				}else if(data.result == "false"){//旧密码输入不正确
					validateTip(oldpassword.next(),{"color":"red"},imgNo + " 原密码输入不正确",false);
				}else if(data.result == "sessionerror"){//当前用户session过期,请重新登录
					validateTip(oldpassword.next(),{"color":"red"},imgNo + " 当前用户session过期,请重新登录",false);
				}else if(data.result == "error"){//旧密码输入为空
					validateTip(oldpassword.next(),{"color":"red"},imgNo + " 请输入旧密码",false);
				}
			},
			error:function(data){
				//请求出错
				validateTip(oldpassword.next(),{"color":"red"},imgNo + " 请求错误",false);
			}
		});

5.2.UserServlet代码优化

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        String method = req.getParameter("method");
        System.out.println(method);
        if (method != null && method.equals("savepwd")){
            this.updatePassword(req,resp);
        } else if (method != null && method.equals("pwdmodify")) {
            this.verOldpassword(req,resp);
        }
    }

5.3.verOldpassword 密码验证方法编写

// 验证旧密码
    public void verOldpassword(HttpServletRequest req, HttpServletResponse resp){

        Object o = req.getSession().getAttribute(Constants.USER_SESSION);
        String oldpassword = req.getParameter("oldpassword");
        Map<String, String> map = new HashMap<String, String>();

        if (o == null){ // Session失效或过期
            System.out.println("Session失效或过期");
            map.put("result","sessionerror");
        } else if (StringUtils.isNullOrEmpty(oldpassword)){ // 旧密码为空
            System.out.println("旧密码为空");
            map.put("result","error");
        } else {
            String userPassword = ((User) o).getUserPassword();
            if (oldpassword.equals(userPassword)) {
                System.out.println("旧密码验证成功");
                map.put("result", "true");
            } else {
                System.out.println("旧密码不正确");
                map.put("result", "false");
            }
        }

        try {
            // 设置类型为JSON类型
            resp.setContentType("application/json");
            PrintWriter writer = resp.getWriter();
            // JSONArray.toJSONString(map) 将map类型改为JSONString类型
            writer.write(JSONArray.toJSONString(map));
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

5.4.注意事项

  • 导入fastjson的包(alibaba)
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.74</version>
        </dependency>
  • Tomcat中也要导入fastjson的包,否则会报500错误

6.用户管理功能实现

6.1.获取用户数量

6.1.1.UserDao
 // 查询用户数量
    public int getUserCount(Connection connection,String userName,int userRole) throws SQLException;
6.1.2.UserDaoImpl
// 获取用户数量
    public int getUserCount(Connection connection, String userName, int userRole) throws SQLException {
        PreparedStatement prepareStatement = null;
        ResultSet resultSet = null;
        ArrayList<Object> list = new ArrayList<Object>();
        StringBuffer sb = new StringBuffer();
        int count = 0;

        if (connection != null){
            sb.append("select COUNT(1) as count from `smbms_user` `u`, `smbms_role` `r` where `u`.userRole = `r`.id ");
            if ( !StringUtils.isNullOrEmpty(userName) ){
                sb.append(" and `u`.userName like ?");
                list.add("'%"+userName+"%'");
            }
            if (userRole > 0){
                sb.append(" and `r`.id = ?");
                list.add(userRole);
            }
            String sql = sb.toString();
            Object[] objects = list.toArray();

            System.out.println("UserDaoImpl-->getUserCount()-->sql:\n"+sql);
            resultSet = BaseDao.execute(connection, prepareStatement,resultSet , sql, objects);

            if (resultSet.next()){
                count = resultSet.getInt("count");
            }
            BaseDao.close(resultSet,prepareStatement,null);
        }
        return count;
    }
6.1.3.UserService
  // 查询用户数量
    public int getUserCount(String name,int userRole);
6.1.4.UserServiceImpl
public int getUserCount(String name, int userRole) {
        Connection connection = null;
        int userCount = 0;
        try {
            connection = BaseDao.getConnection();
            userCount = userDao.getUserCount(connection, name, userRole);

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            BaseDao.close(null,null,connection);
        }
        return userCount;
    }

6.2.获取用户信息列表

6.2.1.UserDao
 // 查询用户信息+分页
    public List<User> getUserLimit(Connection connection, String userName, int userRole, int startIndex, int pageSize) throws  SQLException;
6.2.2.UserDaoImpl
// 查询用户信息+分页
    public List<User> getUserLimit(Connection connection, String userName, int userRole, int startIndex, int pageSize) throws SQLException {
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        List<User> userList = new ArrayList<User>();
        ArrayList<Object> list = new ArrayList<Object>();

        if (connection != null){
            StringBuffer sb = new StringBuffer();
            sb.append("select * from smbms_user, smbms_role where smbms_user.userRole = smbms_role.id");
            if ( !StringUtils.isNullOrEmpty(userName) ){
                sb.append(" and userName like ?");
                list.add(userName);
            }
            if (userRole > 0){
                sb.append(" and userRole = ?");
                list.add(userRole);
            }
            // 实现id升序排序分页
            sb.append(" order by smbms_user.id ASC limit ?,?");
            list.add(startIndex);
            list.add(pageSize);
            // 执行sql  获取resultSet
            System.out.println(sb.toString());
            resultSet = BaseDao.execute(connection, preparedStatement, resultSet, sb.toString(), list.toArray());
            // 取出resultSet中的数据
            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("roleName"));
                userList.add(_user);
            }
        }
        return userList;
    }
6.2.3.UserService
// 查询用户信息+分页
public List<User> getUserLimit(String userName, int userRole, int startIndex, int pageSize);
6.2.4.UserServiceImpl
// 查询用户数量
public int getUserCount(String name, int userRole) {
    Connection connection = null;
    int userCount = 0;
    try {
        connection = BaseDao.getConnection();
        userCount = userDao.getUserCount(connection, name, userRole);

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        BaseDao.close(null,null,connection);
    }
    return userCount;
}

6.3.获取角色信息列表

6.3.1.UserDao
// 查询角色信息
    public List<Role> getRoleList(Connection connection) throws SQLException;
6.3.2.UserDaoImpl
// 查询角色信息
public List<Role> getRoleList(Connection connection) throws SQLException {
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    List<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.setRoleName(resultSet.getString("roleName"));
            _role.setRoleCode(resultSet.getString("roleCode"));
            list.add(_role);
        }
        BaseDao.close(resultSet,preparedStatement,null);
    }
    return list;
}
6.3.3.UserService
    // 查询角色信息
    public List<Role> getRoleList();
6.3.4.UserServiceImpl
 // 查询角色信息
public List<Role> getRoleList() {
    Connection connection = null;
    List<Role> list = null;
    try {
        connection = BaseDao.getConnection();
        list = userDao.getRoleList(connection);
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        BaseDao.close(null,null,connection);
    }
    return list;
}

6.4.UserServler

// 查询用户列表
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;

    // 从后端获取数据
    UserService userService = new UserServiceImpl();
    RoleService roleService = new RoleServiceImpl();

    // 设置配置
    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 pageSupport = new PageSupport();
    pageSupport.setPageSize(pageSize);
    pageSupport.setCurrentPageNo(currentPageNo);
    pageSupport.setTotalCount(totalCount);

    // 总页面数量
    int totalPageCount = pageSupport.getTotalPageCount();

    // 判断首页和尾页  防止数值溢出范围
    if (currentPageNo < 1) {
        currentPageNo = 1;
    } else if (currentPageNo > totalPageCount) {
        currentPageNo = totalPageCount;
    }

    // 获取用户列表
    List<User> userList = userService.getUserLimit(queryUserName, queryUserRole, (currentPageNo-1)*pageSize, pageSize);
    req.setAttribute("userList",userList);
    // 获取角色列表
    List<Role> roleList = roleService.getRoleList();
    req.setAttribute("roleList",roleList);

    // 向前端传递页面信息
    req.setAttribute("totalCount",totalCount);         // 记录总数
    req.setAttribute("currentPageNo",currentPageNo);   // 当前页
    req.setAttribute("totalPageCount",totalPageCount); // 总页数

    req.setAttribute("queryUserName",queryUserName);
    req.setAttribute("queryUserRole",queryUserRole);


    // 前端测试
    try {
        req.getRequestDispatcher("userlist.jsp").forward(req,resp);
    } catch (ServletException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值