smbms项目搭建准备工作

本文详细介绍了如何使用Maven构建一个Java Web项目,包括创建项目结构、配置Tomcat、数据库设计、设置字符编码过滤器以及导入静态资源。重点讲解了BaseDao公共类的编写,实现了数据库操作的通用方法,并提供了数据库配置文件的示例。此外,还提到了JSP中引用CSS样式的问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、项目搭建

2、数据库设计

3.项目搭建

1、项目如何搭建?

  • 是否使用maven?

    • 使用maven要去网上找依赖
    • 不使用maven要自己手动导jar包

    为了方便,这个项目使用maven搭建

2、创建项目

  • 使用maven模板创建一个maven项目

    补全maven项目结构

  • 更新WEB.XML的配置版本
  • <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>

  • 清理pom.xml

    只需要保留GAV+项目的打包方式即可

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.thhh</groupId>
      <artifactId>smbms</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
    </project>

    3、配置Tomcat

  • 4、测试项目是否搭建完成。

  • 5、导入依赖

      <dependencies>
        <!--servlet依赖-->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
        </dependency>
        <!--JSP依赖-->
        <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.2.1-b03</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>
        <!--JSTL标签的依赖-->
        <dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
        </dependency>
      </dependencies>

  • 6、创建项目包结构在创建这个项目会使用的包 

    7、创建实体类/JavaBean/ORM映射

  • 使用IDEA连接数据库,按照数据库中的表的结构来创建实体类

     

     

     


    数据库中有5张表,但是地址表没有什么用处,所以我们暂时不创建地址表对用的实体类

     

  • 数据库配置文件,这是一个资源文件,应该创建在maven项目的resources文件中
  • 8、编写数据库操作的基础公共类BaseDao

    DRIVER=com.mysql.jdbc.Driver
    URL=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8
    USERNAME=root
    PASSWORD=123

  • 使用静态代码块实现初始化参数
  • private static String DRIVER;
    private static String URL;
    private static String USERNAME;
    private static String PASSWORD;
    
    static {//静态代码块,在调用这个类的地方优先自动执行
        //读取配置文件
        //1、创建properties对象
        Properties properties = new Properties();
        //2、通过类加载器加载资源文件为字节输入流
        InputStream in = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
        try {
            properties.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        DRIVER = properties.getProperty("DRIVER");
        URL = properties.getProperty("URL");
        USERNAME = properties.getProperty("USERNAME");
        PASSWORD = properties.getProperty("PASSWORD");
    }

  • 编写数据库操作的公共方法
  • package com.thhh.dao;
    /**
     * 注意理解这个类中的方法之所以要传入这些数据库操纵对象是因为为了统一的关闭资源
     * 而传入的对象中可以都是null,具体的对象获取在方法里面进行;也可以只有conn实例化,其他对象的实例化同样放在具体的方法里进行
     */
    
    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;
    
        //静态代码块用于初始化JDBC4大参数,且静态代码块只会在第一次调用这个类的时候执行一次
        static {//静态代码块,在调用这个类的地方优先自动执行
            //读取配置文件
            //1、创建properties对象
            Properties properties = new Properties();
            //2、通过类加载器加载资源文件为字节输入流
            InputStream in = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
            try {
                properties.load(in);
            } catch (IOException e) {
                e.printStackTrace();
            }
            DRIVER = properties.getProperty("DRIVER");
            URL = properties.getProperty("URL");
            USERNAME = properties.getProperty("USERNAME");
            PASSWORD = properties.getProperty("PASSWORD");
        }
    
        //1、编写获取数据库的连接对象的公共方法
        public static Connection getConnection(){
            Connection conn= null;
            try {
                //1、加载驱动类
                Class.forName(DRIVER);
                //2、获取连接对象
                conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            return conn;
        }
    
        //2、编写查询公共方法 —— 注意查询的结果返回为ResultSet结果集
        /**
         * 用于查询数据的公共方法,注意:使用发送SQL语句的对象为PreparedStatement
         * @param sql:查询的sql语句,由前端传递
         * @param params:sql语句中占位符的值
         *
         *===============这下面的3个参数之所以在调用的时候传递原因就在于这3个都是资源,我们需要关闭,如果我们直接在这个方法里获取资源对象的话,那么我们就应该在这个方法中关闭资源===============
         *===============但是调用处还在等待这个方法返回结果集,所以我们不应该在这个地方获取这3个对象,而应该由调用出传递,这样可以统一管理和关闭资源===============
         *
         * @param conn:调用出使用BaseDao.getConnection()获取到数据库连接对象传入
         * @param pstmt:调用出只是传入null的引用。这个对象真正的实例化放在这个方法里面
         * @param rs:返回的结果集,和pstmt只是传入null的引用。这个对象真正的实例化放在这个方法里面
         *
         * @return:返回查询到的结果集
         */
        public static ResultSet executeQuery(String sql,Object[] params,Connection conn,PreparedStatement pstmt,ResultSet rs){
            try {
                pstmt = conn.prepareStatement(sql);
                for (int i=1;i<= params.length;i++){//循环遍历参数数组,并将参数设入SQL中
                    pstmt.setObject(i,params[i-1]);//注意:数组的index从0开始,而PreparedStatement中设置占位符的值的index从1开始
                }
                rs = pstmt.executeQuery();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            return  rs;
        }
    
        //3、编写修改公共方法
        /**
         * 用于修改数据的公共方法,注意:使用发送SQL语句的对象为PreparedStatement
         * @param sql:修改数据的sql语句模板
         * @param params:模板中占位符对应的值
         *
         * =====下面两个对象需要调用出传入也是为了统一管理和关闭资源=====
         * @param conn:调用出使用BaseDao.getConnection()获取到数据库连接对象传入
         * @param pstmt:调用出只是传入null的引用。这个对象真正的实例化放在这个方法里面
         *
         * @return 返回受影响的行数
         */
        public static int executeUpdate(String sql,Object[] params,Connection conn,PreparedStatement pstmt){
            int result = 0;
            try {
                pstmt = conn.prepareStatement(sql);
                for (int i=1;i< params.length;i++){//循环遍历参数数组,并将参数设入SQL中
                    pstmt.setObject(i,params[i-1]);//注意:数组的index从0开始,而PreparedStatement中设置占位符的值的index从1开始
                }
                result = pstmt.executeUpdate();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            return  result;
        }
    
        //4、编写关闭资源公共方法
        /**
         * 关闭资源
         * @param conn:调用出使用BaseDao.getConnection()获取到数据库连接对象传入
         * @param pstmt:调用出只是传入null的引用。这个对象真正的实例化放在这个方法里面
         * @param rs:返回的结果集,和pstmt只是传入null的引用。这个对象真正的实例化放在这个方法里面
         * @return:返回关闭资源的结果
         *
         * 注意:关闭资源的时候要倒着关
         */
        public static boolean close(Connection conn,PreparedStatement pstmt,ResultSet rs){
            boolean flag = true;
            if (rs!=null){
                try {
                    rs.close();
                    rs = null;//让这个变量为null,gc就会自动对其进行回收
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                    flag = false;//关闭失败就将flag设置false
                }
            }
            if (pstmt!=null){
                try {
                    pstmt.close();
                    pstmt = null;
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                    flag = false;
                }
            }
            if (conn!=null){
                try {
                    conn.close();
                    conn = null;
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                    flag = false;
                }
            }
            return flag;//返回关闭结果
        }
    }
    

    9、编写字符编码过滤器

    //编写过滤器
    
    package com.thhh.filter;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    public class CharacterEncoding implements Filter {
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
    
            chain.doFilter(request,response);
        }
    
        public void destroy() {
    
        }
    }
    
    <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">
        <!--注册字符编码过滤器-->
        <filter>
            <filter-name>CharacterEncoding</filter-name>
            <filter-class>com.thhh.filter.CharacterEncoding</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>
    

    10、导入静态资源

    包括HTML、CSS、JS等,注意:这些资源都是网站的,所以我们应该将这些资源放在webapp下面
    


    通过以上的步骤,一个WEB项目的搭建工作就算基本完成了。

  • 注意:如果jsp不能调用css等静态资源,可参照JSP中引用CSS样式文件却无法显示的问题解决方案 - 孙晨c - 博客园

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值