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

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. AE错误代码解释

    每当我们在进行AE开发,出现错误时经常会出现错误代码,但是我们并不知道它到底代表什么意思,这里的而错误编码我们可以对照着找到我们需要的时候常详细信息(问题是,经常还是会出现没有错误编码HRESULT ...

  2. css 继承性和层叠性

    css有两大特性:继承性和层叠性 继承性 面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点:继承了父类的属性和方法.那么我们现在主要研究css,css就是在设置属性的.不会牵扯到方法的层面 ...

  3. hbase无法启动,The node /hbase is not in ZooKeeper

    问题详细描述如下: 2016-12-09 15:10:39,160 ERROR [org.apache.hadoop.hbase.client.ConnectionManager$HConnectio ...

  4. spring 九种设计模式

    spring中常用的设计模式达到九种,我们举例说明: 第一种:简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式的实质是由一 ...

  5. 快速录入快递地址API接口实现

    电商.ERP等行业下单环节极其重要,如何提高下单的效率已经成为首要问题.快速下单对于客户来说,为提前发货争取了时间:对于卖家来说,提高了库存周转率及利用率.快速下单的接口实现,需要解决如下几个问题:1 ...

  6. Ubuntu16下安装lamp

    1.安装php7 sudo apt-get install php7.0 php7.0-mcrypt 2.安装MySQL sudo apt-get install mysql-server 输入 su ...

  7. DeltaFish 校园物资共享平台 第三次小组会议

    一.想法 娄雨禛: 网页底层开发转移到后端,快速建站,效率高. 可以依照模板进行仿制. 可以考虑只进行页面设计. 但是出现问题不会调试. 所以自己写源码,做出一个大致的样子. 二.上周进度汇报 齐天杨 ...

  8. Deutsch lernen (09)

    1. die Rückmeldung, -en 反馈,回馈:(销假)报到 die Rückmeldung zur Arbeit 2. dringend a. 紧急的,急切的 Ich brauche d ...

  9. dubbo之直连提供者

    在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点对点,不影响 B 接口从注册中心获 ...

  10. HDU_1729_sg函数(dfs)

    Stone Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...