JSP Model2案例

一、案例分析

JSP Model2 模型是一种 MVC 模式。由于 MVC 模式中的功能模块相互独立,并且使用该模式的软件具有极高飞可维护性、可拓展性和可复用性,因此,使用 MVC 开发模式的 Web 应用越来越受欢迎。接下来,按照 JSP Model2 的模型思想编写一个用户注册的程序,该程序中包含

两个 JSP 页面 register.jsp 和 logSuccess.jsp

一个 Servlet 类 ControllerServlet.java

两个 JavaBean 类 RegisterFormBean.java 和 Userbean.java

一个访问数据库的辅助类 DbUtil.java

关于各个程序组建的功能和相互之间工作关系如下所示:

(1) UserBean 是代表用户信息的 JavaBean,ControllerServlet 根据用户注册信息创建出一个 UserBean 对象中提取用户信息进行显示。

(2) RegisterFormBean 是封装注册表单信息的的 JavaBean,其内部定义的方法用于对从 ControllerServlet 中获取到的注册表单信息中的各个属性(也就是注册表单内的各个字段中所填写的数据)进行校验。

(3) DbUtil 是用于访问数据库的辅助类,它相当于一个 DAO (数据访问对象),在 DbUtil 类中封装一个 HashMap 对象来模拟数据库,HashMap 对象中的每一个元素即一个 UserBean 对象。

(4) ControllerServlet 是控制器,它负责处理用户的注册请求。如果注册成功,就会跳到 loginSuccess.jsp 页面;如果注册失败,重新跳回到 register.jsp 页面并显示错误信息。

(5) register.jsp 是显示用户注册表单的页面,它将注册请求的提交给 ControllerServlet 程序处理。

(6) loginSuccess.jsp 是用户登录成功后进入的页面,新注册成功的用户自动完成登录,直接进入 loginSuccess.jsp 页面

二、案例实现

1、编写 UserBean 类

  1. package com.liuyanzhao;
  2. /*
  3. * @author LiuYanzhao
  4. */
  5. public class UserBean {
  6. private String name;
  7. private String password;
  8. private String email;
  9. public String getName() {
  10. return name;
  11. }
  12. public void setName(String name) {
  13. this.name = name;
  14. }
  15. public String getPassword() {
  16. return password;
  17. }
  18. public void setPassword(String password) {
  19. this.password = password;
  20. }
  21. public String getEmail() {
  22. return email;
  23. }
  24. public void setEmail(String email) {
  25. this.email = email;
  26. }
  27. }

2、编写 RegisterFormBean 类

  1. package com.liuyanzhao;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. /*
  5. * @author LiuYanzhao
  6. */
  7. public class RegisterFormBean {
  8. private String name;
  9. private String password;
  10. private String password2;
  11. private String email;
  12. private Map<String, String> errors = new HashMap<String,String>();
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public String getPassword() {
  20. return password;
  21. }
  22. public void setPassword(String password) {
  23. this.password = password;
  24. }
  25. public String getPassword2() {
  26. return password2;
  27. }
  28. public void setPassword2(String password2) {
  29. this.password2 = password2;
  30. }
  31. public String getEmail() {
  32. return email;
  33. }
  34. public void setEmail(String email) {
  35. this.email = email;
  36. }
  37. public void setErrors(Map<String, String> errors) {
  38. this.errors = errors;
  39. }
  40. public boolean validate() {
  41. boolean flag = true;
  42. if(name == null || name.trim().equals("")) {
  43. errors.put("name", "请输入姓名");
  44. flag = false;
  45. }
  46. if(password == null || password.trim().equals("")) {
  47. errors.put("password", "请输入密码");
  48. flag = false;
  49. } else if(password.length() > 12 || password.length() < 6) {
  50. errors.put("password", "请输入 6-12 个字符");
  51. flag = false;
  52. }
  53. if(password != null && !password.equals(password2)) {
  54. errors.put("password2", "两次输入的密码不匹配");
  55. flag = false;
  56. }
  57. if(email == null || email.trim().equals("")) {
  58. errors.put("email", "请输入邮箱");
  59. flag = false;
  60. } else if(!email.matches("[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9]+)+")) {
  61. errors.put("email", "邮箱格式错误");
  62. flag = false;
  63. }
  64. return flag;
  65. }
  66. //向 Map 集合 error 中添加错误信息
  67. public void setErrorMsg(String err,String errMsg) {
  68. if((err != null) && (errMsg != null)) {
  69. errors.put(err, errMsg);
  70. }
  71. }
  72. //获取 errors 集合
  73. public Map<String, String> getErrors() {
  74. return errors;
  75. }
  76. }

