Javaweb学习笔记——(十四)—————— 服务器端验证注册登入表单项目
项目:https://download.csdn.net/download/qq_40223688/10463436
项目
功能:
*注册
*登录
------------------------------------------------------------------
JSP:
*login.jsp --> 登录表单
*regist.jsp --> 注册表单
*index.jsp --> 主页(只有登入成功才能看见)
Servlet:
*LoginServlet
*RegistServlet
Service:
*UserService --> 与用户相关的业务类
Dao:
*UserDao --> 与用户相关的数据类
Domain:
*User(对应数据库,还要对应所有表单)
**username
**password
*verifyCode
------------------------------------------------------------------
数据库设计:
*users.xml
<users>
<user username="xxx" password="xxx"/>
<user username="xxx" password="xxx"/>
</users>
-------------------------------------------------------------------
步骤:
1.创建空项目
2.导包:
*CommonUtils
*commons-beanutils.jar
*commons-logging.jar
*dom4j
3.建包
*com.changeyd.user.domain
**User
*com.changeyd.user.dao
**UserDao
*com.changeyd.user.service
**UserService
*com.changeyd.user.web.servlet
**LoginServlet
**RegistServlet
4.jsp
*login.jsp
*regist.jsp
*index.jsp
5.在D盘下创建一个user.xml文件
*添加根元素<users>
*保证文件格式为utf-8
------------------------------------------------------------------
注册:
regist.jsp
*第一步:完成regist.jsp的基本功能
RegistServlet
*封装表单数据,封装到User对象中。
*调用service的regist()方法
**如果这个方法没有出问题,则输出“注册成功”
**如果这个方法抛出了异常,把错误信息保存到request域,转发到regist.jsp(显示错误信息)
UserRervice#regist()
*没有返回值,但注册失败抛出一个自定义的异常,可以在异常中添加异常信息(自定义一个异常类)
*校验用户名是否已被注册(通过用户名查询用户),如果已被注册,抛出异常,异常信息为“用户名已被注册”
*添加用户
UserDao:通过业务分析,得到结果:需要提供两个方法
*按用户名查询用户对象:User findByUsername(String username)
*插入一个用户到数据库中:void add(User user)
工作:
1.在service层添加一个UserException
2.dao:
*User findByUsername(String username)
*void add(User user)
3.service
*void regist() throws UserException
4.servlet
(1)封装表单数据到User对象中
(2)使用user调用service的regist()方法
(3)如果得到UserException,那么吧异常信息保存到request域中,转发回regist.jsp,(用于数据的回显)
(4)输出“注册成功”
--------------------------------------------------------------------------
给注册添加验证码
1.VerifyCode类
*BufferedImage getImage() --> 获取随机的验证码图片
*String getText() --> 获取图片上的文本
*static output(BufferedImage, OutputStream) -->吧图片写入到指定的输出流中。
2.VerifyCodeServlet
*获取随机验证码图片
*把验证码图片上的文本保存到session中
*把图片响应到response的outputStream中
3.regist.jsp
*添加<img src="指向Servlet" />
*添加一个文本框,用了输入验证码
*“看不清,换一张”,是一个超链接。把上面的<img>的src重新再次指向Servlet!为了处理浏览器缓存,需要使用时间来做参数!
4.修改RegistServlet
*校验验证码:
*错误:保存表单数据到Requset域、保存错误系到request域,转发回regist.jsp
*正确:什么都不用做,向下执行原来的代码。
-----------------------------------------------------------------------------
服务器段表单(输入)校验
对此表单校验,应位于获取表单数据之后,验证码校验之前:
1.使用Map类型来壮哉错误信息 ;
*key:表单项名称,例如:username、password、verifyCode
*value:
**非空:用户名不能为空,或者密码不能为空
**字符长度:用户名长度必须在6~16位之间,密码长度必须在6~16位之间
2.在校验失败时,向map添加错误信息,哪个字段出错,那么就向哪个字段添加错误信息,
3.判断map是否为空(长度是否为0),如果不为空,那么说明有错误存在,保存map到request域中,保存from到request域中(用于回显),转发回resist.jsp
4.在resist.jsp页面中,显示map中的错误信息。${map.username},且将from中的错误信息回显到表单中的输入框。
==========================================================================
===========================================================================
登入功能
页面:login.jsp --> 登入表单
LoginServlet -->
1.获取表单数据,封装到User中
2.调用service中的login()方法,传递form。
3.如果service中的login()方法,没有抛出异常,返回一个User对象,
4.如果存在异常:那么就获取异常信息,保存到request域中,保存form,转发到login.jsp
5.如果没有异常:保存返回的user对象到session中,重定向到welcome.jsp(显示当前用户信息!)
UserService#login()
public User login(User form){
...
}
1.使用用户名查询数据库,得到返回的User
*返回为null,抛出异常,异常信息委(用户名不存在)
*返回不为null,获取查询出来的user的password与form的password进行比较
**如果不同:抛出异常(密码错误)
**如果相同,返回查询结果
UserDao
*通过用户名查询用户(与注册所用方法一致)
Javaweb学习笔记——(十四)—————— 服务器端验证注册登入表单项目的更多相关文章
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- HTML+CSS学习笔记(5)- 与浏览者交互,表单标签
HTML+CSS学习笔记(5)- 与浏览者交互,表单标签 1.使用表单标签,与用户交互 网站怎样与用户进行交互?答案是使用HTML表单(form).表单是可以把浏览者输入的数据传送到服务器端,这样服务 ...
- 自制“低奢内”CSS3登入表单,包含JS验证,请别嫌弃哦。
要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识.和JS/JQuery基本语法. 开发环境 Adobe Dreamweaver CS6 演示地址 演示地址 预览截图(抬抬你的鼠标就可以看到 ...
- python 学习笔记十四 jQuery案例详解(进阶篇)
1.选择器和筛选器 案例1 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- (C/C++学习笔记) 十四. 动态分配
十四. 动态分配 ● C语言实现动态数组 C语言实现动态数组,克服静态数组大小固定的缺陷 C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量.一旦定义了一个数组,系统将为它分配一个 ...
- HTML5 学习笔记(二)——HTML5新增属性与表单元素
目录 一.HTML5新增属性 1.1.contextmenu 1.2.contentEditable 1.3.hidden 1.4.draggable 1.5.data-* 1.6.placehold ...
- Netty学习笔记(一):接收nodejs模拟表单上传的文件
好久不写博客了,也好久不写代码了,这两天临时遇上一个事情,觉得不难,加上觉得手有些生,就动手做了一下,结果遇上了不少坑,有新坑,有老坑,痛苦无比,现在总算差不多了,赶紧记录下来,希望以后不再重复这种痛 ...
- JavaWeb学习总结(十一):Session解决form表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- JavaWeb学习 (二十四)————Filter(过滤器)常见应用
一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题 1 package me.gacl.web.filter; 2 3 import ja ...
随机推荐
- Nginx简易编译安装
1.下载Nginx: http://nginx.org/download/nginx-1.6.3.tar.gz 2.安装Pcre.Zlib.Openssl等相关组件: [root@track ngin ...
- JS判断手机还是电脑访问网站
function check() { let browser = navigator.userAgent;//用户访问的类型 let phone = ["Android", &qu ...
- 洛谷P2050 美食节
修车加强版.发现每个厨师拆成p个点太浪费了,毕竟总共用到的才p个点.于是从下往上一个一个加,加到满流就停. 论动态加点费用流的正确姿势...... 我自己加总是出现负环...我是每次加一整层,然后跑完 ...
- PMP证书的获取,不知道10大注意事项会吃亏
作为一个已经考过PMP的小项目经理我来说,近来接到不少咨询PMP的,有咨询考试事宜的,也有咨询后续的换审和PDU的,今天我这边就说说PMP项目管理证书要获取的一些注意事项,不注意的话可是会吃大亏的. ...
- spring整合redis连接
两种连接方式:(写了一半,未测试) spring xml: <?xml version="1.0" encoding="UTF-8"?> <b ...
- pytest 3.fixture介绍一 conftest.py
前言: 前面一篇pytest2 讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录, ...
- c#文件管理
Directory类-------目录管理 Directory.CreateDirectory(_Path); bool IsExit=Directory.Exists(_Path); Directo ...
- vertical-align垂直对齐用法
一.垂直对齐方式{vertical-align:middle/top/bottom:} <img>垂直对齐方式:1)给自身加vertical-align:再设置line-height即可: ...
- Luogu P2617 Dynamic Rankings
带修主席树的模板,因为状态不好所以敲了很长时间,不过写完感觉能更好地理解主席树了. 核心其实就是树状数组套主席树,维护方法不再是以前的那种一步一修改,而是对于树状数组上的每一个点建立一棵权值线段树,然 ...
- 上这个资源网站,让你轻松无忧找mac软件资源
之前分享过好几篇关于mac软件相关的文章(想要看其他的mac软件专题文章,可以关注我,点击进入查看发表的文章),有网友表示,优质的软件推荐清单有了,想要下载和获取mac软件,买一个正版软件在APP s ...