SpringBoot中使用MySQL存用户信息, 日志的使用

news/2024/5/4 21:13:11/文章来源:https://blog.csdn.net/aiheshuicxy/article/details/128159456

SpringBoot中使用MySQL存用户信息

UserController类

package com.tedu.secboot.controller;
import com.tarena.mnmp.api.SendParam;
import com.tedu.secboot.entity.User;
import com.tedu.secboot.util.DBUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Random;@Controller
public class UserController {private static Logger logger = LoggerFactory.getLogger(UserController.class);//导入日志@RequestMapping("/regUser")    /*之前写法public void reg(HttpServletRequest request, HttpServletResponse response){System.out.println("开始处理注册");String username = request.getParameter("username");String password = request.getParameter("password");String nickname = request.getParameter("nickname");String ageStr = request.getParameter("age");int age = Integer.parseInt(ageStr);System.out.println(username+","+password+","+nickname+","+age);}*//*** SpringMVC框架会根据先通过User的无参构造器实例化User* 并利用User对象的属性名去request中获取同名参数并利用User对象上对应属性的set方法将值设置到该属性上。** 因此如果以自己定义的一个对象作为参数时,该对象的类要满足:* 1:属性名与浏览器传递过来的参数名一致* 2:类要有无参公开的构造器* 3:属性有set方法* 注:只要类设计符合JAVA_BEAN设计规范就可以。*/
//    public void reg(User user,HttpServletResponse response){
//        System.out.println(user);
//    }//方法上的参数名要与原request.getParameter()方法传入的字符串内容一致(相当于与表单输入框名字一致)public void reg(String username,String password,String nickname,int age,String phone, HttpServletResponse response){//日志logger.debug("开始处理注册");//debug级别一般记录的是用于跟踪程序执行流程logger.info(username+","+password+","+nickname+","+age+","+phone);//info通常记录程序所用到的数据,当我们获取用户信息时可通过info记录//必要验证工作if(username==null||username.isEmpty()||password==null||password.isEmpty()||nickname==null||nickname.isEmpty()||phone==null||phone.isEmpty()||!phone.matches("[0-9]{11}")){//warn用于记录警告内容。例如:正常注册前端验证后通常不会进到这个if里,进来这里说明用户绕过了前端验证,这里要警告程序员。logger.warn("注册信息验证错误:"+username+","+password+","+nickname+","+age+","+phone);//要求浏览器查看错误提示页面try {response.sendRedirect("/reg_info_error.html");} catch (IOException e) {e.printStackTrace();//error用于记录程序实际出现的错误。logger.error(e.getMessage(),e);}return;}//2/*将该注册用户插入到数据库userinfo表中。插入成功后,响应注册成功页面*/try (Connection conn = DBUtil.getConnection();){String sql1 = "SELECT username FROM userinfo WHERE username=?";PreparedStatement ps = conn.prepareStatement(sql1);ps.setString(1,username);ResultSet rs = ps.executeQuery();if(rs.next()){//结果集若存在记录,该用户已存在。response.sendRedirect("/have_user.html");return;}String sql2 = "INSERT INTO userinfo(username,password,nickname,age) " +"VALUES (?,?,?,?)";ps = conn.prepareStatement(sql2);ps.setString(1,username);ps.setString(2,password);ps.setString(3,nickname);ps.setInt(4,age);int sum = ps.executeUpdate();if(sum>0){response.sendRedirect("/reg_success.html");//发送短信String code = randomCode();//生成验证码System.out.println("验证码:"+code);//创建发送参数对象SendParam param = new SendParam.DefaultSendParam().defaultSendParam(code,phone);//借助Spring提供的RestTemplatenew RestTemplate().postForObject("http://124.71.224.210:8082/send/sms",param,String.class);//向消息中台发送一个HTTP请求}} catch (SQLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}private String randomCode(){Random random = new Random();StringBuilder builder = new StringBuilder(random.nextInt(1000000)+"");for(int i=builder.length();i<6;i++){//随机生成的验证码不足6位时前面补充若干个0达到6位builder.insert(0,"0");}return builder.toString();}}

User

package com.tedu.secboot.entity;/*** 该类的每一个实例用于表示一个注册用户信息*/
public class User {private int id;private String username;private String password;private String nickname;private int age;public User(){}public User(int id, String username, String password, String nickname, int age) {this.id = id;this.username = username;this.password = password;this.nickname = nickname;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", nickname='" + nickname + '\'' +", age=" + age +'}';}
}

日志的使用

Logger记录日志时常用的方法:

