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 ...
随机推荐
- HDU-6370 Werewolf(杭电多校6I)
一群人在玩狼人杀,村民只会说真话,狼人会说真话和假话,要你求出那些人一定是村民或者那些人一定是狼人.想到了并查集不会用... 1,如果全部人都是狼人,一定可以所以一定是村民的人一定是0. 2, 加入是 ...
- Tbox在整车CAN网络的位置与作用
我们讲到了智能车载娱乐系统的5个基本特征: 基本来说, 当今的智能车机基本有以下几个特点: 基于智能操作系统: Android, Yunos, Linux等 基本都是虚拟按键, 较少用实体按键 具备外 ...
- CentOS单网卡绑定双IP
OS:CnetOS 6.8 初始网卡配置文件 [root@localhost /]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ...
- JS原生 未来元素监听写法
绑定事件的另一种方法是用 addEventListener() 或 attachEvent() 来绑定事件监听函数. addEventListener()函数语法:elementObject.addE ...
- SQL中 like 通配符 特殊字符处理
以下是一些匹配的举例,需要说明的是,只有like操作才有这些特殊字符,=操作是没有的.a_b... a[_]b%a%b... a[%]b%a[b... a[[]b%a]b... a]b%a[]b... ...
- 跟我一起写一个hello-world react组件并发布到npm
第一步:初始化我们的配置 $ mkdir react-hello-world $ cd react-hello-world/ $ npm init -y 修改我们的package.json文件 //p ...
- Oracle 常用的十大 DDL 对象
table:(表) 创建表 create table test3 (tid number,tname varchar2(),hiredate date default sysdate); create ...
- mfc 中的error RC2104 : undefined keyword or key name
http://bbs.csdn.net/topics/340253236 需要在此文件中添加该按钮 声明一下. 但是在resource.h中已经定义了:#define IDC_ETHCONF_CHKP ...
- Yii2的mongodb的聚合操作
最近项目使用到mongodb的聚合操作,但是yii文档中对这方面资料较少,记录下 $where['created_time'] = ['$gt' => "$start_date_str ...
- nginx配置模板问题404
nginx配置模板问题 一.nginx主配置文件如下 cat /etc/nginx/nginx.conf user nginx; worker_processes ; #error_log logs/ ...