一、超市订单管理系统准备阶段

  • Supermarket order management system
  1. 创建数据库
    smdms超市订单管理系统之登录功能-LMLPHP

  2. 数据库代码放置如下

  1. 当数据库配置完以后我们开始idea,创建一个Maven Webapp模板项目
  2. 然后开始配置Tomcat服务器
  3. 在pom.xml中导入项目依赖的jar包

二、进入idea开始编码

  1. 首先编写我们的实体类pojo,数据库表中的信息与之对应。
  1. 然后编写数据库连接用的文件
  1. idea连接数据库(不在此展示,自行解决)

  2. 编写过滤器,使我们网页每次都用utf-8编码

  1. 编写数据库的公共类,实现增删改查SRUD功能
package com.meteor.dao;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

//操作数据库的公共类
public class BaseDao {
    private static final String driver;
    private static final String url;
    private static final String username;
    private static final String password;

    //静态代码块,随着类的加载而加载
    static{
        Properties properties = new Properties();//可以让文件内容以键值对的形式读取
        //将文件内容读出
        InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
        try {
            //properties.load()从输入字节流读取属性列表(键和元素对)。
            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);//加载驱动
            //尝试建立与给定数据库URL的连接。
            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 {
        //connection.prepareStatement(sql)创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
        preparedStatement = connection.prepareStatement(sql);
        for (int i = 0; i < params.length; i++) {
            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 {
        //connection.prepareStatement(sql)创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
        preparedStatement = connection.prepareStatement(sql);
        for (int i = 0; i < params.length; i++) {
            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回收机制,如果对象为null,就会被回收。
                resultSet = null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag = false;
            }
        }

        if(preparedStatement != null) {
            try {
                preparedStatement.close();
                //GC回收机制,如果对象为null,就会被回收。
                preparedStatement = null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag = false;
            }
        }

        if(connection != null) {
            try {
                connection.close();
                //GC回收机制,如果对象为null,就会被回收。
                connection = null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag = false;
            }
        }
        return flag;
    }
}

  1. 编写service服务层代码,验证登录是否正确
import dao.BaseDao;
import dao.user.UserDao;
import dao.user.UserDaoImpl;
import pojo.User;

import java.sql.Connection;

public class UserServiceImpl implements UserService{
    public User login(String userCode, String password) {
        UserDaoImpl userDao = new UserDaoImpl();
        Connection connection = BaseDao.getConnection();//连接数据库
        User user = userDao.getLoginUser(connection, userCode);//获得登录用户信息
        //对登录的用户账号密码进行判断
        if(user.getUserPassword() == null ? password == null : user.getUserPassword().equals(password)) {
            BaseDao.closeResource(connection,null,null);
            return user;
        }else {
            BaseDao.closeResource(connection,null,null);
            System.out.println("密码错误");
            return null;
        }
    }
}

7.编写servlet业务层代码,和前端交互

package com.meteor.servlet.user;

import com.meteor.pojo.User;
import com.meteor.service.user.UserService;
import com.meteor.service.user.UserServiceImpl;
import com.meteor.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 {

    //控制层调用业务层代码
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("别出bug");
        //获取前端输入的用户名和密码
        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);
    }
}

  1. 工具类用来存放session值
  1. 在web.xml设置servlet和filter过滤器

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

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

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

三、总结

  • 前端代码页面都是cpoy的,若想获取前端代码可私信我。
  • 对于smdms登录内容就总结这么多,也是跟着狂神学的,代码也没怎么改进,只是想自己复习理解一遍。如果有不足之处,希望大家多多包涵,多多支持。如果有不懂的地方可以直接私信问我,欢迎来访!
  • 我将会继续更新关于Java的学习知识,以及此项目的后续功能,感兴趣的小伙伴可以关注一下。
  • 文章写得比较走心,用了很长时间,绝对不是copy过来的!
  • 尊重每一位学习知识的人,同时也尊重每一位分享知识的人。
04-04 11:58