3、编写 DBUtil 类

  1. package com.liuyanzhao;
  2. import java.util.HashMap;
  3. /*
  4. * @author LiuYanzhao
  5. */
  6. public class DBUtil {
  7. //单例模式
  8. private static DBUtil instance = new DBUtil();
  9. private HashMap<String,UserBean> users = new HashMap<String,UserBean>();
  10. private DBUtil() {
  11. //向数据库(users)中存入两条数据
  12. UserBean user1 = new UserBean();
  13. user1.setName("Tom");
  14. user1.setPassword("123456");
  15. user1.setEmail("tom@gmail.com");
  16. users.put("Tom", user1);
  17. UserBean user2 = new UserBean();
  18. user2.setName("jerry");
  19. user2.setPassword("666666");
  20. user2.setEmail("jerry@gmail.com");
  21. users.put("jerry", user2);
  22. }
  23. public static DBUtil getInstance() {
  24. return instance;
  25. }
  26. //获取数据库中(users)
  27. public UserBean getUser(String userName) {
  28. UserBean user = (UserBean)users.get(userName);
  29. return user;
  30. }
  31. //向数据库(users)插入数据
  32. public boolean insertUser(UserBean user) {
  33. if(user == null) {
  34. return false;
  35. }
  36. String userName = user.getName();
  37. if(users.get(userName) != null) {
  38. return false;
  39. }
  40. users.put(userName, user);
  41. return true;
  42. }
  43. }

4、编写 ControllerServlet 类

  1. package com.liuyanzhao;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. /*
  8. * @author LiuYanzhao
  9. */
  10. public class ControllerServlet extends HttpServlet{
  11. @Override
  12. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  13. // TODO Auto-generated method stub
  14. this.doPost(request, response);
  15. }
  16. @Override
  17. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  18. //防止中文乱码
  19. response.setContentType("text/html;charset=UTF-8");
  20. String name = request.getParameter("name");
  21. String password = request.getParameter("password");
  22. String password2 = request.getParameter("password2");
  23. String email = request.getParameter("email");
  24. RegisterFormBean formBean = new RegisterFormBean();
  25. formBean.setName(name);
  26. formBean.setPassword(password);
  27. formBean.setPassword2(password2);
  28. formBean.setEmail(email);
  29. if(!formBean.validate()) {
  30. request.setAttribute("formBean", formBean);
  31. request.getRequestDispatcher("/register.jsp").forward(request, response);
  32. return;
  33. }
  34. UserBean userBean = new UserBean();
  35. userBean.setName(name);
  36. userBean.setPassword(password);
  37. userBean.setEmail(email);
  38. boolean b = DBUtil.getInstance().insertUser(userBean);
  39. if(!b) {
  40. request.setAttribute("DBMes", "你注册的用户已存在");
  41. request.setAttribute("formBean", formBean);
  42. request.getRequestDispatcher("/register.jsp").forward(request, response);
  43. return;
  44. }
  45. response.getWriter().print("恭喜你注册成功,3秒钟自动跳转");
  46. request.getSession().setAttribute("userBean", userBean);
  47. response.setHeader("refresh","3;url=loginSuccess.jsp");
  48. }
  49. }

5、在 web.xml 添加映射

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  6. version="3.0"
  7. metadata-complete="true">
  8. <servlet>
  9. <servlet-name>ControllerServlet</servlet-name>
  10. <servlet-class>com.liuyanzhao.ControllerServlet</servlet-class>
  11. </servlet>
  12. <servlet-mapping>
  13. <!-- 映射为 ControllerServlet -->
  14. <servlet-name>ControllerServlet</servlet-name>
  15. <url-pattern>/ControllerServlet</url-pattern>
  16. </servlet-mapping>
  17. </web-app>

