用JSP/Servlet开发简单的用户注册系统

2.4界面编程实现

通过JavaBeans封装了大部分的逻辑或数据操作功能。这样,JSP页面中就可以减少很多Java代码,从而使得JSP的建立和修改变得方便。

2.4.1登录验证页面

用户注册系统主要是为了保护一些资源不被未被授权的用户访问,因此在具体应用中,如果没有登录的用户访问到那些被保护的资源,如何才能提示用户需要登录或注册?

假设用户访问index.jsp页面,而该页面只能是注册用户才能访问,那么在index.jsp的页头加入下列语句:

这表示要在本页index.jsp其他代码运行前,必须先运行signin.jsp。signin.jsp是用户的登录页面,用户通过登录页面实现用户和密码的验证。

登录页面signin.jsp的代码如下:

charset=UTF-8" %>

scope="session" class="com.jdon.simpleregister.SignIn"

/>

if (signIn.getAction() != null){

if (!signIn.validate())

out.println("

用户名或密码错误");

if  (signIn.SignIn())

out.println("

登录成功");

}

if

(!signIn.isAuth()){   //如果没有进行过登录验证

%>

用户注册

method="post">

value="login">

用户:

name="userid" size="10">

密码:

type="password" name="password"

size="10">

value="Reset">

//将之前参数保存起来,准备再次提交

java.util.Enumeration e=request.getParameterNames();

while(e.hasMoreElements()){

String

param=(String)e.nextElement();

out.println("

name=\""+param+"\"

value=\""+request.getParameter(param)+"\"

>");

} %>

return;

}%>

在这个signIn.jsp中实现了两大功能:第一是提供用户第一次登录验证功能;第二是保存第一次登录验证信息。

首先,在signin.jsp中,提供了登录用表单界面显示,当用户填写好表单Form按提交后,实现表单中用户名和密码的验证功能。

signin.jsp通过检查signIn.getAction()是否为空来判断当前是显示表单还是处理表单,只有用户提交登录表单,signIn.getAction()将为“login”,这是执行signIn.

SignIn()方法,将提交表单中的用户名和密码与数据库中数据进行比较,如果验证错误,signIn.isAuth()还是不为真,将继续显示登录表单要求用户再次输入,直至登录验证正确。

如果用户已经通过了验证,SignIn实例将以Session形式继续存在,因为所有被保护的JSP页面都会include这个signin.jsp文件。因此,将每次都调用signIn.isAuth(),而同一个用户每次访问的都是同一个SignIn实例。这样,该用户第一次通过查询数据库登录验证后,以后就不必再次实行数据库操作,提高了页面处理速度。这也是缓冲Cache的一种优势体现。

新用户注册是本项目的主要功能,需要显示用户应该输入的相应条目,用户输入Form表单数据后,将提交另外一个JSP页面处理。现在将这两个功能也合并在一个JSP页面中实现。同时个人资料有新增和修改两个功能,在signup.jsp中也将这两个功能合并在一起。

在signup.jsp实现4个功能:个人资料新增表单的显示;处理新增表单;个人资料修改表单的显示;处理修改后的表单。

注册页面signup.jsp的代码主要结构如下:

charset=UTF-8" %>

//如果本页面出错,直接显示errorpage.jsp内容

errorPage="errorpage.jsp?from=signup.jsp" %>

import="com.jdon.simpleregister.Constants"%>

scope="session" class="com.jdon.simpleregister.SignIn"

/>

scope="page" class="com.jdon.simpleregister.Profile" />

property="*" />

//如果提交的是新增动作

if (request.getParameter("add")!=null)

{

//并且现有数据库这个email没有存在

if (prof.EmailExist()){

%>

page="error.jsp?error_info=email已经存在 请重新调换一个!"

flush="true"/>

return;

}

//通过Profile类的insert()方法将提交的表单中数据插入

int rs=prof.insert();

%>注册成功!

}else if

(request.getParameter("edit")!=null) //如果是编辑

{

// SignIn实例必须在session中存在,在SignIn实例中

//保存用户的用户和密码

if  (!signIn.SignIn())    {

out.println("No login");

return;

}

//处理用户修改后的表单数据

prof.update();

%>注册资料修改成功!

}else{

%>

method=post οnsubmit="return Juge(this);">

//将SignIn实例中的userid赋值给Profile实例prof

prof.setUserid(signIn.getUserid());

//prof根据输入的参数userId,查询该用户数据库中其他数据,并保存在

//prof相关变量中

if (signIn.SignIn() && prof.select()){

%>

用户名:

type="hidden" name="edit" value="1">

}else{//否则 当前为显示个人资料新增表单

用户名

class="button" name="userid" value="" size=10>

}

%>

新增个人资料和编辑个人资料的重要区别是:后者用户必须是登录后的,即执行signin.jsp并且验证成功。因为scope是session,那么SignUp这个类的实例就在内存中一直存在,直到该用户离开系统,其他JSP就可以直接从内存中获得SignUp实例中变量,这些变量的值由用户在signin.jsp输入的。

个人资料新增表单的示意图如图2-4所示。

如果用户通过登录页面登录成功后,再执行signup.jsp,结果显示也几乎是图2-4,不同的是,各个数据空格中已经有相应的数据值,新增和编辑都使用的是同一个JSP页面,这样显得简洁有效。

在signup.jsp中使用了

errorPage="errorpage.jsp?from=signup.jsp" %>,这表示signup.jsp万一发生错误,不直接显示那些错误,而是转而显示errorpage.jsp。在errorpage.jsp会显示更加友好的提示信息,比如“对不起,页面出错了,请和系统管理员联系”。塑造一个界面友好的系统是成熟产品的一个象征,如图2-5所示。

图2-4个人资料新增页面图2-5出错帮助页面

2.5调试、发布和运行

单元测试是非常重要的。本项目中关键的是两个通用类,要对这两个通用类实现单元测试,以保证功能符合要求地正常运行。

关于重要类的单元测试成功后,需要将本项目放置在Web容器中进行集成测试。这时,如果JSP中包含过多的Java代码,将使得JSP的调试变得异常困难。只有在设计编码时,将有关业务逻辑的功能代码在JavaBeans中实现,依靠JavaBeans的成功测试,这样才能保证JSP页面的测试能够快速通过。

本项目中需要对两个通用类实现单元测试,一方面因为它们功能非常重要,另外一方面因为这两个通用类涉及到系统环境的配置。

以E-mail发送的SendMail.java测试为例。使用JUnit实现单元测试,Junit(http://www.junit.org)是一个开放源代码的测试软件,应用非常广泛。

Junit的使用非常简单,实际只要两步:

(1)继承junit.framework.TestCase类编写自己的测试类;

(2)在测试类中编写自己的testXXXXX()方法。

一般开发J2EE系统都会使用IDE工具辅助开发,在以后章节中谈到在J2EE开发中为什么必须依赖IDE才能提高开发速度。JBuilder作为首选的IDE工具使用也非常广泛,在JBuilder中使用Junit更加方便。

首先,需要在JBuilder中安装Junit的库文件junit.jar,然后在JBuilder中建立一个新的TestCase,取名为TestSendMail,它是继承junit.framework.TestCase的,用来测试SendMail.java,代码如下:

import junit.framework.*;

public class TestSendMail extends TestCase {

private SendMail sendMail = null;

protected void setUp() throws Exception {

super.setUp();

//构造SendMail的一个实例

sendMail = new SendMail();

}

protected void tearDown() throws Exception {

sendMail = null;

super.tearDown();

}

}

上面测试代码的基本框架已经完成,下面就是增加自己的测试方法,需要对SendMail.java的sendnow()方法实行测试,因此在TestSendMail.java中加入testSendnow(),方法如下:

public void testSendnow() {

sendMail.setMsgText("hello this is test");

sendMail.setFrom("banq@jdon.com");

sendMail.setSmtpHost("localhost");

sendMail.setTo("banq@jdon.com");

sendMail.setSubject("test");

try {

sendMail.sendnow();

} catch (Exception e) {

System.err.println(" error:

" + e);

}

}

在JBuilder中,建立TestSendMail.java测试类的同时,已经在这个project的run中自动增加一个TestSendMail的配置。因此,现在就可以直接运行TestSendMail测试类了。

注意,TestSendMail中发送邮件的SMTP服务器是设置成localhost。那么如果使用Windows 2000,就要配置Windows的SMTP服务功能,当然也可以指定其他域名或IP地址作为SMTP服务器。

通过运行TestSendMail,在没有错误显示的情况下,banq@jdon.com会收到一封该测试类发出的信件。

电脑编程用户注册界面java_用JSP/Servlet开发简单的用户注册系统相关推荐

  1. javaweb基于JSP+Servlet开发网上作业批改系统 大作业 毕业设计

    基于JSP+Servlet开发网上作业批改系统(大作业/毕业设计) 开发环境:   Windows操作系统 开发工具:MyEclipse+Jdk+Tomcat+SQLSERVER数据库 运行效果图: ...

  2. javaweb基于JSP+Servlet开发校园在线问卷调查系统 课程设计 大作业 毕业设计源码

    基于JSP+Servlet开发校园在线问卷调查系统(大作业/毕业设计) 开发环境:   Windows操作系统 开发工具:MyEclipse+Jdk+Tomcat+MYSQL数据库 运行效果图: 基于 ...

  3. 在线答疑系统源码java_java+jsp+servlet+mysql在线教学答疑系统

    需求分析 基于java+jsp+servlet+mysql技术, 实现一个在线教学答疑系统, 学生可以通过该网站提出问题留言,教师登录后可以进行答疑, 系统管理员可以对答疑系统进行管理 运行环境 ja ...

  4. jsp+servlet搭建在线投票问卷系统

    jsp+servlet搭建在线投票问卷系统 点赞再看,养成习惯 程序帮QQ:1022287044 开发环境准备 jdk1.8 tomcat8 mysql5.7 intellij IDEA 系统采用技术 ...

  5. java在线商城系统源码jsp+servlet+mysql实现的在线商城系统源码

    今天给大家演示一款由jsp servlet MySQL实现的在线商城系统,本系统实现了管理员管理用户.商品(商品分类).订单.留言.新闻等功能,前台会员注册登录,查看商品信息,加入商品到购物车.提交订 ...

  6. javaweb基于JSP+Servlet开发水费管理系统+论文 大作业 毕业设计

    基于JSP+Servlet开发水费管理系统+论文(大作业/毕业设计) 开发环境:   Windows操作系统 开发工具:MyEclipse+Jdk+Tomcat+SQLServer数据库 运行效果图: ...

  7. java项目-第137期jsp+servlet的周公算命预测系统-java毕业设计

    java项目-第137期jsp+servlet的周公算命预测系统-计算机毕业设计 [源码请到资源专栏下载] 今天分享的项目是<周公算命预测系统> 该项目分为管理员和普通用员2个角色. 管理 ...

  8. javaweb基于JSP+Servlet开发大数据与应用专业企业门户网站源码 课程设计 大作业

    基于JSP+Servlet开发大数据与应用专业企业门户网站:(大作业/课程设计) 开发环境: Windows操作系统 开发工具: Eclipse+Jdk+Tomcat+MYSQL数据库 运行效果图: ...

  9. javaweb基于JSP+Servlet开发药店(私人诊所)管理系统设计与实现源码+论文 +视频讲解 毕业设计

    基于JSP+Servlet开发私人诊所(药店)管理系统设计与实现+论文:(毕业设计/课程设计) 开发工具: MyEclipse+Jdk+Tomcat+SQLServer数据库 运行效果图 基于JSP+ ...

最新文章

  1. VScode配置ROS环境
  2. 04_NoSQL数据库之Redis数据库:set类型和zset类型
  3. DISCUZ x2.5 插件实现DIY功能,让页面也可以自由设计
  4. aix解锁oracle用户,aix用户被锁定的解决办法
  5. LeetCode 947. 移除最多的同行或同列石头(并查集)
  6. android 闪存软件测试,手机为什么这么卡:闪存I/O测试AndroBench
  7. 一个深圳程序员被一美女骗到东莞迷強
  8. php 返回object,深入分析使用mysql_fetch_object()以对象的形式返回查询结果
  9. properties加载的几种方式
  10. Word:不显示图片 + 清空“最近使用的文档”列表
  11. mysql 中文 转 拼音_MySQL中文转换成拼音的函数
  12. 考研英语 单词常见熟词生义
  13. 室内定位方案部署WIFI定位还是IBeacon定位-新导智能
  14. WordPress插件 Hide My WP 没人知道你使用的是WP系统[更新v3.0]
  15. 剑指Offer(java答案)
  16. 【2022-05-26】小红书蒲公英x-s x-t
  17. 提高动作节拍:一、让气缸速度更快: 1.快速排气阀
  18. 计算机术语宏,define
  19. 使用wmi显示rpc服务器不可用,WMI:“RPC服务器不可用”错误只为域用户
  20. 007_02ListView与BaseAdapter的参数

热门文章

  1. LIS(基于贪心的O(NlogN)解法)
  2. 二叉树的先序建树后序输出
  3. 基于php和服务器推技术的web即时聊天系统,基于php和服务器推技术的Web即时聊天系统...
  4. 宜搭数据量扩容升级公告
  5. Service Mesh 为什么从“趋势”走向“无聊”?
  6. 阿里资深技术专家崮德:如何成就更好的自己
  7. 如何用好云原生数据湖?
  8. 视频豪横时代,应用如何快速构建视频点播能力?
  9. 媒体声音 | 憋了这么久,阿里云数据库再放大招
  10. 崩坏3日记:戴尔超限专武天天出,我们的快乐变为刷题式重复养成