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记录的不会保留,剩下的都会保留
具体实现
更多可以参考这篇文章: 跳转链接