6、编写 register.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>用户注册</title>
  8. <style>
  9. h3 {
  10. margin-left:100px;
  11. }
  12. #outer {
  13. width:750px;
  14. }
  15. span {
  16. color:#ff0000;
  17. }
  18. div {
  19. height:20px;
  20. margin-bottom:10px;
  21. }
  22. .ch {
  23. width:80px;
  24. text-align:right;
  25. float:left;
  26. padding-right:5px;
  27. }
  28. .ip {
  29. width:500px;
  30. float:left;
  31. }
  32. .ip > input {
  33. margin-right:20px;
  34. }
  35. #bt {
  36. margin-left:50px;
  37. }
  38. #bt > input {
  39. margin-right:30px;
  40. }
  41. </style>
  42. </head>
  43. <body>
  44. <form action="ControllerServlet" method="post">
  45. <h3>用户注册</h3>
  46. <div id="outer">
  47. <div>
  48. <div class="ch">姓名:</div>
  49. <div class="ip">
  50. <input type="text" name="name" value="${formBean.name}" />
  51. <span>${formBean.errors.name}${DBMes}</span>
  52. </div>
  53. </div>
  54. <div>
  55. <div class="ch">密码:</div>
  56. <div class="ip">
  57. <input type="text" name="password" />
  58. <span>${formBean.errors.password} </span>
  59. </div>
  60. </div>
  61. <div>
  62. <div class="ch">确认密码:</div>
  63. <div class="ip">
  64. <input type="text" name="password2" />
  65. <span>${formBean.errors.password2} </span>
  66. </div>
  67. </div>
  68. <div>
  69. <div class="ch">邮箱:</div>
  70. <div class="ip">
  71. <input type="text" name="email" value="${formBean.email}" />
  72. <span>${formBean.errors.email}</span>
  73. </div>
  74. </div>
  75. <div id="bt">
  76. <input type="reset" value="重置" />
  77. <input type="submit" value="注册" />
  78. </div>
  79. </div>
  80. </form>
  81. </body>
  82. </html>

7、编写 loginSuccess.jsp 类

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>登录成功</title>
  8. </head>
  9. <body>
  10. <%
  11. if(session.getAttribute("userBean") == null) {
  12. %>
  13. <jsp:forward page="register.jsp" />
  14. <%
  15. return;
  16. }
  17. %>
  18. <jsp:useBean id="userBean" class="com.liuyanzhao.UserBean" scope="session" />
  19. <div id="main">
  20. <div id="welcome">恭喜你,登录成功</div>
  21. <hr />
  22. <h3>你的信息</h3>
  23. <div>
  24. <ul>
  25. <li>您的姓名:${userBean.name} </li>
  26. <li>您的邮箱:${userBean.email} </li>
  27. </ul>
  28. </div>
  29. </div>
  30. </body>
  31. </html>

三、运行程序

启动 Tomcat 服务器

1、在地址栏输入 http://localhost:8080/JspModel2Demo/register.jsp

可以看到如下图所示

2、测试 未填

3、测试两次密码不一致

4、测试 账号已存在

5、在地址栏输入 http://localhost:8080/JspModel2Demo/loginSuccess.jsp

直接访问登录成功页面,因为我们的 loginSuccess.jsp 里判断了是否有 session,如果没有的话,会转发 register.jsp 里的内容,如图

6、如果输入正确的话

点击注册按钮,可以看到如下页面

3秒钟后出现如下页面

本文链接:https://liuyanzhao.com/5198.html

