JavaWeb超市订单管理系统

一、准备工作

二、数据库表及实体类构造

三、编写基础公共类

四、登录功能实现

五、结语

1.1安装maven项目架构管理工具

目的:主要为了自动导入jar包

1.1.1下载3.6.1版Maven(百度搜索即可)

1.1.2配置环境变量 (不懂的可以csdn搜索Maven配置教程)

在我们的系统环境变量中
配置如下配置:
·M2_HOME maven目录下的bin目录
·MAVEN_HOME maven的目录
·在系统的path中配置%MAVEN_HOME%\bin

1.1.3阿里云镜像(不懂的自己搜索即可)

·镜像:mirrors。作用:加速我们的下载
·国内建议使用阿里云的镜像

1.1.4本地仓库

在本地的仓库,远程仓库;
建立一个本地仓库:localRepository

1.1.5排雷

最好下载3.6.1版本,3.6.2版本与IDEA不兼容,可能导入包失败

1.2安装Tomcat

作用:当作服务器
Tomcat文件夹信息简介
JavaWeb超市订单管理系统_第1张图片

1.3在IDEA建立一个JavaWeb程序

点击文件->点击新建->选中Maven->选择JDK路径->点击选中Create from archetype->点击图中高亮的maven-archetype-webapp项目再点击下一个
JavaWeb超市订单管理系统_第2张图片
填写团队id及项目名,再点击下一个
JavaWeb超市订单管理系统_第3张图片
三个路径从上到下分别是:Maven安装路径,Maven配置文件,Maven仓库,选好之后点击下一个
JavaWeb超市订单管理系统_第4张图片
填写项目名和项目路径,点击完成
JavaWeb超市订单管理系统_第5张图片

1.4给项目配置Tomcat

ctrl+shift+alt+s打开项目结构
JavaWeb超市订单管理系统_第6张图片
JavaWeb超市订单管理系统_第7张图片

ctrl+shift+alt+s再次打开项目结构
JavaWeb超市订单管理系统_第8张图片
JavaWeb超市订单管理系统_第9张图片
JavaWeb超市订单管理系统_第10张图片

JavaWeb超市订单管理系统_第11张图片
JavaWeb超市订单管理系统_第12张图片
JavaWeb超市订单管理系统_第13张图片
JavaWeb超市订单管理系统_第14张图片
最后点击确定,Tomcat就配置好了

然后打开pom.xml文件在标签下插入,配置依赖,最后点击右上角开始

<!--Servlet依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
      <scope>provided</scope>
    </dependency>

JavaWeb超市订单管理系统_第15张图片
会跳转到http://localhost:8081,即成功。
JavaWeb超市订单管理系统_第16张图片

1.5创建包结构

java文件夹用来存放java代码

  • dao:操作数据库接口
  • filter:过滤器
  • pojo:数据库实体类
  • service:服务层
  • servlet:业务层
  • util:存放工具类或者常量

resources存放资源

JavaWeb超市订单管理系统_第17张图片

2.1数据库表

表为以下5张表,分别为账单表、供应商表、地址表、使用者表、角色表
表结构比较简单,没有外键,每个表一个主键
JavaWeb超市订单管理系统_第18张图片

2.2实体类

实体类指建立一个类与数据库表对应,通过类来访问数据库,这个类需要具有对应表的所有属性,以及每个属性的get和set方法,在IDEA中可以通过ctr+o自动生成get和set方法。下面是角色表的代码,其它表参考即可。

public class Role {
    private Integer id;//id
    private String roleCode;//角色编码
    private String roleName;//角色姓名
    private Integer createdBy;//创建者
    private Date creationDate;//创建时间
    private Integer modifyBy;//更新者
    private Date modifyDate;//更新时间

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getRoleCode() {
        return roleCode;
    }

    public void setRoleCode(String roleCode) {
        this.roleCode = roleCode;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public Integer getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(Integer createdBy) {
        this.createdBy = createdBy;
    }

    public Date getCreationDate() {
        return creationDate;
    }

    public void setCreationDate(Date creationDate) {
        this.creationDate = creationDate;
    }

    public Integer getModifyBy() {
        return modifyBy;
    }

    public void setModifyBy(Integer modifyBy) {
        this.modifyBy = modifyBy;
    }

    public Date getModifyDate() {
        return modifyDate;
    }

    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }
}

3.1数据库配置文件

可以在resources文件夹建立db.properties来存放连接数据库需要的信息
在这里插入图片描述

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

3.2编写数据库的公共类

静态代码块用来获得db.properties中的信息,getConnection方法用来获取数据库的连接,重载的两个execut方法用来对数据库增删改查,closeResource方法用来释放资源

package com.sqq.dao;

