基于SSM+layui实现用户注册新增功能

2023-11-07

注册新增原理:判断用户名与数据表中信息是否相同,相同则返回用户新增失败,反之新增成功

注册用户密码使用md5加密方式存储到数据库

一、 实现效果

用户新增界面:

在这里插入图片描述

二、数据表—user

在这里插入图片描述

三、代码实现

1、bean层—UserInfo

@AllArgsConstructor
@NoArgsConstructor
@Data
public class UserInfo implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -6943242013517012358L;
	private Integer id;
	private String userId;
	private String userName;
	private String password;
	@JsonFormat(timezone = "GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
	private Date registerTime;
	private Boolean state;
}

2、mapper层—UserInfoMapper.java UserInfoMapper.xml

UserInfoMapper.java
public interface UserInfoMapper {
	public void insertUserInfo(UserInfo userInfo);
}
UserInfoMapper.xml
<insert id="insertUserInfo" parameterType="UserInfo">
		insert into user (user_id,user_name,password,register_time,state)
		values(#{userId},#{userName},#{password},#{registerTime},#{state})
</insert>

3、service层—UserInfoService.java UserInfoServiceImpl.java

UserInfoService.java
public interface UserInfoService {
    public void insertUserInfo(UserInfo userInfo);
    public String register(UserInfo userInfo);
}
UserInfoServiceImpl.java
@Transactional
@Service
public class UserInfoServiceImpl implements UserInfoService{
	
	@Autowired
	private UserInfoMapper userInfoMapper;
    
    @Override
	public void insertUserInfo(UserInfo userInfo) {
		userInfoMapper.insertUserInfo(userInfo);
	}
    
    @Override
	public String register(UserInfo userInfo) {
		UserInfo exitUser = userInfoMapper.findUserInfoByName(userInfo.getUserName());
		if (exitUser==null) {
			userInfoMapper.insertUserInfo(userInfo);
			return "新增成功";
		}else {
			return "新增错误:用户已存在";
		}
	}
}

4、controller层—UserInfoController.java

@Controller
public class UserInfoController {
    
    @Autowired
	private UserInfoService userInfoService;
    
    @RequestMapping("/register")
	public String register(Integer id,String userId,String userName,String password,
			Date registerTime,Boolean state,HttpSession session) {
		registerTime = new Date();
		UserInfo userInfo = new UserInfo(id,userId,userName,EncryptUtil.md5Crypt(password),registerTime,state);
		String msg = userInfoService.register(userInfo);
		if (msg.contains("成功")) {
			session.setAttribute("msg", msg);
			return "list_user";
		}else {
			return "register";
		}
	}
}

5、md5加密类—EncryptUtil.java

public class EncryptUtil {
	public final static String md5Crypt(String inputString) {
		char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
		try {
			byte[] input = inputString.getBytes();

			// 获得MD5摘要算法的 MessageDigest 对象
			MessageDigest md5Instance = MessageDigest.getInstance("MD5");

			// 使用指定的字节更新摘要
			md5Instance.update(input);

			// 获得密文
			byte[] md5 = md5Instance.digest();

			// 把密文转换成十六进制的字符串形式
			int j = md5.length;
			char str[] = new char[j * 2];
			int k = 0;
			for (int i = 0; i < j; i++) {
				byte byte0 = md5[i];
				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
				str[k++] = hexDigits[byte0 & 0xf];
			}
			return new String(str);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public final static String jm(String instr) {
		char[] charArray = instr.toCharArray();
		for(int i =0;i<charArray.length;i++) {
			charArray[i] = (char)(charArray[i] ^ 't');
		}
		String k = new String(charArray);
		return k;
	}

}

6、注册界面—register.jsp

<div style="padding: 30px;">
	<form class="layui-form layui-form-pane" action="register">
		<div class="layui-form-item">
			<label class="layui-form-label">用户ID</label>
			<div class="layui-input-inline">
				<input type="text" name="userId" lay-verify="required"
					placeholder="请输入用户ID" autocomplete="off" class="layui-input">
			</div>
		</div>

		<div class="layui-form-item">
			<label class="layui-form-label">用户名</label>
			<div class="layui-input-inline">
				<input type="text" name="userName" lay-verify="userName"
					placeholder="请输入用户名" autocomplete="off" class="layui-input">
			</div>
		</div>

		<div class="layui-form-item">
			<label class="layui-form-label">密码</label>
			<div class="layui-input-inline">
				<input type="password" name="password" lay-verify="pass"
					placeholder="请输入密码" autocomplete="off" class="layui-input">
			</div>
			<div class="layui-form-mid layui-word-aux">请务必填写密码</div>
		</div>

		<div class="layui-form-item">
			<label class="layui-form-label">确认密码</label>
			<div class="layui-input-inline">
				<input type="password" name="repassword" placeholder="请再次输入密码"
					autocomplete="off" class="layui-input">
			</div>
			<div class="layui-form-mid layui-word-aux">请务必填写密码</div>
		</div>

		<div class="layui-form-item" pane="" style="width: 304px">
			<label class="layui-form-label">状态</label>
			<div class="layui-input-block">
				<input type="radio" name="state" value="true" title="管理员" checked="">
				<input type="radio" name="state" value="false" title="用户">
			</div>
		</div>

		<div class="layui-form-item">
			<button class="layui-btn" lay-submit="" lay-filter="save">保存</button>
		</div>
	</form>
</div>

	<script src="layui/layui.all.js" charset="utf-8"></script>
	<!-- 注意:如果你直接复制所有代码到本地,上述 JS 路径需要改成你本地的 -->
	<script>
		layui.use(
						[ 'form', 'layedit', 'laydate' ],
						function() {
							var form = layui.form, layer = layui.layer, layedit = layui.layedit, laydate = layui.laydate;

							//日期
							laydate.render({
								elem : '#date'
							});
							laydate.render({
								elem : '#date1'
							});

							//创建一个编辑器
							var editIndex = layedit.build('LAY_demo_editor');

							//自定义验证规则
							form.verify({
								userName : function(value) {
									if (value.length < 4) {
										return '登录名至少得4个字符啊';
									}
								},
								pass : [ /^[\S]{4,12}$/, '密码必须4到12位,且不能出现空格' ],
								content : function(value) {
									layedit.sync(editIndex);
								}
							});

							//监听指定开关
							form.on('switch(switchTest)', function(data) {
								layer.msg('开关checked:'
										+ (this.checked ? 'true' : 'false'), {
									offset : '6px'
								});
								layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF',
										data.othis)
							});

							//监听提交
							form.on('submit(save)', function(data) {
								if(data.field.password!=data.field.repassword){
									layer.alert('两次输入密码不一致'), {
										title : '警告'
									}
									return false;
								}else{
									window.parent.location.reload();
									return true;
								}						
							});

							//表单取值
							layui.$('#LAY-component-form-getval').on('click',
									function() {
										var data = form.val('example');
										alert(JSON.stringify(data));
									});
						});
</script>

7、使新增界面在list_user.jsp界面弹窗显示

layer.open({
			type:2,
			title:'新增用户',
			area:['500px','400px'],
			shade:0.3,
			maxmin:true,
			offset:'auto',
			anim:2,
			content:'register.jsp'
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于SSM+layui实现用户注册新增功能 的相关文章

  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