一、更新用户密码功能的实现

1. 新建页面 profile.jsp,添加三个输入框和提交按钮:用户输入当前密码、输入新密码、再次确认密码和重置按钮、修改密码按钮;

2. 前台 js(JavaScript) 校验用户输入通过后触发 Ajax 请求至后台;

3. 后台(这里使用 Spring+SpringMVC+Mybatis 框架实现)在 UserMapper.xmlSQL 语句实现,接着是 UserModel.javaUserDAO.javaUserService.java 和 UserServiceImpl.java 的接口实现;

4. 后台控制器 UserAction.java 实现,请求路径(path)、请求参数(parameter)、返回值实现。

二、相关代码示例

1. profile.jsp (将其文件后缀改为 profile.html 并在 Chrome 谷歌浏览器中打开可参见 Demo)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%
String path = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>修改密码-系统后台管理</title> <!-- <jsp:include page="_css.jsp" /> --> <!-- <link rel="stylesheet" type="text/css" href="<%=path%>/view/assets/javascript/editor.css"/> --> <!-- 外部样式 -->
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.11.0/jquery.min.js"></script>
<!-- 内部样式 -->
<style type="text/css">
.errorMsg {
color: red;
} .error {
border: 1px solid red;
} .password-input {
width: 400px;
hight: 25px !importent;
margin-top: 5px;
} .btn {
vertical-align: middle;
text-align: center;
margin-top: 30px;
width: 50%;
}
</style>
</head>
<body>
<!-- <jsp:include page="_header.jsp" /> -->
<div>
<h3>修改用户密码</h3>
<div>
<label>当前密码</label></br>
<input type="password" class="password-input" id="current_password" name="current_password" placeholder="密码长度为6-16个字符,由英文大小写字母、数字、符号组成" >
&nbsp;<span id="currentMsg" class="errorMsg"></span>
</div>
<div style="margin-top: 15px;"> <!-- 内联样式 -->
<label>新密码</label></br>
<input type="password" class="password-input" id="new_password" name="new_password" placeholder="新密码不能当前密码相同" >
&nbsp;<span id="newMsg" class="errorMsg"></span>
</div>
<div style="margin-top: 15px;">
<label>确认密码</label></br>
<input type="password" class="password-input" id="confirmation_password" name="confirmation_password" placeholder="确认密码与新密码保持一致" >
&nbsp;<span id="confirmMsg" class="errorMsg"></span>
</div>
<div class="btn">
<input type="reset" value="重置" onclick="clearInput();"></i> &nbsp;
<input type="button" value="修改密码" onclick="checkInput();"></i>
</div>
</div> <!-- <jsp:include page="_footer.jsp" /> -->
<!-- <jsp:include page="_js.jsp">
<jsp:param value="true" name="enableScript" />
</jsp:include> --> <!-- <script type="text/javascript" src="<%=path%>/view/assets/javascript/editor.js"></script> -->
<script type="text/javascript">
var flag = true; function clearInput() {
$("#current_password").val("");
$("#new_password").val("");
$("#confirmation_password").val("");
clearErrorMsg();
} function clearErrorMsg() {
$("#currentMsg").html("");
$("#newMsg").html("");
$("#confirmMsg").html("");
$("#current_password").removeClass("error");
$("#new_password").removeClass("error");
$("#confirmation_password").removeClass("error");
} function checkInput() {
clearErrorMsg();
var currentPassword = $("#current_password").val();
var newPassword = $("#new_password").val();
var confirmPassword = $("#confirmation_password").val(); checkPwdLength(currentPassword, "currentMsg", "current_password");
checkPwdLength(newPassword, "newMsg", "new_password");
checkPwdLength(confirmPassword, "confirmMsg", "confirmation_password"); if (flag) {
$.post("<%=path%>/user/updatePassword", {
currentPassword : currentPassword,
newPassword : newPassword
}, function(data) {
if ("success" == data) {
alert("密码修改成功,请使用新密码重新登陆!");
window.location.href="<%=path%>/login";
} else {
$("#currentMsg").html(data);
$("#current_Password").addClass("error");
}
});
}
} function checkPwdLength(obj, msg, id) {
if ("" == obj) {
$("#" + msg).html("该项不能为空!");
$("#" + id).addClass("error");
flag = false;
} else if (6 > obj.length || obj.length > 16) {
$("#" + msg).html("密码长度为6-16个字符!");
$("#" + id).addClass("error");
flag = false;
} else if($("#current_password").val() == $("#new_password").val()) {
$("#newMsg").html("新密码不能当前密码相同!");
flag = false;
} else if ($("#new_password").val() != $("#confirmation_password").val()) {
$("#confirmMsg").html("两次输入的密码不一致!");
flag = false;
} else {
flag = true;
}
}
</script>
</body>
</html>

2. UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cqupt.dao.UserDAO"> <resultMap id="userResultMap" type="com.cqupt.model.UserModel">
<result property="id" column="id" jdbcType="INTEGER" javaType="int" />
<result property="account" column="account" jdbcType="VARCHAR" javaType="String" />
<result property="gender" column="gender" jdbcType="BIT" javaType="boolean" />
<result property="password" column="password" jdbcType="VARCHAR" javaType="String" />
<result property="phone" column="phone" jdbcType="VARCHAR" javaType="String" />
<result property="qq" column="qq" jdbcType="VARCHAR" javaType="String" />
<result property="mail" column="mail" jdbcType="VARCHAR" javaType="String" />
<result property="type" column="type" jdbcType="INTEGER" javaType="int" />
<result property="regTime" column="reg_time" jdbcType="TIMESTAMP" javaType="java.sql.Timestamp" />
</resultMap> <insert id="addUser" parameterType="com.cqupt.model.UserModel">
INSERT INTO web_user_info (account, gender, password, phone, qq, mail, type, reg_time)
VALUES(#{account }, #{gender }, #{password }, #{ phone } #{qq }, #{mail }, #{type }, now())
</insert> <select id="findUserById" parameterType="int" resultMap="userResultMap">
SELECT * FROM web_user_info WHERE id = #{userId }
</select> <select id="findByAccount" parameterType="String" resultMap="userResultMap">
SELECT * FROM web_user_info WHERE account = #{account }
</select> <!-- 查询所有用户信息 -->
<select id="findAllUsers" resultMap="userResultMap">
SELECT * FROM web_user_info
</select> <update id="updatePassword">
UPDATE web_user_info SET password= #{newPassword } WHERE id = #{userId}
</update> </mapper>

3. UserDAO.java

public interface UserDAO
{ /**
* 通过用户ID修改密码
* @param userId user id
* @param newPassword new password
* @return 受影响的条数
*/
int updatePassword(@Param("userId") int userId, @Param("newPassword") String newPassword); }

4. UserService.java

public interface UserService
{ /**
* 通过ID修改用户密码
* @param userId user id
* @param newPassword new password
* @return 受影响的数据行数
*/
int updatePassword(int userId, String newPassword); }

5. UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService
{ @Autowired
private UserDAO userDAO; /**
* {@inheritDoc }
*/
@Override
public int updatePassword(int userId, String newPassword)
{
return userDAO.updatePassword(userId, newPassword);
} }

6. UserAction.java

@Controller
@RequestMapping("user")
public class UserAction extends WebCommonAction
{ @Autowired
private UserService userService; /**
* 通过用户ID修改密码
* @param req HttpServletRequest
* @param newPassword 新密码
* @return ModelAndView
*/
@ResponseBody
@RequestMapping(value = "updatePassword", method = RequestMethod.POST)
public Object updatePassword(HttpServletRequest req, String currentPassword, String newPassword)
{
UserModel currentUserModel = getCurrentUser(req);
if (!currentUserModel.getPassword().equals(StringUtil.encodePwd(currentPassword)))
{
return "当前密码输入不正确";
}
else
{
userService.updatePassword(getCurrentUserId(req), StringUtil.encodePwd(newPassword));
HttpSession session = req.getSession();
session.setAttribute(Constant.WEB_CURRENT_USER, null);
session.invalidate();
return "success";
}
} }

SSM框架应用的更多相关文章

  1. 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程

    本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...

  2. java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化

    一.ssm框架搭建 1.1创建项目 新建项目后规划好各层的包. 1.2导入包 搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0 1.3整合spring与my ...

  3. JavaEE学习文章汇总-ssm框架

    Spring-SpringMVC-Mybatis 1:Maven创建webapp项目 Maven 下的spring框架(一创建项目) 2:mybatis3 入门教程 mybatis实战教程(mybat ...

  4. SSM框架总结(1)

    ----------------------20170106-------------------------------------- 1.mabatis.genertor中自动生成文件,需要在ge ...

  5. 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架

    自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...

  6. SSM框架整合首只拦路虎——Eclipse新建Maven Project界面select an archetype 空白

    首先给大家说,本篇博客没有技术价值,纯属个人学习总结,权当给大家添加一乐.事件如有雷同,纯属巧合,莫怪! 前一段时间一直在看<淘淘商城>这个教程,里面讲的是SSM框架的一个电商项目.这不是 ...

  7. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  8. SSM框架的整合思路&功能实现

    这是我第一篇博客,关于SSM框架的整合思路以及简单功能实现. 首先,最近刚刚学习Spring+SpringMVC+Mybatis,在开发时遇到形形色色的问题,周遭人也为我提供了一些思路,我会一点点整理 ...

  9. [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World

    来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral ...

  10. Maven+SSM框架实现简单的增删改查

    Spring介绍: spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情.然而, Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何Ja ...

随机推荐

  1. 使用WebSocket帮助应用程序群集节点间通信

    [序列化message传输方式]两种方式都是转成二进制. 1.使用Java序列化器,ObjectXXXputStream 2.使用ByteBuffer.wrap(bytes). 在一个标准群集场景中, ...

  2. 【51nod 1785】数据流中的算法

    Description 51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠标轨迹等特征计算用户对于网站的满意程度.   现有的统计工具只能统计某一个窗口中,用户的满意程 ...

  3. Microsoft Windows .Reg File Dialog Box Message Spoofing 0day

    Microsoft Windows .Reg文件对话框消息欺骗 0day 概述 扩展名为.reg的文件是Windows注册表中使用的注册文件.这些文件可以包含hives.密钥和值..reg文件可以在文 ...

  4. luogu P3297 [SDOI2013]逃考

    传送门 gugugu 首先每个人管理的区域是一个多边形,并且整个矩形是被这样的多边形填满的.现在的问题是求一条经过多边形最少的路径到达边界,这个可以最短路. 现在的问题是建图,显然我们应该给相邻的多边 ...

  5. PHP载入GIF图像造成服务器宕机(CVE-2018-5711)的漏洞复现

    参考链接: http://www.freebuf.com/vuls/161262.html 今日看新漏洞发现一个UC编辑部的标题,CVE-2018-5711:一张GIF图片就能让服务器宕机的PHP漏洞 ...

  6. javascript/ajax和php 进阶 之 项目实战

    1,使用异步思想做一个下拉列表,能够选择和展示数据库中对应的信息. 1,事件知识:所有的事件可参照:https://www.jb51.net/html5/459444.html 2,js中this补充 ...

  7. 已安装nginx支持https配置 the "ssl" parameter requires ngx_http_ssl_module

    原文链接:https://blog.seosiwei.com/detail/28 nginx已安装,ssl模块未安装的解决方法: 如果需要在linux中编译自己的nginx服务器,请参照:https: ...

  8. hadoop-1.2.1集群搭建

    继续上一篇:http://www.cnblogs.com/CoolJayson/p/7430654.html 首先需要安装上台虚拟机, 分别为: master, salve1, slave2 1.复制 ...

  9. 阿里云ECS CentOS 7 安装图形化桌面

    CentOS 7 系统下,本文以 MATE 桌面环境安装进行安装配置说明: 1 . 安装 X Window System. yum groups install "X Window Syst ...

  10. Linux系统启动那些事—基于Linux 3.10内核【转】

    转自:https://blog.csdn.net/shichaog/article/details/40218763 Linux系统启动那些事—基于Linux 3.10内核 csdn 我的空间的下载地 ...