JavaWeb学习笔记 —— 实现SMBMS超市订单管理系统一准备工作

JavaWeb学习笔记 —— 实现SMBMS超市订单管理系统一准备工作


参考教程B站狂神https://www.bilibili.com/video/BV12J411M7Sj


软件版本

IDEA 2020.1
JDK 11
Maven 3.6.3
MySQL 5.7.30
Tomcat 9.0.35

流程图

在这里插入图片描述

数据库相关的表

这些表自己建一下就行,想要建表语句在本篇博客最后附有csdn下载链接,该系列博客最后一篇附有github地址。
在这里插入图片描述

项目如何搭建

考虑使不使用Maven?

  • 使用Maven,找依赖
  • 不使用Maven,导jar包

下面是使用Maven进行项目搭建

项目创建

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

相关文件内容的修改

把pom.xml文件删除至如下图所示
在这里插入图片描述
把原来的web.xml里的内容替换掉
在这里插入图片描述
替换代码如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

</web-app>

该代码可以在Tomcat中找达到,路径如下
在这里插入图片描述
在这里插入图片描述

替换成如图所示
在这里插入图片描述
在main下新建java和resources两个文件夹
在这里插入图片描述
idea2020.1版本会有提示,直接双击就可以,版本较低没有提示的解决方法详见博客https://blog.csdn.net/qq_43594119/article/details/106199248中的标记文件夹
在这里插入图片描述
建好后目录结构如下
在这里插入图片描述

配置Tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
成功之后可以看到出现了index.jsp页面
在这里插入图片描述
然后启动项目测试能否跑起来
在这里插入图片描述
访问成功
在这里插入图片描述

通过Maven依赖导入jar包

导入以下5个包
jsp,Servlet,mysql驱动,jstl,stand…

  <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>
    <!-- JSTL表达式的依赖 -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- standard标签库的依赖 -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>

  </dependencies>

在这里插入图片描述
然后右上角同步
在这里插入图片描述

创建项目包结构

暂时创建以下几种包
在这里插入图片描述

连接MySQL

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选中smbms数据库(没有就先去建一个)
在这里插入图片描述
连接成功后如下图:(注意,这里数据库smbms和里面的表我提前建好的,没有就自己建一下,前面有相关的表结构,照着建立就行,想要建表语句在本篇博客最后附有csdn下载链接,该系列博客最后一篇附有github地址。)
在这里插入图片描述

连接MySQL出现问题详见博客https://blog.csdn.net/qq_43594119/article/details/106061275

编写实体类

ORM映射:表-类映射
对照表建立相关的实体类,实体类放在pojo包下。
只需要建立4个实体类User、Bill、Provider、Role即可

  • 先对照user表建立,多了age为了显示可以不写,userRoleName,方便联表查询
    在这里插入图片描述
    在这里插入图片描述
    如图所示,get、set方法自动生成即可。不会生成,详见博客https://blog.csdn.net/qq_43594119/article/details/105619222中生成构造方法、get、set方法等

  • bill类,多一个providerName,方便联表查询
    在这里插入图片描述

  • provider类,结构和表一样
    在这里插入图片描述

  • Role类,结构和表一样
    在这里插入图片描述

编写基础公共类

  • 数据库配置文件
    在这里插入图片描述
    在这里插入图片描述

  • 编写操作数据库的公共类

在这里插入图片描述

package com.ylw.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 is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");//把资源变成流

        try {
            properties.load(is); //使用properties加载流
        } 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); //将mysql驱动注册到DriverManager中去
            connection = DriverManager.getConnection(url, username, password); //传入参数,获取数据库连接
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;//返回连接
    }

    //查询公共方法
    /**
     * @param connection        sql连接
     * @param sql               sql语句
     * @param params            sql参数
     * @param resultSet         查询结果集
     * @param preparedStatement PreparedStatement对象可以防止sql注入
     * @return
     * @throws SQLException
     */
    public static ResultSet execute(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet,String sql,Object[] params) throws SQLException {
        preparedStatement = connection.prepareStatement(sql); //预编译SQL语句

		//向SQL语句中传入参数,即替换占位符?
        for (int i = 0; i < params.length; i++) {
            //setObject,数组从0开始,但是占位符从1开始
            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 {
        preparedStatement = connection.prepareStatement(sql);

        for (int i = 0; i < params.length; i++) {
            //setObject,数组从0开始,但是占位符从1开始
            preparedStatement.setObject(i+1,params[i]);
        }

        int updataRows = preparedStatement.executeUpdate();
        return updataRows;//返回更新的行数
    }

    //关闭连接,释放资源
    public static boolean closeResource(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet){
        boolean flag = true;

        if (resultSet!=null){
            try {
                resultSet.close();
                //关闭成功后设置为null,让垃圾回收器回收
                resultSet = null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag = false; //没有释放成功
            }
        }

        if (preparedStatement!=null){
            try {
                preparedStatement.close();
                //关闭成功后设置为null,让垃圾回收器回收
                preparedStatement = null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag = false; //没有释放成功
            }
        }

        if (connection!=null){
            try {
                connection.close();
                //关闭成功后设置为null,让垃圾回收器回收
                connection = null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag = false; //没有释放成功
            }
        }

        return flag; //只要有一个资源没有释放成功就会返回false
    }

}

  • 编写字符编码过滤器
    在这里插入图片描述
package com.ylw.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.ylw.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <!-- 设置所有请求都被过滤 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

导入网站静态资源

在这里插入图片描述
到这里,项目搭建准备工作就完事了


附:

建表语句资源下载:

csdn下载链接:SMBMS超市订单管理系统数据库建表语句

网站静态资源下载:

csdn下载链接:SMBMS超市订单管理系统网站静态资源

下一篇博客地址:

bug改了一天没改出来,暂时不更本系列的下一篇了༼༎ຶᴗ༎ຶ༽(;´༎ຶД༎ຶ`)

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

影龙武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值