项目准备工作

  1. 三层架构

准备工作 技术选型

  • (1)Web层
    a)Servlet:前端控制器
    b)html:视图
    c)Filter:过滤器
    d)BeanUtils:数据封装
    e)Jackson:json序列化工具
  • (2)Service层
    f)Javamail:java发送邮件工具
    g)Redis:nosql内存数据库
    h)Jedis:java的redis客户端
  • (3)Dao层
    i)Mysql:数据库
    j)Mybatis:对jdbc进行封装

pom.xml依赖

<dependencies><!-- junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency><!-- Mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--日志包--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!--beanUtils--><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.2</version><scope>compile</scope></dependency><!--jackson--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.3.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.3.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.3.3</version></dependency><!--javaMail--><dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.5.6</version></dependency><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.5.3</version></dependency><!--jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.7.0</version></dependency></dependencies>

数据库准备

-- 创建数据库
create database lvyou;
-- 使用数据库
use lvyou;
-- 创建表
复制提供好的sql

搭建Mybatis

复制四个重要的文件
核心配置文件 mybatis-config.xml
映射文件 Dao.xml(dao层映射文件模板)
日志文件 log4j.properties
工具类MySessionUtil

登录模块

登录功能_实现_Service&Dao

生成UserService与测试逻辑

//测试
public class TestUserService {@Testpublic void test01() {//将用户输入账号与密码发到后台UserService userService = new UserService();//1:查找用户数据User user = userService.findUserByName("jackhello");//2:根据数据, 正确,错误,不存在。if (user == null) {System.out.println("不存在");} else {//1:3种情况System.out.println("存在");}}@Testpublic void test02() {//将用户输入账号与密码发到后台UserService userService = new UserService();//1:查找用户数据User user = new User();user.setUsername("jackhello");user.setPassword("123456");int code = userService.login(user);//2:根据数据, 正确,错误,不存在。if (code == -1) {System.out.println("未注册");} else if (code == -2) {System.out.println("注册,但是未激活");} else if (code == -3) {System.out.println("注册,已激活,密码不对");} else if (code == 1) {System.out.println("注册,已激活,密码对");}}
}

javabean类

//用户数据
public class User {private int uid;private String username;private String password;private Date birthday;private String name;private String sex;private String telephone;private String email;private char status;private String code;

Dao层测试类

package com.qst;import com.qst.bean.User;
import com.qst.dao.UserDao;
import com.qst.util.MySessionUtils;
import org.junit.Test;public class TestUserDao {@Testpublic void test01(){UserDao userDao= MySessionUtils.getSession().getMapper(UserDao.class);User user=userDao.queryUsername("12");System.out.println(user);}
}

Dao层

public interface UserDao {//select * from tab_user where username = 'jackhello'User findByName(String name);
}

Dao层对应xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qst.dao.UserDao"><select id="findByName" parameterType="string" resultType="com.qst.bean.User">select * from tab_user where username = #{username}</select>
</mapper>

UserService类实现登录基本逻辑

