黑马day07 登录注冊案例(一)
简单介绍:依据三层架构的思想设计本案例。
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 登录注冊案例(一)的更多相关文章
- Windows Azure Mobiles Services实现client的登录注冊
下文仅仅是简单实现,client以Android端的实现为例: 用户表Account: package com.microsoft.ecodrive.model; public class Accou ...
- 黑马day07 注册案例(二)
1依据index.jsp我们首先制定了注册的功能,当点击注册button什么时候.超链接到注册页面.下面是一个注册jsp页 <%@ page language="java" ...
- YII用户注冊和用户登录(二)之登录和注冊在视图通过表单使用YII小物件并分析
2 登录和注冊在视图通过表单使用YII小物件并分析 <?php $form = $this -> beginWidget('CActiveForm', array( 'enableClie ...
- Android实战简易教程-第二十三枪(基于Baas的用户注冊和登录模块实现!)
接着上两篇文章.我们基于Bmob提供的API实现用户登录功能.总体看一下代码. 1.注冊页面xml: <RelativeLayout xmlns:android="http://sch ...
- Dynamics CRM2013/2015 插件注冊工具登录后无法显示assembly列表问题的解决的方法
自微软从2013版本号推出新的插件注冊器后,随着UI的重大更新后,问题也多了非常多.前面已有博客提到注冊assembly时看不到注冊button(http://blog.csdn.net/vic022 ...
- YII用户注冊和用户登录(三)之模型中规则制定和分析
3 模型中规则制定和分析 YII模型主要分为两类,一个数据模型,处理和数据库相关的增删改查.继承CActiveRecord.还有一个是表单模型,继承CFormModel.不与数据库进行交互.操作与数据 ...
- 从注冊流程 分析怎样安全退出多个Activity 多种方式(附DEMO)
前言 因为一个同学问到我怎样依照一个流程走好之后回到首页.我曾经看到过4个解决方式,后来发现有做个记录和总结的必要,就写了这篇博文. (之前看小强也写过一篇,这里通过自身的分析完整的总结一下下面6种方 ...
- 苹果(APPLE)开发人员账号说明及注冊流程(99美元公司版/个人版及299美元企业版)
APPLE的政策是,要公布到APP STORE必须用99美元的个人版或公司版Apple Developer Programs,要在非商店外下载仅仅能使用299美元的企业版iOS Developer E ...
- 注冊成为Windows Phone开发人员而且解锁Windows Phone 8.1手机
注冊成为Windows Phone开发人员而且解锁Windows Phone 8.1手机 上篇文章介绍了怎样使用Qt Creator和Visual Studio构建Windows Phone 8.1应 ...
随机推荐
- 汇编程序18:利用and和or指令变换大小写
assume cs:code,ds:data //and指令使某位变0,or指令使某位变1 data segment db 'BaSic','iNfOrMaTiOn' //db指令:定义字节数据,与d ...
- C - Stones on the Table
Problem description There are n stones on the table in a row, each of them can be red, green or blue ...
- 使用IDEA 搭建一个SpringBoot + Hibernate + Gradle
---恢复内容开始--- 打开IDEA创建一个新项目: 第一步: 第二步: 第三步: 最后一步: 如果下载的时候时间太久.可以找到build.gradle文件,添加以下代码.如下图 maven{ ur ...
- resultType和resultMap区别,,,1-1一个订单只能对应一个用户,1对多,一个用户对应多个订单
-----------------1-多
- create-react-app 引入ant design 及 使用 less
全局引入: 第一步:全局安装 create-react-app npm install create-react-app -g 第二步:安装 yarn npm install -g yarn 第三步: ...
- Android java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader......couldn't find "libweibosdkcore.so
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/ ...
- jQuery+pjax简单示例汇总
pjax 是一个jQuery插件,它使用 ajax 和 pushState 来实现快速的浏览体验,包括真正的固定链接,页面标题和工作返回按钮. ajax缺点是破坏了浏览器的前进后退,因为ajax的请求 ...
- TCP协议的三次握手、四次挥手
TCP三次握手 TCP的连接的建立需要发送三个包,一次称为三次握手(Three-way Handshake). 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 ...
- Java基础学习笔记之:System类;Math类;Arrays类BigInteger,BigDecimal
System类 在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作.System类不能手动创建对象,因为构造方法被priva ...
- day009 文件操作
文件操作 文件路径 d:\test.txt 编码方式 utf-8 gbk... 操作方式 操作方式:只读,只写,追加,读写,写读..... 以什么编码方式储存的文件,就以什么编码打开进行操作. 只读: ...