简单介绍:依据三层架构的思想设计本案例。

1.搭建好开发环境

准备好须要的包和模拟数据库配置文件users.xml

-->cn.itheima.dao

-->cn.itheima.service

-->cn.itheima.domain

-->cn.itheima.web

-->cn.itheima.utils

-->cn.itheima.exception

-->cn.itheima.test

2.建立模拟数据库users.xml

<?xml version="1.0" encoding="UTF-8"?>
<users>
<user username="admin" password="admin" nickname="admin" email="admin@qq.com"></user>
</users>

3.建立javaBean users

package cn.itheima.domain;

import cn.itheima.exception.MsgException;

public class User {
private String username;
private String password;
private String password2;
private String nickname;
private String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword2() {
return password2;
}
public void setPassword2(String password2) {
this.password2 = password2;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void check()throws MsgException{
if(username==null || "".equals(username)){
throw new MsgException("用户名不能为空!");
}
if(password==null || "".equals(password)){
throw new MsgException("密码不能为空!");
}
if(password2==null || "".equals(password2)){
throw new MsgException("确认密码不能为空!");
}
if(!password.equals(password2)){
throw new MsgException("两次密码不一致!");
}
if(nickname==null || "".equals(nickname)){
throw new MsgException("昵称不能为空!");
}
if(email==null || "".equals(email)){
throw new MsgException("邮箱不能为空!");
}
if(!email.matches("^\\w+@\\w+(\\.\\w+)+$")){
throw new MsgException("邮箱格式不对!");
}
} }

4.建立UserDao...实现对应的查询和加入功能(主要通过使用dom树操作xml文件)

package cn.itheima.dao;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element; import cn.itheima.domain.User;
import cn.itheima.utils.XmlUtil; public class XmlUserDao {
/***
* 依据用户名查询用户
* @param username用户名
* @return 依据用户名找到用户的信息封装到javaBean中,没有返回null
*/
public User findUserByUsername(String username){
Document doc = XmlUtil.getDocument();
Element root = doc.getRootElement();
List<Element> list = root.selectNodes("//user[@username='"+username+"']");
if(list.size()>0){//假设找到这个用户就封装到bean中返回user
Element userEle = list.get(0);
User user=new User();
user.setUsername(userEle.attributeValue("username"));
user.setPassword(userEle.attributeValue("password"));
user.setNickname(userEle.attributeValue("nickname"));
user.setEmail(userEle.attributeValue("email"));
return user;
}else{//没有找到用户
return null;
} }
/**
* 通过username与password查找用户,找到就封装到javaBean中,找不到返回null
* @param username
* @param password
* @return
*/
public User findUserByUserNameAndPassword(String username,String password){
Document doc = XmlUtil.getDocument();
Element root = doc.getRootElement();
List<Element> list = root.selectNodes("//user[@username='"+username+"' and @password='"+password+"']");
if(list.size()>0){//假设找到这个用户就封装到bean中返回user
Element userEle = list.get(0);
User user=new User();
user.setUsername(userEle.attributeValue("username"));
user.setPassword(userEle.attributeValue("password"));
user.setNickname(userEle.attributeValue("nickname"));
user.setEmail(userEle.attributeValue("email"));
return user;
}else{//没有找到用户
return null;
}
}
/**
* 加入一个用户到数据库中
* @param user
*/
public void addUserToXml(User user){
Document doc = XmlUtil.getDocument();
Element root = doc.getRootElement();
//1.凭空创建一个<user>标签,并设置属性
Element userEle = DocumentHelper.createElement("user");
userEle.setAttributeValue("username", user.getUsername());
userEle.setAttributeValue("password", user.getPassword());
userEle.setAttributeValue("nickname", user.getNickname());
userEle.setAttributeValue("email", user.getEmail());
//2.挂在到root标签下
root.add(userEle);
//3.改动xml文件
XmlUtil.updateXml(); }
}

5.建立一个工具类提供获取document和改动xml的方法

package cn.itheima.utils;

import java.io.FileOutputStream;
import java.io.IOException; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class XmlUtil {
private static Document doc=null;
private static String path=XmlUtil.class.getClassLoader().getResource("users.xml").getPath();
static{
SAXReader reader=new SAXReader();
try {
doc = reader.read(path);
} catch (DocumentException e) {
e.printStackTrace();
}
}
/**
* 返回文档对象
* @return
*/
public static Document getDocument(){
return doc;
}
/**
* 改动xml文件
*/
public static void updateXml(){
try {
XMLWriter writer=new XMLWriter(new FileOutputStream(path),OutputFormat.createPrettyPrint());
writer.write(doc);
writer.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException();
}
}
}

6.开发service 提供方法注冊的方法和检查username和password的方法

package cn.itheima.service;

import cn.itheima.dao.XmlUserDao;
import cn.itheima.domain.User;
import cn.itheima.exception.MsgException; public class UserSevice {
XmlUserDao dao=new XmlUserDao();
/**
* 注冊用户
* @param user
* @throws MsgException
*/
public void registUser(User user) throws MsgException{
//1.推断数据库中是不是实用户了
if(dao.findUserByUsername(user.getUsername())!=null){
throw new MsgException("用户已经存在");
}
//2.加入到数据库中
dao.addUserToXml(user);
}
/**
* 检查username与password是否正确
* @param username
* @param password
* @return
*/
public User isUser(String username,String password){
return dao.findUserByUserNameAndPassword(username, password);
}
}

7.建立异常类MsgExcetion

package cn.itheima.exception;
public class MsgException extends Exception {
public MsgException() {
}
public MsgException(String msg) {
super(msg);
}
}

8.开发案例的主页面index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head> <body>
<c:if test="${sessionScope.user==null }">
欢迎光临 游客!<hr/><a href="${pageContext.request.contextPath}/regist.jsp">注冊</a><hr><a href="${pageContext.request.contextPath}/login.jsp">登录</a>
</c:if>
<c:if test="${sessionScope.user!=null}">
欢迎光临${sessionScope.user.username }! <hr><a href="${pageContext.request.contextPath}/login.jsp">登录</a><hr/><a href="${pageContext.request.contextPath}/servlet/LogoutServlet">注销</a>
</c:if>
</body>
</html>

执行结果示意图:

黑马day07 登录注冊案例(一)的更多相关文章

