【任务目标】按照JSP Model2思想编写一个用户注册程序。组件关系图如下1UserBean: 封装用户信息的JavaBean。2RegisterFormBean是封装注册表单信息的JavaBeanl用于校验从ControllerServlet中获取到的注册表单信息中的各个属性3DBUtil是用于访问数据库的辅助类4ControllerServlet是控制器它负责处理用户注册的请求如果注册成功就会跳转到loginSuccess.jsp页面如果注册失败则重新跳转回到register.jsp5register.jsp是用户注册表单页面交给ControllerServlet处理6loginSuccess.jsp是用户登录成功后进入的页面代码下载地址1百度网盘通过网盘分享的文件jspModel2(用户注册模型).zip链接: https://pan.baidu.com/s/1EIOGaJuF6ihVPyGCQGg4FA?pwdsspx 提取码: sspx2夸克网盘我用夸克网盘给你分享了「jspModel2(用户注册模型).zip」点击链接或复制整段内容打开「夸克APP」即可获取。/0dd33b6hpK链接https://pan.quark.cn/s/dd3c7dd8993e?pwdATvk提取码ATvk1、创建项目参考这篇文章IDEA(2020版)实现Servlet程序创建一个Servlet空白模板项目名称为jspModel2创建完项目后右击src文件夹选择New—Package包名假定为com.demo08在demo08文件夹底下再创建两个文件夹一个叫domain、一个叫util生成后项目结构如下2、编写JavaBean右击domain文件夹选择New—Java Class名字为UserBeanUserBean的参考代码如下public class UserBean{private String name;//定义用户名 private String password;//定义密码 private String email;//定义邮箱 public StringgetName(){returnname;}public void setName(String name){this.namename;}public StringgetPassword(){returnpassword;}public void setPassword(String password){this.passwordpassword;}public StringgetEmail(){returnemail;}public void setEmail(String email){this.emailemail;}}3、编写RegisterFormBean类右击domain文件夹选择New—Java Class名字为RegisterFormBean代码参考如下package com.demo08.domain;importjava.util.HashMap;importjava.util.Map;public class RegisterFormBean{private String name;//定义用户名 private String password;//定义密码 private String password2;//定义确认密码 private String email;//定义邮箱 // 定义成员变量errors,用于封装表单验证时的错误信息 private MapString, Stringerrorsnew HashMapString, String();public StringgetName(){returnname;}public void setName(String name){this.namename;}public StringgetPassword(){returnpassword;}public void setPassword(String password){this.passwordpassword;}public StringgetPassword2(){returnpassword2;}public void setPassword2(String password2){this.password2password2;}public StringgetEmail(){returnemail;}public void setEmail(String email){this.emailemail;}public booleanvalidate(){boolean flagtrue;if(namenull||name.trim().equals()){errors.put(name,请输入姓名.);flagfalse;}if(passwordnull||password.trim().equals()){errors.put(password,请输入密码.);flagfalse;}elseif(password.length()12||password.length()6){errors.put(password,请输入6-12个字符.);flagfalse;}if(password!null!password.equals(password2)){errors.put(password2,两次输入的密码不匹配.);flagfalse;}// 对email格式的校验采用了正则表达式if(emailnull||email.trim().equals()){errors.put(email,请输入邮箱.);flagfalse;}elseif(!email .matches([a-zA-Z0-9_-][a-zA-Z0-9_-](\\.[a-zA-Z0-9_-]))){errors.put(email,邮箱格式错误.);flagfalse;}returnflag;}// 向Map集合errors中添加错误信息 public void setErrorMsg(String err, String errMsg){if((err!null)(errMsg!null)){errors.put(err, errMsg);}}// 获取errors集合 public MapString, StringgetErrors(){returnerrors;}}4、创建工具类DBUtil右击util文件夹选择New—Java Class名字为DBUtil 主要用来模拟数据库操作。代码参考如下package com.demo08.util;importcom.demo08.domain.UserBean;importjava.util.HashMap;public class DBUtil{private static DBUtil instancenew DBUtil();// 定义users集合用于模拟数据库 private HashMapString,UserBeanusersnew HashMapString,UserBean();privateDBUtil(){// 向数据库(users)中存入两条数据 UserBean user1new UserBean();user1.setName(Jack);user1.setPassword(12345678);user1.setEmail(jackit315.org);users.put(Jack ,user1);UserBean user2new UserBean();user2.setName(Rose);user2.setPassword(abcdefg);user2.setEmail(roseit315.org);users.put(Rose ,user2);}public static DBUtilgetInstance(){returninstance;}// 获取数据库(users)中的数据 public UserBean getUser(String userName){UserBean user(UserBean)users.get(userName);returnuser;}// 向数据库(users)插入数据 public boolean insertUser(UserBean user){if(usernull){returnfalse;}String userNameuser.getName();if(users.get(userName)!null){returnfalse;}users.put(userName,user);returntrue;}}5、创建Servlet主要用来接收用户的请求信息拿到用户的用户名和密码然后进行校验。右击demo08文件夹选择New—Package文件夹的名字为web继续右击刚才创建的web文件夹选择New—Create New Servlet名字为ControllerServlet代码参考如下package com.demo08.web;importcom.demo08.domain.RegisterFormBean;importcom.demo08.domain.UserBean;importcom.demo08.util.DBUtil;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;WebServlet(nameControllerServlet, urlPatterns/ControllerServlet)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;charsetGBK);response.setCharacterEncoding(GBK);// 获取用户注册时表单提交的参数信息 String namerequest.getParameter(name);Stringpasswordrequest.getParameter(password);Stringpassword2request.getParameter(password2);Stringemailrequest.getParameter(email);// 将获取的参数封装到注册表单相关的RegisterFormBean类中 RegisterFormBean formBeannew 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 userBeannew UserBean();userBean.setName(name);userBean.setPassword(password);userBean.setEmail(email);// 调用DBUtil类中的insertUser()方法执行添加操作并返回一个boolean类型的标志 boolean bDBUtil.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.jsp response.setHeader(refresh,3;urlloginSuccess.jsp);}}6、创建注册界面register.jsp右击底部的web文件夹选择New—JSP/JSPX这里jsp文件的名字就叫register参考代码如下% pagelanguagejavapageEncodingGBK%!DOCTYPE html PUBLIC-//W3C//DTD HTML 4.01 Transitional//ENhttp://www.w3.org/TR/html4/loose.dtdhtmlheadtitle用户注册/titlestyletypetext/cssh3{margin-left: 100px;}zhuc#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}.ipinput{margin-right: 20px}#bt {margin-left: 50px;}#btinput {margin-right: 30px;}/style/headbodyformaction/demo8/ControllerServletmethodposth3用户注册/h3dividouterdivdivclassch姓名:/divdivclassipinputtypetextnamenamevalue${formBean.name }/span${formBean.errors.name}${DBMes}/span/div/divdivdivclassch密码:/divdivclassipinputtypetextnamepasswordspan${formBean.errors.password}/span/div/divdivdivclassch确认密码:/divdivclassipinputtypetextnamepassword2span${formBean.errors.password2}/span/div/divdivdivclassch邮箱:/divdivclassipinputtypetextnameemailvalue${formBean.email }span${formBean.errors.email}/span/div/divdividbtinputtyperesetvalue重置 /inputtypesubmitvalue注册//div/div/form/body/html7、编程loginSuccess.jsp文件这个文件表示用户登录成功的显示界面右击底部的web文件夹选择New—JSP/JSPX这里jsp文件的名字就叫loginSucces参考代码如下% page languagejava pageEncodingGBK importcom.tom.domain.UserBean%!DOCTYPEhtmlPUBLIC-//W3C//DTD HTML 4.01 Transitional//ENhttp://www.w3.org/TR/html4/loose.dtdhtmlheadtitlelogin successfully/titlestyletypetext/css#main{width:500px;height:auto;}#main div{width:200px;height:auto;}ul{padding-top:1px;padding-left:1px;list-style:none;}/style/headbody% if (session.getAttribute(“userBean”)null) { %jsp:forwardpage”register.jsp”/% return; } %divid”main”divid”welcome”恭喜你登录成功/divhr/div您的信息/divdivulli您的姓名:{user.name}/lili您的邮箱:{userBean.email }/li/ul/div/div/body/html8、运行结果
企业数字化 ERP 产品动态
相关推荐
CSS 代码格式化在线工具,前端样式调试整理小工具 一、前言
在前端日常开发工作中,我们经常会接触压缩后的 CSS 代码。线上为了减少资源体积,CSS 文件通常会去除换行、空格和缩进,全部合并为单行文本。
当我们需要分析第三方样式、排查样式冲突问题、阅读线上 CSS 源码时,面对挤… · 2026/9/27 9:30:58
使用docker-compose部署项目(mysql、springboot、vue、nginx) 结合前面几篇文章:
9.如何将jar包打包成docker镜像并进行部署 10.docker如何部署一个前端网站
docker系列文章: https://blog.csdn.net/baidu_32523857/article/details/135212681 这篇文章我们使用docker-compose来部署项目。
docker-compose是一个编… · 2026/9/27 9:30:58
第247篇_全网羊毛优惠活动聚合采集 【Python爬虫实战】第247篇:羊毛信息不再东奔西跑——多平台优惠活动聚合去重抓取实战 所属专栏:【Python爬虫实战】从零到企业级爬虫工程师(CSDN 付费专栏) 本篇篇目:第 247 篇(多源聚合与去重专场,每篇都是一个可独立上手的实战项目) 难度等级:中高级,重点练「多源… · 2026/9/27 9:30:52
嵌入式开发如何‘混进去’:最小可行交付能力构建指南 1. 这句话不是玩笑,是嵌入式行业十年真实生存图谱“其实嵌入式开发岗位,都是先混进去再说!”——这句话最近在技术社区、校招群和应届生论坛里反复刷屏,表面看像一句自嘲的牢骚,但背后藏着整个嵌入式领域人才供需结构的… · 2026/9/27 10:15:59
商务网站开发课程建言:从零搭建避坑指南 商务网站开发课程建言:从零搭建避坑指南 备案流程一头雾水,是不是让你对从零搭建商务网站感到无从下手?很多中小企业老板在筹备官网时,往往卡在ICP备案的复杂手续上,导致项目停滞不前。其实,只要理清商务网站开发课程建言中的核心逻辑,从设计原则到… · 2026/9/27 10:15:53
USOT双纤双向光模块选型指南:3.125G/6.25G/10G速率如何选 做光模块选型这些年,最常被问到的不是“最贵的那款”,而是“我到底该选哪一档速率”。北亿纤通USOT双纤双向光模块正好卡在3.125G、6.25G、10G这三个档位上,不少存储、工业通信项目一上来就拿着这三组数来问。其实这三档分别对应不同的协议映… · 2026/9/27 10:15:34
手把手教你用语音实现智能硬件开发:从拾音唤醒到识别播报全链路 1. 语音智能硬件开发到底在做什么语音智能硬件这个词,听起来挺唬人,但拆开看就三件事:把人的话变成机器能懂的指令,把机器的回应变成人听得懂的声音,再把这两件事塞进一个带麦克风和喇叭的硬件里。我最早接触这块是给一… · 2026/9/27 10:15:28
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01