一、创建项目,编写JavaBean

public class UserBean {private String name;            //定义用户名private String password;       //定义密码private String email;           //定义邮箱
//补充getter setter方法
public class RegisterFormBean {private String name;            //定义用户名private String password;       //定义密码private String password2;      //定义确认密码private String email;           //定义邮箱// 定义成员变量errors,用于封装表单验证时的错误信息private Map<String, String> errors = new HashMap<String, String>();public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPassword2() {return password2;}public void setPassword2(String password2) {this.password2 = password2;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public boolean validate() {boolean flag = true;if (name == null || name.trim().equals("")) {errors.put("name", "请输入姓名.");flag = false;}if (password == null || password.trim().equals("")) {errors.put("password", "请输入密码.");flag = false;} else if (password.length() > 12 || password.length() < 6) {errors.put("password", "请输入6-12个字符.");flag = false;}if (password != null && !password.equals(password2)) {errors.put("password2", "两次输入的密码不匹配.");flag = false;}// 对email格式的校验采用了正则表达式if (email == null || email.trim().equals("")) {errors.put("email", "请输入邮箱.");flag = false;} else if (!email.matches("[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+")) {errors.put("email", "邮箱格式错误.");flag = false;}return flag;}// 向Map集合errors中添加错误信息public void setErrorMsg(String err, String errMsg) {if ((err != null) && (errMsg != null)) {errors.put(err, errMsg);}}// 获取errors集合public Map<String, String> getErrors() {return errors;}}

二、创建工具类

public class DBUtil {
private static DBUtil instance = new DBUtil();   //
// 定义users集合,用于模拟数据库
private HashMap<String,UserBean> users = new HashMap<String,UserBean>();private DBUtil() {// 向数据库(users)中存入两条数据UserBean user1 = new UserBean();user1.setName("Jack");user1.setPassword("12345678");user1.setEmail("jack@it315.org");users.put("Jack ",user1);UserBean user2 = new UserBean();user2.setName("Rose");user2.setPassword("abcdefg");user2.setEmail("rose@it315.org");users.put("Rose ",user2);         }public static DBUtil getInstance() {return instance;}// 获取数据库(users)中的数据public UserBean getUser(String userName) {UserBean user = (UserBean) users.get(userName);return user;}// 向数据库(users)插入数据public boolean insertUser(UserBean user) {if(user == null) {return false;}String userName = user.getName();if(users.get(userName) != null) {return false;}users.put(userName,user);return true;}
}

三、创建Servlet

public class ControllerServlet extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {response.setHeader("Content-type", "text/html;charset=UTF-8");  response.setCharacterEncoding("UTF-8");request.setCharacterEncoding("UTF-8");// 获取用户注册时表单提交的参数信息String name = request.getParameter("name");String password=request.getParameter("password");String password2=request.getParameter("password2");String email=request.getParameter("email");// 将获取的参数封装到注册表单相关的RegisterFormBean类中RegisterFormBean formBean = new RegisterFormBean();formBean.setName(name);formBean.setPassword(password); formBean.setPassword2(password2);formBean.setEmail(email);// 验证参数填写是否符合要求,如果不符合,转发到register.jsp重新填写if(!formBean.validate()){request.setAttribute("formBean", formBean);request.getRequestDispatcher("/register.jsp").forward(request, response);return;}// 参数填写符合要求,则将数据封装到UserBean类中UserBean userBean = new UserBean();userBean.setName(name);userBean.setPassword(password);userBean.setEmail(email);// 调用DBUtil类中的insertUser()方法执行添加操作,并返回一个boolean类型的标志boolean b = DBUtil.getInstance().insertUser(userBean);// 如果返回为false,表示注册的用户已存在,则重定向到register.jsp重新填写if(!b){request.setAttribute("DBMes", "你注册的用户已存在");request.setAttribute("formBean", formBean);request.getRequestDispatcher("/register.jsp").forward(request, response);return;}response.getWriter().print("恭喜你注册成功,3秒钟自动跳转");// 将成功注册的用户信息添加到Session中request.getSession().setAttribute("userBean", userBean);// 注册成功后,3秒跳转到登录成功页面loginSuccess.jspresponse.setHeader("refresh", "3;url=loginSuccess.jsp");}
}

四、创建JSP页面

register.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html><head><title>用户注册</title><style type="text/css">h3 {margin-left: 100px;}#outer {width: 750px;}span {color: #ff0000}div {height:20px;margin-bottom: 10px;}.ch {width: 80px;text-align: right;float: left;}.ip {width: 500px;float: left}.ip>input {margin-right: 20px}#bt {margin-left: 50px;}#bt>input {margin-right: 30px;}</style>
</head>
<body><form action="ControllerServlet" method="post"><h3>用户注册</h3><div id="outer"><div><div class="ch">姓名:</div><div class="ip"><input type="text" name="name" value="${formBean.name }" /><span>${formBean.errors.name}${DBMes}</span></div></div><div><div class="ch">密码:</div><div class="ip"><input type="password" name="password" /><span>${formBean.errors.password}</span></div></div><div><div class="ch">确认密码:</div><div class="ip"><input type="password" name="password2" /><span>${formBean.errors.password2}</span></div></div><div><div class="ch">邮箱:</div><div class="ip"><input type="text" name="email" value="${formBean.email }" /><span>${formBean.errors.email}</span></div></div><div id="bt"><input type="reset" value="重置 " /><input type="submit" value="注册" /></div></div></form>
</body>
</html>

loginSuccess.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html >
<html>
<head>
<title>login successfully</title><style type="text/css">#main {width: 500px;height: auto;}#main div {width: 200px;height: auto;}ul {padding-top: 1px;padding-left: 1px;list-style: none;}</style>
</head>
<body><%if (session.getAttribute("userBean") == null) {%><jsp:forward page="register.jsp" /><%return;}%><div id="main"><div id="welcome">恭喜你,登录成功</div><hr /><div>您的信息</div><div><ul><li>您的姓名:${userBean.name }</li><li>您的邮箱:${userBean.email }</li></ul></div></div>
</body>
</html>

五、运行程序,测试结果

http://localhost:8080/chapter11/register.jsp

案例:按照JSP Model2思想实现用户注册功能相关推荐