  1. Windows Azure Mobiles Services实现client的登录注冊

    下文仅仅是简单实现,client以Android端的实现为例: 用户表Account: package com.microsoft.ecodrive.model; public class Accou ...

  2. 黑马day07 注册案例(二)

    1依据index.jsp我们首先制定了注册的功能,当点击注册button什么时候.超链接到注册页面.下面是一个注册jsp页 <%@ page language="java" ...

  3. YII用户注冊和用户登录(二)之登录和注冊在视图通过表单使用YII小物件并分析

    2 登录和注冊在视图通过表单使用YII小物件并分析 <?php $form = $this -> beginWidget('CActiveForm', array( 'enableClie ...

  4. Android实战简易教程-第二十三枪(基于Baas的用户注冊和登录模块实现!)

    接着上两篇文章.我们基于Bmob提供的API实现用户登录功能.总体看一下代码. 1.注冊页面xml: <RelativeLayout xmlns:android="http://sch ...

  5. Dynamics CRM2013/2015 插件注冊工具登录后无法显示assembly列表问题的解决的方法

    自微软从2013版本号推出新的插件注冊器后,随着UI的重大更新后,问题也多了非常多.前面已有博客提到注冊assembly时看不到注冊button(http://blog.csdn.net/vic022 ...

  6. YII用户注冊和用户登录(三)之模型中规则制定和分析

    3 模型中规则制定和分析 YII模型主要分为两类,一个数据模型,处理和数据库相关的增删改查.继承CActiveRecord.还有一个是表单模型,继承CFormModel.不与数据库进行交互.操作与数据 ...

  7. 从注冊流程 分析怎样安全退出多个Activity 多种方式(附DEMO)

    前言 因为一个同学问到我怎样依照一个流程走好之后回到首页.我曾经看到过4个解决方式,后来发现有做个记录和总结的必要,就写了这篇博文. (之前看小强也写过一篇,这里通过自身的分析完整的总结一下下面6种方 ...

  8. 苹果(APPLE)开发人员账号说明及注冊流程(99美元公司版/个人版及299美元企业版)

    APPLE的政策是,要公布到APP STORE必须用99美元的个人版或公司版Apple Developer Programs,要在非商店外下载仅仅能使用299美元的企业版iOS Developer E ...

  9. 注冊成为Windows Phone开发人员而且解锁Windows Phone 8.1手机

    注冊成为Windows Phone开发人员而且解锁Windows Phone 8.1手机 上篇文章介绍了怎样使用Qt Creator和Visual Studio构建Windows Phone 8.1应 ...

随机推荐

  1. Fishnet(几何)

    http://poj.org/problem?id=1408 题意:给出 a1 a2 ... an                b1 b2 ... bn                c1 c2 . ...

  2. JQuery+Bootstrap总结

    ================JQuery=========== JQuery 1. jQuery是什么? 一个js插件, 相比较原生的DOM操作更简单.开发效率更高 2. jQuery使用 1. ...

  3. C# 对象克隆,DataTable转LIST

    public class ConvertHelper<T> where T : new() { private static string module = "ConvertHe ...

  4. 2A课程笔记分享_StudyJams_2017

    课程2A 概述 课程2A.2B的内容主要是关于创建交互式应用的基础知识.之前的L1课程主要是Android UI的基础设计知识,基本上没涉及到编程. 2A的讲解主要包括:使用变量来更新欲显示在屏幕上的 ...

  5. APP开发中的弹窗体系,UI设计师不能忽视的地方

    1. 弹窗的定义 弹窗分为模态弹窗和非模态弹窗两种. 弹窗分类 模态弹窗:很容易打断用户的操作行为,用户必须回应,否则不能进行其他操作. 非模态弹窗:不会影响用户的操作,用户可以不对其进行回应,非模态 ...

  6. 常用SQL函数

    —————常用SQL函数(实例简述)————— 数据库环境:DB2数据库: 执行工具:Toad for  DB2 1.转字符串:to_char() 日期类型:to_char(birthday,'yyy ...

  7. nginx负载均衡及反向代理

    1.启动,重启,关闭 启动:/usr/local/nginx/sbin/nginx (/usr/local/nginx/sbin/nginx -t 查看配置信息是否正确) 重启:/usr/local/ ...

  8. Arduino 红外接收

    一.实物图 二.例子代码 注:git clone https://github.com/z3t0/Arduino-IRremote.git 放到Arduino 的libraries目录下面  从遥控器 ...

  9. XML-20100: (Fatal Error) Expected ';'. xml转word 导出时异常

    因为数据中包含特殊字符.需要进行转译. < < 小于号 > > 大于号 & & 和 &apos; ’ 单引号 " " 双引号 XML ...

  10. JDK8新特性:Lambda表达式

    Lambda表达式,案例一:new Thread(() -> System.out.println("thread")); Lambda表达式,案例二:由参数/箭头和主体组成 ...