JSP 实现登录注册功能相关推荐

  1. java wed登录面 代码_JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)...

    下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBea ...

  2. 使用JSP实现简单的登录注册功能,并且使用Session跟踪用户登录信息

    使用JSP实现简单的登录注册功能,并且使用了Session来跟踪用户的登录信息,这个是用纯JSP来实现此功能的,由于没有连接数据库,所以使用List来模拟数据库. 第一步:创建web项目 如果有不会创 ...

  3. 注册登录案例用MVC和mysql_用MVC模式实现简单用户登录注册功能

    Model2模式 Jsp+Servlet+JavaBean MVC:开发模式 M:Model 模型层 ----> JavaBean V:View 视图层 ----> Jsp C:Contr ...

  4. spring 3.x 学习笔记_spring mvc、spring jdbc 实现网站的登录注册功能

    使用spring mvc.spring jdbc 实现网站的登录注册功能 1.        据业务模型 创建model 一般实现序列化 2.        用spring 注解(@Repositor ...

  5. MVC框架实现用户的登录注册功能

    MVC是什么? MVC,全称model view controller-模型,视图,控制器 model是将数据库中的表到Java中变成实体类 view是编写JSP页面 controller是用来业务逻 ...

  6. 在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)

    在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库) 完整的项目已上传github仓库,链接在文章最下面 注:笔者在安卓客户端部分写了kotlin语言和java语 ...

  7. MVC框架实现用户登录注册功能(连接数据库)

    目录 一.简单理解MVC框架 二.项目结构 三.项目源码 3.1 User 3.2 UserDao 3.3 RegisterDao 3.4 servletControll 3.5 servletCon ...

  8. javaweb开发的仿推特项目之登录注册功能

    博主最近学习一个仿推特javaweb项目,其采用Jsp+Servlet的方式进行设计,MySQL数据库,Tomcat8服务,界面上十分美观,功能也较为健全,给大家分享一下: 项目地址 登录界面: 核心 ...

  9. java实现用户登录注册功能(用集合框架来实现)

    需求:实现用户登录注册功能(用集合框架来实现) 分析: A:需求的类和接口 1.用户类 UserBean 2.用户操作方法接口和实现类 UserDao UserDaoImpl 3.测试类 UserTe ...

  10. node mysql登录注册_图解NodeJS实现登录注册功能

    该Demo根据菜鸟教程的练手项目,请提前到菜鸟教程的官网查看nodejs的相关教程,根据教程实际操作一遍,然后自己动手去实现登录.注册功能,此Demo只作参考,不符合前端相关规范. 使用的技术栈 no ...

最新文章

  1. 国家信息安全公布:向日葵爆出执行漏洞,还有什么远程工具值得信赖?
  2. 解决JS:window.close()在Firefox下的不能关闭的问题,兼容IE/Firefox/Chrome
  3. mysql 360 atlas_360 Atlas中间件安装及使用
  4. 2节串联锂电池充电管理IC芯片,5V,12V升降压解决方案
  5. 中国睡眠经济行业发展格局与投资策略规划建议报告2022-2027年
  6. 2020计算机保研心得(上岸中科大)
  7. 联想thinkpad E430C硬盘位换为固态,硬盘放于光驱位(win7+win10+ubuntu三系统安装教程)
  8. NOTA-NHS ester,1338231-09-6,双功能配体的大环化合物
  9. subscript下标
  10. webstorm设置Ctrl+滚轮缩放字体大小
  11. 10大主流压力测试工具
  12. 360极速浏览器浏览网页字体模糊的解决方法
  13. uniapp父子组件传值
  14. 电脑C盘满了怎么办?请放心删除这些文件夹
  15. 【搞定Jvm面试】 JVM 垃圾回收揭秘附常见面试题解析
  16. 在 Android* 商务应用中实施地图和地理围栏特性
  17. 回顾RHCE——虚拟主机
  18. 计算机基础--进制之间的转换
  19. 滴水逆向作业——指针04
  20. 微软国行解锁服务器,微软Xbox One国行版解锁教程:勇士终翻身

热门文章

  1. Hive 实用的第三方 UDF 收集
  2. 麻省理工6.824 分布式课程 Raft选主实现笔记
  3. 到底应该使用count(*) 还是count(1)
  4. 【Linux】文件操作函数(系统调用函数)
  5. CSS的position属性
  6. 很久没来这里,今天的评测java怪东西,左右Date类和时间戳转换
  7. myeclipse8.5 配置pydev环境
  8. 线上解决Resin服务响应过慢的几个方法(转)
  9. python控制语句字符串截取_python字符串截取如何操作
  10. centos7下yum安装mysql_CentOS7下使用YUM安装MySQL5.6-Go语言中文社区