  1. 【MVC模式】Front前端控制器模式、Jsp Model1 和 Jsp Model2、MVC思想

    Front前端控制器模式 Front前端控制器模式,是一种JavaEE模式:用一个servlet控制主入口,然后根据不同的情况,将请求分发给相应的处理程序. Jsp Model1 和 Jsp Mode ...

  2. 编程小白的计算机毕业设计指导开发教程-JSP+Servlet实现注册登陆功能

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  3. 1.4_23 Axure RP 9 for mac 高保真原型图 - 案例22【中继器 - 入门3】功能优化

    相关链接 目录 Axure中文学习网 AxureShop AxureShop-QA 案例目标  1. 了解 回车提交 的实现方式  2. 了解 获取焦点 功能的使用(鼠标光标)  3. 了解 点击弹窗 ...

  4. JSP脚本实现登录验证功能

    JSP脚本实现登录验证功能 登录 点击退出 登录页面login <%@ page contentType="text/html;charset=UTF-8" language ...

  5. 2、编写单元测试用例,对用户注册功能的DAO层进行测试。(注意:测试用例应考虑成功和失败的情况)...

    我先对我做的测试进行说明: 对用户注册功能的DAO层进行测试,其实就是对UserDao中的saveUser(User user) 方法进行测试.我在我的测试方法中同时也用到了UserDao中的exit ...

  6. Cookie和Session-学习笔记02【Cookie案例、JSP改造Cookie案例】

    Java后端 学习路线 笔记汇总表[黑马程序员] Cookie和Session-学习笔记01[Cookie_快速入门.Cookie_细节] Cookie和Session-学习笔记02[Cookie案例 ...

  7. python写appium_案例分享,Python +appium做登录功能

    原标题:案例分享,Python +appium做登录功能 Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,同时又是一个跨平台的工具:它允许测试人员在不同 ...

  8. java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能

    jsp 和 javaBean 实现计算器功能 try { calculator.calculate(); } catch (Exception e) { out.write(e.getMessage( ...

  9. 实现用户注册功能---文件保存信息,如果用户名存在就死循环继续

    # 一.实现用户注册功能# 思路:# 用户输入用户名.密码# 将用户输入的内容按照固定的格式,比如:egon:123,存入文件# 可以往一个文件中重复注册新的用户名和密码 with open(r'Te ...

最新文章

  1. CSS3颜色不透明度如何设置
  2. 日志多租户架构下的Loki方案
  3. arduino红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法
  4. 纯c语言贪吃蛇,纯C语言贪吃蛇 求助
  5. 【pyqt5学习】——tablewidget控件学习
  6. Google Maps API 进级: GoogleMaps常用事件及应用思路1
  7. anaconda查看删除增加镜像源
  8. 深挖基于 CSS 的变换与动画技术
  9. 银联公钥加密java实现_【技术贴】银联加密算法 (收藏版)
  10. php小插件,PHPStrom中一些我收藏的小插件
  11. Java-Scala编程规范超精简
  12. 第三篇——哈希值校验工具
  13. 中国银联Apple Pay 支付集成
  14. Python:实现simpson rule辛普森法则算法(附完整源码)
  15. dfs序+线段树--青出于蓝胜于蓝
  16. “不一样的六一儿童节”——暨线上公益跳绳颁奖活动圆满结束
  17. 沃通CA证书支持多所高校招投标文件电子签名
  18. OpenGL 纹理基础与索引
  19. html图片缩小属性,css怎么缩小图片?
  20. 不定积分——1/(1+x^4)的不定积分

热门文章

  1. tcpdump工具编译记录
  2. alphac测试和bata测试区别_绝缘电阻测试仪和接地电阻测试仪的测试方式区别
  3. 【ElasticSearch】Es 源码之 MetadataUpgrader 源码解读
  4. json与对象的互相转换
  5. Kafka : 报错 KafkaController NoSuchElementException : : key not found : [xxx]
  6. 95-136-042-源码-Operator-AbstractUdfStreamOperator
  7. 95-220-020-源码-Idle-Flink中Idle停滞流机制
  8. Mac下安装Flink的local模式(flink-1.5.2)
  9. 浅谈 Mybatis中的 ${ } 和 #{ }的区别
  10. Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(3)