文章目录

  • 第五节 搭建环境:辅助功能
    • 1、常量类
    • 2、MD5 加密工具方法
    • 3、日志配置文件
  • 第六节 业务功能:登录
    • 1、显示首页
      • ①流程图
      • ②创建 PortalServlet
        • [1]创建 Java 类
        • [2]注册
      • ③在 index.html 中编写登录表单
    • 2、登录操作
      • ①流程图
      • ②创建 EmpService
      • ③创建登录失败异常
      • ④增加常量声明
      • ⑤创建 AuthServlet
        • [1]创建 Java 类
        • [2]注册
      • ⑥EmpService 方法
      • ⑦EmpDao 方法
      • ⑧临时页面
    • 3、退出登录
      • ①在临时页面编写超链接
      • ②在 AuthServlet 编写退出逻辑

第五节 搭建环境:辅助功能

1、常量类

public class ImperialCourtConst {public static final String LOGIN_FAILED_MESSAGE = "账号、密码错误,不可进宫!";public static final String ACCESS_DENIED_MESSAGE = "宫闱禁地,不得擅入!";}

2、MD5 加密工具方法

public class MD5Util {/*** 针对明文字符串执行MD5加密* @param source* @return*/public static String encode(String source) {// 1.判断明文字符串是否有效if (source == null || "".equals(source)) {throw new RuntimeException("用于加密的明文不可为空");}// 2.声明算法名称String algorithm = "md5";// 3.获取MessageDigest对象MessageDigest messageDigest = null;try {messageDigest = MessageDigest.getInstance(algorithm);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}// 4.获取明文字符串对应的字节数组byte[] input = source.getBytes();// 5.执行加密byte[] output = messageDigest.digest(input);// 6.创建BigInteger对象int signum = 1;BigInteger bigInteger = new BigInteger(signum, output);// 7.按照16进制将bigInteger的值转换为字符串int radix = 16;String encoded = bigInteger.toString(radix).toUpperCase();return encoded;}}

3、日志配置文件


<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true"><!-- 指定日志输出的位置 --><appender name="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><encoder><!-- 日志输出的格式 --><!-- 按照顺序分别是:时间、日志级别、线程名称、打印日志的类、日志主体内容、换行 --><pattern>[%d{HH:mm:ss.SSS}] [%-5level] [%thread] [%logger] [%msg]%n</pattern><charset>UTF-8</charset></encoder></appender><!-- 设置全局日志级别。日志级别按顺序分别是:DEBUG、INFO、WARN、ERROR --><!-- 指定任何一个日志级别都只打印当前级别和后面级别的日志。 --><root level="INFO"><!-- 指定打印日志的appender,这里通过“STDOUT”引用了前面配置的appender --><appender-ref ref="STDOUT" /></root><!-- 专门给某一个包指定日志级别 --><logger name="com.atguigu" level="DEBUG" additivity="false"><appender-ref ref="STDOUT" /></logger></configuration>

第六节 业务功能:登录

1、显示首页

①流程图

②创建 PortalServlet

[1]创建 Java 类

public class PortalServlet extends ViewBaseServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 声明要访问的首页的逻辑视图String templateName = "index";// 调用父类的方法根据逻辑视图名称渲染视图processTemplate(templateName, req, resp);}
}

[2]注册

<servlet><servlet-name>portalServlet</servlet-name><servlet-class>com.atguigu.imperial.court.servlet.module.PortalServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>portalServlet</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

③在 index.html 中编写登录表单

<!DOCTYPE html>
<html lang="en" xml:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!-- @{/auth} 解析后:/demo/auth -->
<form th:action="@{/auth}" method="post"><!-- 传递 method 请求参数,目的是为了让当前请求调用 AuthServlet 中的 login() 方法 --><input type="hidden" name="method" value="login" /><!-- th:text 解析表达式后会替换标签体 --><!-- ${attrName} 从请求域获取属性名为 attrName 的属性值 --><p th:text="${message}"></p><p th:text="${systemMessage}"></p>账号:<input type="text" name="loginAccount"/><br/>密码:<input type="password" name="loginPassword"><br/><button type="submit">进宫</button>
</form></body>
</html>

2、登录操作

①流程图

②创建 EmpService

③创建登录失败异常

public class LoginFailedException extends RuntimeException {public LoginFailedException() {}public LoginFailedException(String message) {super(message);}public LoginFailedException(String message, Throwable cause) {super(message, cause);}public LoginFailedException(Throwable cause) {super(cause);}public LoginFailedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}

④增加常量声明

public class ImperialCourtConst {public static final String LOGIN_FAILED_MESSAGE = "账号、密码错误,不可进宫!";public static final String ACCESS_DENIED_MESSAGE = "宫闱禁地,不得擅入!";public static final String LOGIN_EMP_ATTR_NAME = "loginInfo";}

⑤创建 AuthServlet

[1]创建 Java 类


public class AuthServlet extends ModelBaseServlet {private EmpService empService = new EmpServiceImpl();protected void login(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {try {// 1、获取请求参数String loginAccount = request.getParameter("loginAccount");String loginPassword = request.getParameter("loginPassword");// 2、调用 EmpService 方法执行登录逻辑Emp emp = empService.getEmpByLoginAccount(loginAccount, loginPassword);// 3、通过 request 获取 HttpSession 对象HttpSession session = request.getSession();// 4、将查询到的 Emp 对象存入 Session 域session.setAttribute(ImperialCourtConst.LOGIN_EMP_ATTR_NAME, emp);// 5、前往指定页面视图String templateName = "temp";processTemplate(templateName, request, response);} catch (Exception e) {e.printStackTrace();// 6、判断此处捕获到的异常是否是登录失败异常if (e instanceof LoginFailedException) {// 7、如果是登录失败异常则跳转回登录页面// ①将异常信息存入请求域request.setAttribute("message", e.getMessage());// ②处理视图:indexprocessTemplate("index", request, response);}else {// 8、如果不是登录异常则封装为运行时异常继续抛出throw new RuntimeException(e);}}}
}

[2]注册

<servlet><servlet-name>authServlet</servlet-name><servlet-class>com.atguigu.imperial.court.servlet.module.AuthServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>authServlet</servlet-name><url-pattern>/auth</url-pattern>
</servlet-mapping>

⑥EmpService 方法

public class EmpServiceImpl implements EmpService {private EmpDao empDao = new EmpDaoImpl();@Overridepublic Emp getEmpByLoginAccount(String loginAccount, String loginPassword) {// 1、对密码执行加密String encodedLoginPassword = MD5Util.encode(loginPassword);// 2、根据账户和加密密码查询数据库Emp emp = empDao.selectEmpByLoginAccount(loginAccount, encodedLoginPassword);// 3、检查 Emp 对象是否为 nullif (emp != null) {// ①不为 null:返回 Empreturn emp;} else {// ②为 null:抛登录失败异常throw new LoginFailedException(ImperialCourtConst.LOGIN_FAILED_MESSAGE);}}
}

⑦EmpDao 方法

public class EmpDaoImpl extends BaseDao<Emp> implements EmpDao {@Overridepublic Emp selectEmpByLoginAccount(String loginAccount, String encodedLoginPassword) {// 1、编写 SQL 语句String sql = "select emp_id empId," +"emp_name empName," +"emp_position empPosition," +"login_account loginAccount," +"login_password loginPassword " +"from t_emp where login_account=? and login_password=?";// 2、调用父类方法查询单个对象return super.getSingleBean(sql, Emp.class, loginAccount, encodedLoginPassword);}
}

⑧临时页面

<!DOCTYPE html>
<html lang="en" xml:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>临时</title>
</head>
<body><p th:text="${session.loginInfo}"></p></body>
</html>

3、退出登录

①在临时页面编写超链接

<a th:href="@{/auth?method=logout}">退朝</a>

②在 AuthServlet 编写退出逻辑

protected void logout(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 1、通过 request 对象获取 HttpSession 对象HttpSession session = request.getSession();// 2、将 HttpSession 对象强制失效session.invalidate();// 3、回到首页String templateName = "index";processTemplate(templateName, request, response);
}

三、Maven-单一架构案例(搭建环境:辅助功能,业务功能:登录)相关推荐

  1. 2022版Maven教程 - 第六章 单一架构案例

    2022版Maven教程 - 第六章 单一架构案例 一.创建工程,引入依赖 1.架构 ①架构的概念 ②单一架构 2.创建工程 3.引入依赖 ①搜索依赖信息的网站 [1]到哪儿找? [2]怎么选择? ② ...

  2. 【Maven基础】单一架构案例(一)

    第一节 创建工程,引入依赖 1.架构 1.1.架构的概念 『架构』其实就是『项目的结构』,只是因为架构是一个更大的词,通常用来形容比较大规模事物的结构. 1.2.单一架构 单一架构也叫『all-in- ...

  3. 微服务架构案例(06):通过业务、应用、技术、存储方面,聊聊架构

    更新进度(共6节): 源码地址:GitHub·点这里 || GitEE·点这里 章节 文章标题 01 项目技术选型简介,架构图解说明 02 业务架构设计,系统分层管理 03 数据库选型,业务数据设计规 ...

  4. Hadoop快速入门——第三章、MapReduce案例(字符统计)

    Hadoop快速入门--第三章.MapReduce案例 目录 环境要求: 1.项目创建: 2.修改Maven 3.编码 4.本地文件测试 5.修改[Action]文件(修改测试文件路径) 6.导出ja ...

  5. 谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器

     导航: 谷粒商城笔记+踩坑汇总篇_谷粒商城笔记踩坑6_vincewm的博客-CSDN博客 目录 1.项目介绍 1.1 微服务架构图 1.2. 微服务划分图 2.项目环境搭建 2.1. 虚拟机搭建环境 ...

  6. spring boot 与 iview 前后端分离架构之开发环境基于docker的部署的实现(三十六)

    spring boot 与 iview 前后端分离架构之开发环境基于docker的后端的部署的实现(三十六) 公众号 基于docker的后端的部署 安装mysql数据库 创建数据库 安装redis 安 ...

  7. gitee如何搭建mysql_MySQL高可用架构集群环境搭建手册.md

    # MySQL高可用架构集群环境搭建手册 ## 环境准备 ### 机器规划 | 节点 | IP | 配置 | 角色 | | -------- | -------------- | ---- | --- ...

  8. Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从

    Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从 参考文章: (1)Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从 (2)https://ww ...

  9. 使用Maven前夕(Maven项目架构管理工具、配置环境变量、阿里云镜像、本地仓库)

    Maven Maven项目架构管理工具 目前用来就是方便导入jar包! Maven的核心思想:预定大于配置(有约束不要去违反) 需要按照Maven规范来编写Java代码 Maven官网:https:/ ...

最新文章

  1. 端云一体人工智能开发平台整体架构
  2. Ubuntu 系统安装OpenJDK 7,openjdk8
  3. 最完的htaccess文件用法收集整理
  4. Windows上erl.exe的CPU使用率很高的问题【未解决】
  5. TCP/IP协议(三次握手)
  6. lan口配置 petalinux_PetaLinux安装及使用
  7. 268. 缺失数字 golang
  8. LeetCode 6034. 数组的三角和
  9. python中content的用法_学python吗,教你5个python现学现用的有趣用法
  10. loading linux img2a,嵌入式Linux中initrd的应用--浅析ramdisk、ramfs、initrd和initramfs
  11. VirtualBox添加USB 3.0控制器扩展
  12. javamail QQ邮箱发验证码设定有效时间
  13. [Android]网页内图片点击查看大图/识别二维码/下载
  14. 虎牙直播电脑配置推荐2021 虎牙直播电脑配置清单
  15. 给要入门量化分析的人一些建议(转)
  16. android数字滚动控件,Ticker 滚动数字控件
  17. android numberpicker 自定义,Android的自定义数字Picker控件-NumberPicker使用方法
  18. MineCraft - 创世神插件
  19. MVVM设计模式的大体布局框架
  20. HarmonyOS上玩“语音识别”

热门文章

  1. HBuilderX 的安装步骤
  2. 计算机英语吕,我姓吕,用英文写应该是Lu还是Lyu?
  3. 【Vue项目搭建】修改【若依框架】的侧边栏、导航栏、面包屑样式、修改全局页面样式
  4. 删除windows文件夹是提示找不到该项目 该项目不在C:\中。请确认该项目的位置,然后重试。...
  5. 如何获得查新检索报告?
  6. 云迁移实践:VMware虚拟机迁移到OpenStack
  7. 多家支付公司完成“备付金”100%交存三方支付行业纷纷寻求破局
  8. NX启动未能注册按钮事件
  9. 机器学习基础之模型篇-----二元分类和多元分类
  10. UI妹子说我用CSS实现毛玻璃效果的样子很帅