JavaWeb_11_原生Web应用开发

本文详细介绍了JavaWeb原生应用的开发过程,包括JDBC事务处理、SMBMS项目搭建、用户管理、文件上传、邮件发送等核心环节。讲解了从登录注销、密码修改到分页实现的完整流程,还涉及到了Ajax验证、小黄鸭调试法以及后续学习路径的建议,如MyBatis、Spring和Hadoop。

JavaWeb_11_原生Web应用开发

尝试开发第一个web应用吧!点击跳转原生Web应用开发视频

在这里插入图片描述

留恋相似处,令我们停滞不前;接纳相异处,带我们改变未来。

超链接

idea运行java项目js中文乱码如何解决

配置tomcat启动参数-Dfile.encoding=UTF-8后,IDEA(Eclipse 类似)控制台乱码

intelij idea java.lang.ClassNotFoundException

P28 JDBC复习

什么是JDBC:Java连接数据库!

在这里插入图片描述

需要jar包的支持:

  • java.sql
  • mysql-connector-java-8.0.28.jar… 连接驱动(必须导入)

实验环境搭建

  • sql
CREATE TABLE users(
  id INT PRIMARY KEY,
  `name` VARCHAR(40),
  `password` VARCHAR(40),
  email VARCHAR(60),
  birthday DATE
);

INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(1,'牛魔瘦了','123456','nm@qq.com','2016-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(2,'八戒','123456','bj@qq.com','2016-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(3,'悟空','123456','wk@qq.com','2016-01-01');

SELECT * FROM users;
  • 导入数据库依赖
<!--mysql的驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>
  • IDEA中连接数据库

在这里插入图片描述

JDBC 固定步骤:

  1. 加载驱动
  2. 连接数据库,代表数据库
  3. 向数据库发送SQL的对象Statement,prepareStatement:CRUD
  4. 编写SQL(根据业务,不同的SQL)
  5. 执行SQL
  6. 关闭连接
package com.niumo.test;

import java.sql.*;

public class TestJdbc {
   
   
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
   
   
        //配置信息
        //useUnicode=true&characterEncoding=utf-8 解决中文乱码
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "nm123456";

        //1.加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        //2.连接数据库,代表数据库
        Connection connection = DriverManager.getConnection(url,username,password);

        //3.向数据库发送SQL的对象Statement,prepareStatement:CRUD
        Statement statement = connection.createStatement();
        
        //4.编写SQL
        String sql = "select * from users";

        //5.执行查询SQL,返回一个ResultSet:结果集
        ResultSet rs = statement.executeQuery(sql);

        while(rs.next()){
   
   
            System.out.println("id"+rs.getObject("id"));
            System.out.println("name"+rs.getObject("name"));
            System.out.println("password"+rs.getObject("password"));
            System.out.println("email"+rs.getObject("email"));
            System.out.println("birthday"+rs.getObject("birthday"));
            System.out.println("===================================");
        }

        //6.关闭连接,释放资源(一定要做)先开后关
        rs.close();
        statement.close();
        connection.close();
    }
}

预编译SQL

package com.niumo.test;

import java.sql.*;

public class TestJdbc2 {
   
   
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
   
   
        //配置信息
        //useUnicode=true&characterEncoding=utf-8 解决中文乱码
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "nm123456";

        //1.加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        //2.连接数据库,代表数据库
        Connection connection = DriverManager.getConnection(url,username,password);

        //3.编写SQL
        String sql = "insert into users (id, name, password, email, birthday) values (?,?,?,?,?);";

        //4.预编译
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        preparedStatement.setInt(1,4);//给第一个占位符? 的值赋值为1;
        preparedStatement.setString(2,"牛魔瘦了2");//给第二个占位符? 的值赋值为牛魔瘦了2;
        preparedStatement.setString(3,"123456");//给第四个占位符? 的值赋值为123456;
        preparedStatement.setString(4,"123456@qq.com");//给第五个占位符? 的值赋值为123456@qq.com;
        preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));//给第一个占位符? 的值赋值为1;

        //5.执行SQL
        int i = preparedStatement.executeUpdate();

        if(i>0){
   
   
            System.out.println("插入成功!");
        }

        //6.关闭连接,释放资源(一定要做)先开后关
        preparedStatement.close();
        connection.close();
    }
}

P29 JDBC事务

要么都成功,要么都失败!

ACID原则:保证数据的安全。

开启事务
事务提交  commit()
事务回滚  rollback()
关闭事务

转账:
A:1000
B:1000
    
A(900)  --100-->  B(1100)

Junit单元测试

依赖

<!--单元测试-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

简单使用

@Test注解只有在方法上有效,只要加了这个注解的方法,就可以直接运行!

@Test
public void test(){
   
   
    System.out.println("Hello");
}

在这里插入图片描述

失败的时候是红色:

在这里插入图片描述

搭建一个环境

CREATE TABLE account(
  id INT PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(40),
  money FLOAT
);