 public int login(User user) {//账号密码UserDao userDao = MySessionUtils2.getSession().getMapper(UserDao.class);User u = userDao.findByName(user.getUsername());//比对数据库的账号密码if (u == null) {return -1;//找不到jack} else {//判断是否是激活的账户if ('Y'== u.getStatus()) {//是激活用户if (u.getUsername().equals(user.getUsername()) && u.getPassword().equals(user.getPassword())) {return 1;//提示登录成功} else {return -2;//账号或者密码出错}} else {return -3;//已激活}}}

sevlet内容

//湖区前端传过来的数据Map<String, String[]> map = request.getParameterMap();User u = new User();try {//参1 javaBean 参2 mapBeanUtils.populate(u,map);//将map里面所有的参数赋值给javaBean} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}/*System.out.println(u.getUsername());System.out.println(u.getPassword());*///处理参数UserService userService = new UserService();int code = userService.login(u);//响应给浏览器 ajax 是响应json给浏览器就可以ResponseInfo info = new ResponseInfo();info.setCode(code);if(code == - 1){info.setData("用户不存在");}else  if(code ==  1){info.setData("登录成功");}else  if(code ==  -2){info.setData("账号密码出错");}else  if(code ==  -3){info.setData("账号未激活");}//转成jsonSystem.out.println(info.getCode()+info.getCode());String json =new ObjectMapper().writeValueAsString(info);response.getWriter().println(json);

工具类 MySessionUtils2.java(加载mybatis-config.xml)

public class MySessionUtils2 {private static SqlSessionFactory sessionFactory;//static 静态代码,在类加载的时候执行一次,且只执行一次static{//  》1 创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 》2 创建SqlSessionFactory对象InputStream inputStream = MySessionUtils2.class.getClassLoader().getResourceAsStream("com/qst/config/mybatis_config.xml");sessionFactory = sqlSessionFactoryBuilder.build(inputStream);//加载核心配置文件 参1 输入流
//        》3 加载SqlMapConfig.xml配置文件}//A: 定义一个ThreadLocal集合,本质是Map<Thread,Object> mapprivate   static ThreadLocal<SqlSession> map = new ThreadLocal<SqlSession>();public static SqlSession getSession() {//查找在local中,是否有对应的SqlSessionSqlSession sqlSession = map.get(); //map.get(Thread.currentThread())if (sqlSession != null) {//有就直接返回给调用者使用return sqlSession;} else {//没有就创建一个新的,并且保存在localsqlSession = sessionFactory.openSession();//保存map.set(sqlSession);return sqlSession;}}public static void commitAndClose() {//将来进行写操作,之后需要提交,我们定义的方法SqlSession session = map.get();if (session != null) {session.commit();//提交session.close();//释放//已经关闭的session不能留在local//所以要删除map.remove();}}public static void rollbackAndClose() {//将来进行写操作,之后需要提交,我们定义的方法SqlSession session = map.get();if (session != null) {session.rollback();//回滚session.close();//释放//已经关闭的session不能留在local//所以要删除map.remove();}}public static <T> T getMapper(Class clz) {return (T) getSession().getMapper(clz);}
}

途牛旅游项目练习-登录篇相关推荐

  1. 【途牛旅游项目】项目环境搭建,实现登陆功能

    项目准备 熟悉静态页面 查看真实在线的途牛旅游项目 其实也是一个商城而已,重点项目搭建,核心模块:登录 前言 (1)前言 为了巩固web基础知识,提升综合运用能力,故而讲解此案例. 要求,每位同学能够 ...

  2. 途牛旅游项目环境搭建

    途牛旅游项目环境搭建 准备工作 项目演示 熟悉静态页面 查看真实在线的途牛旅游项目 其实也是一个商城而已 重点项目搭建,核心模块:登录 准备工作 三层架构 (1)三层架构 (2)目录结构: 准备工作 ...

  3. 【途牛旅游项目】02 - 登录功能实现 - 验证码功能 - ajax实现登录

    文章目录 登录功能分析图解 最终实现截图 实现登录功能 1. 创建测试类 2. 创建业务层UserService 3. 创建实体类 - User用户类和Msg错误提示类 4. 创建dao层 5. 创建 ...

  4. 【途牛旅游项目】01 - 项目环境准备,实现登录功能

    文章目录 模仿途牛旅游网站的一个项目 项目初始化,目录结构 导入pom.xml依赖 创建数据库 模仿途牛旅游网站的一个项目 途牛地址:https://www.tuniu.com 项目初始化,目录结构 ...

  5. 途牛旅游项目—注册篇

    注册功能_功能分析 注册的后台功能代码 编写UserService的register方法测试 @Testpublic void test03() {UserService userService = ...

  6. 途牛旅游项目——注册邮箱激活

    UUID介绍 (1)什么是uuid 全球唯一的,不会重复的 固定长度的随机字符串 25fd9bcf50ad4dc39aa38f084d1801c8 (2)复制UUI工具类 com\wzx\util\U ...

  7. 途牛旅游项目--登录带验证码

    学习目标 (1)改进登录 (2)注册功能 MySessionUtils改进 (1) A依赖B,移除B,A报错,耦合 com\wzx\util\MySessionUtils2.java public s ...

  8. 【途牛旅游项目】03 - 注册功能实现(aJax提交,正则表达式判断,BeanUtils封装和注册转换器)

    文章目录 注册功能分析图解 实现样式截图 实现注册功能 1. 创建注册业务的测试方法 2. 创建业务层UserService的注册方法 3. 创建dao层接口方法 4. 创建dao的映射文件xml 5 ...

  9. 途牛旅游项目——动态导航栏

    学习目标 (1)数据是最重要的 (2)开发一层测试一层 (3)基础:登录 导航开发 导航后台代码开发 (1)CateogryServiceTest (2)CateogryService (3)Cate ...

最新文章

  1. Go 语言编程 — net/http — 支持 HTTPS
  2. redis sentinel哨兵配置及日志分析(grep -v)
  3. python基础教程--代码集合(下)
  4. 一本让我多花2倍时间读的书
  5. mysql blob取值_MySQL 数据类型:
  6. 阿里系 java_阿里系六大开源项目,你知道几个?
  7. 艾伟:自己实现memcached客户端库
  8. 体验Vs2005 beta2 测试工具
  9. vue项目性能优化详解汇总
  10. java中final类调用_Java中final的使用
  11. 关于Maxon电机整定的问题记录
  12. chrome源代码下载 编译 linux,源代码编译chrome os
  13. 2022最新《人工智能入门指南》全套学习教程,全网阅读量10w+
  14. Word中插入Endnote设置指定期刊参考文献样式(逐步操作讲解插入期刊和网页文献)
  15. 网上传说软件测试培训真的那么黑心吗?都是骗局?
  16. sublime text3 verilog代码编写高级操作篇
  17. Java教务管理系统
  18. 【1000套HTML5+CSS项目实战案例】大学生期末网页作业源代码
  19. (十四)从零开始学人工智能-深度学习基础及CNN
  20. 轻松将jmp esp方式 改写为jmp ebx方式

热门文章

  1. 零基础如何入门网络安全?2022年专业学习路线看这篇就够了
  2. 收好了!来自摩根大通的算法交易机器学习指南
  3. Android——仿京东秒杀
  4. 华雨欢:多日震荡趋势明显,本周即将结束要开启每周大行情了
  5. IP数据报的分片和重组
  6. 机器学习之算法优化(一)
  7. 37 篇! Facebook 今年被 CVPR 收录的论文都说了啥?
  8. python爬取微博热搜写入数据库_python实现爬取微博热搜存入Mysql
  9. ACM 基础知识(更新中)
  10. HTML作业之粉粉滴个人博客来袭—篇章一