  • trace(): trace级别日志
    所有方法都会被记录到日志中
  • debug():debug级别日志
    debug级别一般记录的是用于跟踪程序执行流程
  • info():info级别日志
    info通常记录程序所用到的数据,当我们获取用户信息时可通过info记录
  • warn():warn级别日志
    warn用于记录警告内容。例如:正常注册前端验证后通常不会进到这个if里,进来这里说明用户绕过了前端验证,这里要警告程序员。
  • error():error级别日志
    error用于记录程序实际出现的错误。

日志级别:

 trace<debug<info<warn<error

例如:

  • 如果在application.properties下指定的日志级别为:trace
    那么上述所有方法都会被记录到日志中。

  • 如果在application.properties下指定的日志级别为:debug
    那么除了trace记录的不会保留,剩下的都会保留

具体实现

在这里插入图片描述
在这里插入图片描述

更多可以参考这篇文章: 跳转链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_229637.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计springboot在线图书销售系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2023年天津天狮学院专升本市场营销专业《管理学》考试大纲

2023天津天狮学院高职升本科市场营销专业入学考试《管理学》考试大纲一、考试性质 《管理学》专业课程考试是天津天狮学院市场营销专业高职升本入学考试的必考科目之一&#xff0c;其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《管理学》考试大纲的编…

LIO-SAM源码解析(四):imuPreintegration.cpp

1. 代码流程 2. 功能说明 这个cpp文件主要有两个类&#xff0c;一个叫IMUPreintegration类&#xff0c;一个叫TransformFusion类。 现在我们分开讲&#xff0c;先说IMUPreintegration类。 关于IMU原始数据&#xff0c;送入imuhandle中&#xff1a; 2.1. imuhandle imu原始…

[附源码]Python计算机毕业设计Django景区直通车服务系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

【RTS】杜金房大神FreeSwitch分享笔记

技术万变不离其宗不管如何实现原理都是一样的。杜金房大神 RTS 高可用 一台机器上俩fs,公用同一个ip用户连接的是一个ip,不知道切了fs。两台主备数据同步

Ajax学习:同源策略(与跨域相关)ajax默认遵循同源策略

同源策略&#xff1a;是浏览器的一种安全策略 同源意味着&#xff1a;协议、域名、端口号必须相同 违背同源便是跨域 当前网页的url和ajax请求的目标资源的url必须协议、域名、端口号必须相同 比如&#xff1a;当前网页&#xff1a;协议http 域名 a.com 端口号8000 目标请求…

[附源码]JAVA毕业设计计算机在线学习管理系统-(系统+LW)

[附源码]JAVA毕业设计计算机在线学习管理系统-&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

阿里云安装mysql、nginx、redis

目录 安装mysql 安装nginx ​编辑安装redis 先看一下系统基本信息 安装mysql rpm -qa | grep mariadb 卸载mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 wget -i http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm yum -y install my…

【D3.js】1.17-给 D3 元素添加标签

title: 【D3.js】1.17-给 D3 元素添加标签 date: 2022-12-02 14:35 tags: [JavaScript,CSS,HTML,D3.js,SVG] 为了让图更易懂&#xff0c;我们给每一个rect添加上标签。 一、学习目标 如何添加text元素&#xff1f; .append(“text”) 如何设置text元素的值&#xff1f; .attr(…

在Linux中部署运维监控系统WGCLOUD

在公网IP为x.x.x.x&#xff0c;安装CentOS8或Alibaba Cloud Linux 3.2104 LTS 64位系统的服务器&#xff08;服务端&#xff09;上&#xff0c;先安装jdk8&#xff0c;然后安装数据库mariadb-10.5&#xff0c;最后进行server安装。 在需要监控的安装CentOS8或Alibaba Cloud L…

[附源码]计算机毕业设计springboot疫情网课管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

并发编程详解: 十三个工具类, 十大设计模式, 从理论基础到案例实战

前言 对于 Java 程序员而言&#xff0c;熟练掌握并发编程是判断其卓越性的重要标准之一。因为并发编程是 Java 语言中最晦涩的知识点&#xff0c;它涉及操作系统&#xff0c;内存&#xff0c;CPU&#xff0c;编程语言等的基本功&#xff0c;并且还测试了程序员的内功。 那么如…

Ubtunu排查磁盘空间是否已满—并清理的方式

项目场景&#xff1a; 最近使用nodejs开发的后端项目部署到Ubtunu服务器后接口无法访问了&#xff0c;接口也调用不通&#xff0c;NGINX报502错误。 问题描述 使用远程连接工具传文件也是无法上传&#xff0c;提示找不到文件&#xff0c;SCP命令也无法上传。 scp传文件报错&…

【BOOST C++ 19 应用库】(6)序列数据封装和优化

一、说明 用于优化的包装函数&#xff1a;本节介绍包装函数以优化序列化过程。这些函数标记对象以允许 Boost.Serialization 应用某些优化技术。 二、示范和代码 示例 64.14。在没有包装函数的情况下序列化数组 #include <boost/archive/text_oarchive.hpp> #include &…

我的数学学习回忆录——一个数学爱好者的反思(二)

早点关注我&#xff0c;精彩不错过&#xff01;上回说到我在数学学习过程中走的种种弯路&#xff0c;相关内容请戳&#xff1a;我的数学学习回忆录——一个数学爱好者的反思&#xff08;一&#xff09;那在这样坎坷的旅程中&#xff0c;有没有给我带来意外惊喜&#xff0c;是不…

创建Hibernate项目与实现一个例子(idea版)

文章目录创建Hibernate项目一、前提准备二、创建项目三、实现一个例子创建Hibernate项目 一、前提准备 准备Hibernate开发必需的jar包。准备数据库的驱动jar包。准备junit.jar包。 这些包你可以去官网下载&#xff0c;也可以下载我已下载好的(本人目前使用的)。 https://pan…

Spring-Cloud-Zipkin-05

前言 1、链路追踪由来&#xff1a;在微服务框架中&#xff0c;一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果&#xff0c;每一个请求都会开成一条复杂的分布式服务调用链路&#xff0c;链路中的任何一环出现高延时或错误都会引导起…

【博客550】k8s乐观锁机制:控制并发请求与数据一致性

k8s乐观锁机制&#xff1a;控制并发请求与数据一致性 1、乐观锁与悲观锁 悲观锁 悲观并发控制&#xff08;又名“悲观锁”&#xff0c;Pessimistic Concurrency Control&#xff0c;缩写“PCC”&#xff09;是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修…

分布滞后线性和非线性模型(DLNM)分析空气污染(臭氧)、温度对死亡率时间序列数据的影响...

全文下载链接 http://tecdat.cn/?p23947 分布滞后非线性模型&#xff08;DLNM&#xff09;表示一个建模框架&#xff0c;可以灵活地描述在时间序列数据中显示潜在非线性和滞后影响的关联。该方法论基于交叉基的定义&#xff0c;交叉基是由两组基础函数的组合表示的二维函数空间…

【STM32学习(1)】详解STM32时钟体系

一、8051和stm32时钟体系结构区别 HSE&#xff1a;外部高速的振荡时钟&#xff08;8MHZ&#xff09; HSI&#xff1a;内部高速的振荡时钟&#xff08;16MHZ&#xff09; LSI&#xff1a;内部低速的振荡时钟&#xff08;32KHZ&#xff09; LSK&#xff1a;外部低速的振荡时钟&a…