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 ...
随机推荐
- 「HNOI2016」最小公倍数 解题报告
「HNOI2016」最小公倍数 考虑暴力,对每个询问,处理出\(\le a,\le b\)的与询问点在一起的联通块,然后判断是否是一个联通块,且联通块\(a,b\)最大值是否满足要求. 然后很显然需要 ...
- 工作笔记:/bin/bash^M: 坏的解释器: 没有那个文件或目录 问题解决
问题原因: 由于windows上换行符为CR LF而在Linux下是 LF 导致出现上述问题 解决方案 1. 在windows下 可以使用nodepad打开该shell文件,然后将shell文件中的格 ...
- A1098. Insertion or Heap Sort
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- 再谈 javascript 数组去重
前言 数组去重方法老生常谈,既然是常谈,我也来谈谈 双层循环 也许我们首先想到的是使用 indexOf 来循环判断一遍,但在这个方法之前,让我们先看看最原始的方法: var array = [1,1, ...
- px转换成bp单位的工具函数
import {Dimensions} from 'react-native' //当前屏幕的高度 const deviceH = Dimensions.get('window').height // ...
- R语言绘图(FZ)
P-Value Central Lmit Theorem(CLT) mean(null>diff) hist(null) qqnorm(null) qqline(null) pops<-r ...
- Codeforces Round #529 (Div. 3) C. Powers Of Two(数学????)
传送门 题意: 给出一个整数 n ,问能否将 n 分解成 k 个数之和,且这 k 个数必须是2的幂. 如果可以,输出"YES",并打印出任意一组解,反之输出"NO&quo ...
- 开发问题及解决--java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android=" ...
- UVA11527Unique Snowflakes(滑动窗口 + set判重 | | map)
题意:输入长度为n的序列a,找到一个尽量长的连续子序列a[l] - a[r],使该序列中没有相同的元素 紫薯P239 序列元素从0开始编号,l 和 r 分别表示子序列左右端点,初始化为0,固定 l,判 ...
- 剑指Offer_编程题_17
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) /* struct TreeNode { int val; struct TreeNode * ...