INSERT INTO account(`name`,money) VALUES('A',1000);
INSERT INTO account(`name`,money) VALUES('B',1000);
INSERT INTO account(`name`,money) VALUES('C',1000);
package com.niumo.test;

import org.junit.Test;

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

public class TestJdbc3 {
   
   

    @Test
    public void test(){
   
   
        //配置信息
        //useUnicode=true&characterEncoding=utf-8 解决中文乱码
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "nm123456";

        Connection connection = null;

        try{
   
   
            //1.加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.连接数据库,代表数据库
            connection = DriverManager.getConnection(url,username,password);

            //3.通知数据库开启事务,false 开启
            connection.setAutoCommit(false);

            String sql1 = "update account set money = money-100 where name = 'A';";
            connection.prepareStatement(sql1).executeUpdate();

            //制造错误
//            int i= 1/0;

            String sql2 = "update account set money = money+100 where name = 'B';";
            connection.prepareStatement(sql2).executeUpdate();

            connection.commit(); //以上两条SQL都执行成功了,就提交事务!
            System.out.println("success");

        } catch (Exception e) {
   
   
            //如果出现异常,就通知数据库回滚事务
            try {
   
   
                connection.rollback();
            } catch (SQLException e1) {
   
   
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
   
   
            try {
   
   
                connection.close();
            } catch (SQLException e) {
   
   
                e.printStackTrace();
            }
        }
    }
}

P30 smbms项目搭建

架构图

在这里插入图片描述

数据库

在这里插入图片描述

CREATE DATABASE `smbms`;

USE `smbms`;

DROP TABLE IF EXISTS `smbms_address`;

CREATE TABLE `smbms_address`(
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `contact` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人姓名',
  `addressDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '收货地址明细',
  `postCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '邮编',
  `tel` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人电话',
  `createBy` BIGINT(20) DEFAULT NULL COMMENT '创建者', 
  `creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
  `modifyBy` BIGINT(20) DEFAULT NULL COMMENT '修改者', 
  `modifyDate` DATETIME DEFAULT NULL COMMENT '修改时间',
  `userId` BIGINT(20) DEFAULT NULL COMMENT '用户ID',
  PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

DROP TABLE IF EXISTS `smbms_bill`;

CREATE TABLE `smbms_bill`(
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `billCode` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '账单编码',
  `productName` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品名称',
  `productDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品描述',
  `productUnit` VARCHAR(10) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品单位',
  `productCount` DECIMAL(20,2) DEFAULT NULL COMMENT '商品数量',
  `totalPrice` DECIMAL(20,2) DEFAULT NULL COMMENT '商品总额',
  `isPayment` INT(10) DEFAULT NULL COMMENT '是否支付(1:未支付 2:已支付)',
  `createBy` BIGINT(20) DEFAULT NULL COMMENT '创建者(userId)', 
  `creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
  `modifyBy` BIGINT(20) DEFAULT NULL COMMENT '更新者(userId)', 
  `modifyDate` DATETIME DEFAULT NULL COMMENT '更新时间',
  `providerID` BIGINT(20) DEFAULT NULL COMMENT '供应商ID',
  PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

DROP TABLE IF EXISTS `smbms_provider`;

CREATE TABLE `smbms_provider`(
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `proCode` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商编码',
  `proName` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商名称',
  `proDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商详细描述',
  `proContact` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商联系人',
  `proPhone` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系电话',
  `proAddress` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',
  `proFax` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '传真',
  `createBy` BIGINT(20) DEFAULT NULL COMMENT '创建者(userId)', 
  `creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
  `modifyDate` DATETIME DEFAULT NULL COMMENT '更新时间',
  `modifyBy` BIGINT(20) DEFAULT NULL COMMENT '更新者(userId)', 
  PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

DROP TABLE IF EXISTS `smbms_role`;

CREATE TABLE `smbms_role`(
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `roleCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色编码',
  `roleName` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色名称',
  `createBy` BIGINT(20) DEFAULT NULL COMMENT '创建者', 
  `creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
  `modifyBy` BIGINT(20) DEFAULT NULL COMMENT '修改者', 
  `modifyDate` DATETIME DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


INSERT INTO smbms_role(id, roleCode, roleName, createBy, creationDate)
VALUES(1,"SMBMS_ADMIN","系统管理员",1,"2022-03-10 00:00:00"),
      (2,"SMBMS_MANAGER","经理",1,"2022-03-10 00:00:00"),
      (3,"SMBMS_EMPLOYEE","普通员工",1,"2022-03-10 00:00:00");


DROP TABLE IS EXISTS `smbms_user`;

CREATE TABLE `smbms_user`(
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `userCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户编码',
  `userName` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户名称',
  `userPassword` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户密码',
  `gender` INT(10) DEFAULT NULL COMMENT '性别(1:女、2:男)',
  `birthday` DATE DEFAULT NULL COMMENT '出生日期',
  `phone` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '手机',
  `address` VARCHAR(30) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',
  `userRole` BIGINT(20) DEFAULT NULL COMMENT '用户角色(取字角色表-角色id)', 
  `createBy` BIGINT(20) DEFAULT NULL COMMENT '创建者(userId)', 
  `creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
  `modifyDate` DATETIME DEFAULT NULL COMMENT '更新时间',
  `modifyBy` BIGINT(20) DEFAULT NULL COMMENT '更新者(userId)', 
  PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

TRUNCATE TABLE `smbms_user`;

INSERT INTO `smbms_user` (`userCode`,`userName`,`userPassword`,`gender`,`birthday`,`phone`,`address`,`userRole`)
VALUES('admin','管理员','123456',2,'1989-03-08','18583688888','成都',1),
('niumo','牛魔瘦了','123456',2,'1989-03-08','18583688888','北京',1),
('bajie','八戒','123456',2,'1989-03-08','18583688888','河南',1),
('wukong','悟空','123456',2,'1989-03-08','18583688888','重庆',2),
('zs','张三','123456',2,'1989-03-08','18583688888','新疆',2),
('ls','李四','123456',2,'1989-03-08','18583688888','哈尔滨',2),
('ww','王五','123456',2,'1989-03-08','18583688888','河北',2),
('zl','赵六','123456',2,'1989-03-08','18583688888','湖北',2),
('tq','田七','123456',2,'1989-03-08','18583688888','湖南',2),
('mq','梦琪','123456',1,'1989-03-08','18583688888','苏州',2),
('ylk','云凌可','123456',1,'1989-03-08','18583688888','杭州',2),
('ymm','余梦茂','123456',1,'1989-03-08','18583688888','上海',3),
('wzy','文子隐','123456',1,'1989-03-08','18583688888','齐齐哈尔',3),
('lsw','黎舒旺','123456',1,'1989-03-08','18583688888','呼和浩特',3),
('yy','亦玉','123456',1,'1989-03-08','18583688888','西藏',3),
('sx','书雪','123456',1,'1989-03-08','18583688888','拉萨',3),
('bt','冰彤','123456',1,'1989-03-08','18583688888','香格里拉',3),
('dz','代真','123456',2,'1989-03-08','18583688888','大理',3),
('yueyao','乐瑶','123456',2,'1989-03-08','18583688888','南阳',3),
('yyc','云羿谆','123456',2,'1989-03-08','18583688888','西昌',3);

项目如何搭建?

考虑使用不使用Maven?依赖,Jar

项目搭建准备工作
  1. 搭建一个maven web项目

  2. 配置Tomcat

  3. 测试项目是否能够跑起来

  4. 导入项目中会遇到的jar包;

    servlet,jsp,mysql驱动,jstl,standard …

  5. 创建项目包结构

在这里插入图片描述

  1. 编写实体类;

    ORM映射:表-类映射

    package com.niumo.pojo;
    
    import java.util.Date;
    
    public class User {
         
         
        private Integer id; // 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 createBy; // 创建者
        private Date creationDate; // 创建时间
        private Integer modifyBy; // 更新者
        private Date modifyDate; // 更新时间
    
        private Integer age; // 年龄
        private String userRoleName; // 用户角色名称
    
        public Integer getId() {
         
         
            return id;
        }
    
        public void setId(Integer id) {
         
         
            this.id = id;
        }
    
        public String getUserCode() {
         
         
            return userCode;
        }
    
        public void setUserCode(String userCode) {
         
         
            this.userCode = userCode;
        }
    
        public String getUserName() {
         
         
            return userName;
        }
    
        public void setUserName(String userName) {
         
         
            this.userName = userName;
        }
    
        public String getUserPassword() {
         
         
            return userPassword;
        }
    
        public void setUserPassword(String userPassword) {
         
         
            this.userPassword = userPassword;
        }
    
        public Integer getGender() {
         
         
            return gender;
        }
    
        public void setGender(Integer gender) {
         
         
            this.gender = gender;
        }
    
        public Date getBirthday() {
         
         
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
         
         
            this.birthday = birthday;
        }
    
        public String getPhone() {
         
         
            return phone;
        }
    
        public void setPhone(String phone) {
         
         
            this.phone = phone;
        }
    
        public String getAddress() {
         
         
            return address;
        }
    
        public void setAddress(String address) {
         
         
            this.address = address;
        }
    
        public Integer getUserRole() {
         
         
            return userRole;
        }
    
        public void setUserRole(Integer userRole) {
         
         
            this.userRole = userRole;
        }
    
        public Integer getCreateBy() {
         
         
            return createBy;
        }
    
        public void setCreateBy(Integer createBy) {
         
         
            this.createBy = createBy;
        }
    
        public Date getCreationDate() {
         
         
            return creationDate;
        }
    
        public void setCreationDate(Date creationDate) {
         
         
            this.creationDate = creationDate;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值