SSM项目整合第一步 注册登陆实现
SSM项目整合第一步 注册:
项目目录:
一、数据库建表:
源码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 SET FOREIGN_KEY_CHECKS=0; 2 3 -- ---------------------------- 4 -- Table structure for t_user 5 -- ---------------------------- 6 DROP TABLE IF EXISTS `t_user`; 7 CREATE TABLE `t_user` ( 8 `user_id` int(11) NOT NULL AUTO_INCREMENT, 9 `user_name` varchar(32) NOT NULL, 10 `user_pass` varchar(36) NOT NULL, 11 `user_tel` int(11) DEFAULT NULL, 12 `user_real_name` varchar(32) DEFAULT NULL, 13 PRIMARY KEY (`user_id`) 14 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 15 16 -- ---------------------------- 17 -- Records of t_user 18 -- ---------------------------- 19 INSERT INTO `t_user` VALUES ('1', '123', '123456', null, null); 20 INSERT INTO `t_user` VALUES ('2', 'Lucky', 'admin', '123', 'admin');
二、建立实体类映射字段:
后端实体类字段映射:
已下配置会将字段uesr_id 自动转换为userId 将_i 转换为大写I
applicationContext.xml:
<!-- 加载mybatis-config配置文件,里面设置别名 --> <property name="configLocation" value="classpath:mybatis-config.xml"/>
mybatis-config.xml:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <settings> 7 <setting name="mapUnderscoreToCamelCase" value="true"/> 8 </settings> 9 </configuration>
前端实体类字段映射:
三、处理流程:
四、前端页面显示:
spring表头:
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
spring表单:
错误信息:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <!-- saved from url=(0049)http://localhost:8080/HouseRent/page/register.jsp --> 4 <HTML xmlns="http://www.w3.org/1999/xhtml"> 5 <HEAD><TITLE>布谷租房 - 用户注册</TITLE> 6 <META content="text/html; charset=utf-8" http-equiv=Content-Type> 7 <LINK 8 rel=stylesheet type=text/css href="../css/style.css"> 9 <META name=GENERATOR content="MSHTML 8.00.7601.17514"> 10 </HEAD> 11 <BODY> 12 <DIV id=header class=wrap> 13 <DIV id=logo><IMG src="../images/logo.gif"></DIV> 14 </DIV> 15 <DIV id=regLogin class=wrap> 16 <DIV class=dialog> 17 <DL class=clearfix> 18 <DT>新用户注册</DT> 19 <DD class=past>填写个人信息</DD> 20 </DL> 21 <DIV class=box> 22 <form:form action="/user/doreg" modelAttribute="userError" method="post"> 23 <DIV class=infos> 24 <TABLE class=field> 25 <TBODY> 26 <TR> 27 <TD class=field>用 户 名:</TD> 28 <TD><INPUT class=text type=text name=name><form:errors path="name"></form:errors></TD> 29 </TR> 30 <TR> 31 <TD class=field>密 码:</TD> 32 <TD><INPUT class=text type=password name=password><form:errors path="password"></form:errors></TD> 33 </TR> 34 <TR> 35 <TD class=field>确认密码:</TD> 36 <TD><INPUT class=text type=password name=repassword></TD> 37 </TR> 38 <TR> 39 <TD class=field>电 话:</TD> 40 <TD><INPUT class=text type=text name=telephone><form:errors path="telephone"></form:errors></TD> 41 </TR> 42 <TR> 43 <TD class=field>用户姓名:</TD> 44 <TD><INPUT class=text type=text name=username></TD> 45 </TR> 46 </TBODY> 47 </TABLE> 48 <DIV class=buttons> 49 <INPUT value=立即注册 type="submit"> 50 </DIV> 51 </DIV> 52 </form:form> 53 </DIV> 54 </DIV> 55 </DIV> 56 <DIV id=footer class=wrap> 57 <DL> 58 <DT>布谷租房 © 2010 布谷租房 京ICP证1000001号</DT> 59 <DD>关于我们 · 联系方式 · 意见反馈 · 帮助中心</DD> 60 </DL> 61 </DIV> 62 </BODY> 63 </HTML>
如果页面没有css样式 此时处理静态文件才会显示:
1 <!--处理静态文件 --> 2 <mvc:resources location="/scripts/" mapping="/scripts/**"/> 3 <mvc:resources location="/css/" mapping="/css/**"/> 4 <mvc:resources location="/images/" mapping="/images/**"/>
五、插入乱码解决:
WEB-INF/web.xml:
1 <!-- 设置编码为UTF-8 --> 2 <filter> 3 <description>字符集过滤器</description> 4 <filter-name>encodingFilter</filter-name> 5 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 6 <init-param> 7 <description>字符集编码</description> 8 <param-name>encoding</param-name> 9 <param-value>UTF-8</param-value> 10 </init-param> 11 </filter> 12 <filter-mapping> 13 <filter-name>encodingFilter</filter-name> 14 <url-pattern>/*</url-pattern> 15 </filter-mapping>
mysql.properties:
1 mysql.driverClassName=com.mysql.jdbc.Driver 2 mysql.url=jdbc:mysql://localhost:3310/house?useUnicode=true&characterEncoding=UTF-8 3 mysql.username=root 4 mysql.password=123456
登陆:
登陆需要验证账号是否存在(账号密码统一即可)
sql语句:
登陆逻辑:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.etc.controller; 2 3 import com.etc.Vo.UserVO; 4 import com.etc.entity.User; 5 import com.etc.servise.UserService; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Controller; 8 import org.springframework.ui.Model; 9 import org.springframework.validation.BindingResult; 10 import org.springframework.web.bind.annotation.ModelAttribute; 11 import org.springframework.web.bind.annotation.RequestMapping; 12 import org.springframework.web.bind.annotation.SessionAttributes; 13 14 import javax.validation.Valid; 15 16 @Controller 17 @RequestMapping("/user") 18 @SessionAttributes(value = {"user"}) 19 public class UserController { 20 21 @Autowired 22 private UserService userService; 23 24 @RequestMapping("/reg") 25 public String reg() { 26 return "regs"; 27 } 28 29 @RequestMapping("/doreg") 30 public String hello(@ModelAttribute("userError") @Valid UserVO userVO, BindingResult result){ 31 if(result.hasErrors()){ 32 return "regs"; 33 } 34 userService.reg(userVO); 35 return "login"; 36 } 37 38 @RequestMapping("/login") 39 public String login(UserVO userVO, Model model){ 40 User god=userService.login(userVO); 41 if(god!=null){ 42 model.addAttribute("user",god); 43 return "fabu"; 44 }else { 45 return "login"; 46 } 47 48 } 49 50 51 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.etc.converter; 2 3 import com.etc.Vo.UserVO; 4 import com.etc.entity.User; 5 6 public class UserConverter { 7 public static User convert(UserVO userVO) { 8 User user = new User(); 9 user.setUserName(userVO.getName()); 10 user.setUserPass(userVO.getPassword()); 11 user.setUserTel(userVO.getTelephone()); 12 user.setUserRealName(userVO.getUsername()); 13 return user; 14 } 15 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 3 <mapper namespace="com.etc.dao.UserDAO"> 4 <insert id="reg"> 5 INSERT INTO `t_user` ( 6 `user_name`, 7 `user_pass`, 8 `user_tel`, 9 `user_real_name` 10 ) 11 VALUES 12 (#{userName}, #{userPass}, #{userTel}, #{userRealName}); 13 </insert> 14 15 <select id="login" resultType="user"> 16 SELECT 17 * 18 FROM 19 t_user 20 WHERE 21 user_name = #{userName} 22 AND user_pass = #{userPass} 23 </select> 24 </mapper>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.etc.entity; 2 3 public class User { 4 private int userId; 5 private String userName; 6 private String userPass; 7 private String userTel; 8 private String userRealName; 9 10 public User() { 11 } 12 13 public User(int userId, String userName, String userPass, String userTel, String userRealName) { 14 this.userId = userId; 15 this.userName = userName; 16 this.userPass = userPass; 17 this.userTel = userTel; 18 this.userRealName = userRealName; 19 } 20 21 @Override 22 public String toString() { 23 return "User{" + 24 "userId=" + userId + 25 ", userName='" + userName + '\'' + 26 ", userPass='" + userPass + '\'' + 27 ", userTel='" + userTel + '\'' + 28 ", userRealName='" + userRealName + '\'' + 29 '}'; 30 } 31 32 public int getUserId() { 33 return userId; 34 } 35 36 public void setUserId(int userId) { 37 this.userId = userId; 38 } 39 40 public String getUserName() { 41 return userName; 42 } 43 44 public void setUserName(String userName) { 45 this.userName = userName; 46 } 47 48 public String getUserPass() { 49 return userPass; 50 } 51 52 public void setUserPass(String userPass) { 53 this.userPass = userPass; 54 } 55 56 public String getUserTel() { 57 return userTel; 58 } 59 60 public void setUserTel(String userTel) { 61 this.userTel = userTel; 62 } 63 64 public String getUserRealName() { 65 return userRealName; 66 } 67 68 public void setUserRealName(String userRealName) { 69 this.userRealName = userRealName; 70 } 71 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.etc.servise; 2 3 import com.etc.Vo.UserVO; 4 import com.etc.converter.UserConverter; 5 import com.etc.dao.UserDAO; 6 import com.etc.entity.User; 7 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.stereotype.Service; 9 10 @Service 11 public class UserService { 12 13 @Autowired 14 private UserDAO userDAO; 15 16 public void reg(UserVO userVO){ 17 User user= UserConverter.convert(userVO); 18 userDAO.reg(user); 19 } 20 21 public User login(UserVO userVO) { 22 User user= UserConverter.convert(userVO); 23 User god=userDAO.login(user); 24 return god; 25 } 26 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.etc.Vo; 2 3 import org.hibernate.validator.constraints.Length; 4 import org.hibernate.validator.constraints.NotEmpty; 5 6 import javax.validation.constraints.Pattern; 7 8 public class UserVO { 9 @NotEmpty(message = "用户名不能为空") 10 @Pattern(regexp = "^[a-zA-Z][a-zA-Z0-9]{3,15}$",message = "请输入3-15位账号,必须以字母开头") 11 private String name; 12 @NotEmpty(message = "用户名不能为空") 13 @Length(min = 8, max = 18, message = "密码必须在8到18位") 14 private String password; 15 16 private String repassword; 17 @Pattern(regexp = "^1\\d{10}$",message ="请输入正确的手机号" ) 18 private String telephone; 19 // @DateTimeFormat(pattern = "yyyy-MM-dd") 20 private String username; 21 22 @Override 23 public String toString() { 24 return "UserVO{" + 25 "name='" + name + '\'' + 26 ", password='" + password + '\'' + 27 ", repassword='" + repassword + '\'' + 28 ", telephone='" + telephone + '\'' + 29 ", username='" + username + '\'' + 30 '}'; 31 } 32 33 public UserVO() { 34 } 35 36 public UserVO(String name, String password, String repassword, String telephone, String username) { 37 this.name = name; 38 this.password = password; 39 this.repassword = repassword; 40 this.telephone = telephone; 41 this.username = username; 42 } 43 44 public String getName() { 45 return name; 46 } 47 48 public void setName(String name) { 49 this.name = name; 50 } 51 52 public String getPassword() { 53 return password; 54 } 55 56 public void setPassword(String password) { 57 this.password = password; 58 } 59 60 public String getRepassword() { 61 return repassword; 62 } 63 64 public void setRepassword(String repassword) { 65 this.repassword = repassword; 66 } 67 68 public String getTelephone() { 69 return telephone; 70 } 71 72 public void setTelephone(String telephone) { 73 this.telephone = telephone; 74 } 75 76 public String getUsername() { 77 return username; 78 } 79 80 public void setUsername(String username) { 81 this.username = username; 82 } 83 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <settings> 7 <setting name="mapUnderscoreToCamelCase" value="true"/> 8 </settings> 9 </configuration>
作者:刘认真
-------------------------------------------
新人只求记录学习生活!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!