import com.sun.org.apache.xpath.internal.operations.Bool;

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 is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");

        try {
            properties.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }

        driver = properties.getProperty("driver");
        url = properties.getProperty("url");
        username = properties.getProperty("username");
        password = properties.getProperty("password");

    }

    //获取数据库的连接
    public static Connection getConnection(){
        Connection connection = null;
        try {
            Class.forName(driver);
            connection= DriverManager.getConnection(url,username,password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

    //编写查询公共类
    public static ResultSet execut(Connection connection, String sql, Object[] params, ResultSet resultSet, PreparedStatement preparedStatement) throws SQLException {
        //预编译的sql,在后面直接执行就可以了
        preparedStatement = connection.prepareStatement(sql);
        for (int i = 0; i <params.length ; i++) {
            //setObject,占位符从1开始,但是我们的数组是从0开始
            preparedStatement.setObject(i+1,params[i]);
        }
        resultSet=preparedStatement.executeQuery();
        return  resultSet;
    }

    //编写增删改公共类
    public static int execut(Connection connection, String sql, Object[] params, PreparedStatement preparedStatement) throws SQLException {
        preparedStatement = connection.prepareStatement(sql);
        for (int i = 0; i <params.length ; i++) {
            //setObject,占位符从1开始,但是我们的数组是从0开始
            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(connection!=null){
            try {
                connection.close();
                //GC回收
                connection=null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag=false;
            }
        }

        if(preparedStatement!=null){
            try {
                preparedStatement.close();
                //GC回收
                preparedStatement=null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag=false;
            }
        }

        if(resultSet!=null){
            try {
                resultSet.close();
                //GC回收
                resultSet=null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag=false;
            }
        }
        return flag;
    }
}

4.1思路

用户输入账号密码,点击提交调用servlet层校验账号密码,servlet层调用service层,service层获取数据库连接并且调用dao层,dao层调用数据库基础类进行增删改查。
JavaWeb超市订单管理系统_第19张图片

4.2前端页面

4.3设置首页

在web.xml中进行配置

<welcome-file-list>
    <welcome-file>/login.jsp</welcome-file>
</welcome-file-list>

4.4编写dao层登录用户登录的接口

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

4.5编写dao接口的实现类

public class UserDaoImpl implements UserDao {
    @Override
    public User getLoginUser(Connection connection, String userCode) throws SQLException {
        PreparedStatement pstm =null;
        ResultSet rs = null;
        User user = null;

        if(connection!=null){
            String sql = "select * from smbms_user where userCode=?";
            Object[] params = {userCode};

            rs = BaseDao.execute(connection,pstm,rs,sql,params);
            if(rs.next()){
                user=new User();
                user.setId(rs.getInt("id"));
                user.setUserCode(rs.getString("userCode"));
                user.setUserName(rs.getString("userName"));
                user.setUserPassword(rs.getString("userPassword"));
                user.setGender(rs.getInt("gender"));
                user.setBirthday(rs.getDate("birthday"));
                user.setPhone(rs.getString("phone"));
                user.setAddress(rs.getString("address"));
                user.setUserRole(rs.getInt("userRole"));
                user.setCreatedBy(rs.getInt("createdBy"));
                user.setCreationDate(rs.getTimestamp("creationDate"));
                user.setModifyBy(rs.getInt("modifyBy"));
                user.setModifyDate(rs.getTimestamp("modifyDate"));
            }
            BaseDao.closeResource(null,pstm,rs);
        }
        return user;
    }
}

4.6业务层接口

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

4.7业务层实现类

public class UserServiceImpl implements UserService {
    //业务层都会调用dao层,所以我们要引入dao层;
    private UserDao userDao;
    public UserServiceImpl(){
        userDao = new UserDaoImpl();
    }

    @Override
    public User login(String userCode, String password) {
        Connection connection = null;
        User user = null;

        try {
            connection = BaseDao.getConnection();
            //通过业务层调用对应的具体的数据库操作
            user = userDao.getLoginUser(connection,userCode);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            BaseDao.closeResource(connection,null,null);
        }
        return user;
    }
    @Test
    public void test(){
        UserServiceImpl userService = new UserServiceImpl();
        User admin = userService.login("admin", "222dqqd");
        System.out.println(admin.getUserPassword());
    }
}

4.8编写Servlet

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("LoginServlet--start...");

        //获取用户名和密码
        String userCode = req.getParameter("userCode");
        String userPassword = req.getParameter("userPassword");

        //和数据库中的密码进行对比,调用业务层
        UserService 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);
    }
}

4.9注册Servlet

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

4.10测试访问,确保以上功能成功!

5.1后续功能实现

后续功能与登录功能类似,都是先写dao层,再写service层去调用dao层,再写servlet调用service并与前端交互,最后在web.xml中配置servlet。

5.2项目连接https://download.csdn.net/download/lovely___day/12408547

你可能感兴趣的:(Java)