当前位置: 首页 > news >正文

仿论坛项目--开发社区首页

• 开发流程

  • 1次请求的执行过程
    • 分步实现
  • 开发社区首页,显示前10个帖子
  • 开发分页组件,分页显示所有的帖子
    在这里插入图片描述

项目调试技巧

• 响应状态码的含义
• 服务端断点调试技巧
• 客户端断点调试技巧
• 设置日志级别,并将日志输出到不同的终端
https://logback.qos.ch

版本控制

• 认识Git

  • Git简介
  • Git的安装与配置
    • Git常用命令
  • 将代码提交至本地仓库
  • 将代码上传至远程仓库
    • IDEA集成Git
  • 在IDEA中配置并使用Git
    https://git-scm.com

#账号配置
git config --list
git config --global user.name “lihonghe”
git config --global user.email “lihonghe@nowcoder.com”
#本地仓库
git init
git status -s
git add *
git commit -m ‘…’
#生成秘钥
ssh-keygen -t rsa -C “lihonghe@nowcoder.com”
#推送已有项目
git remote add origin
https://git.nowcoder.com/334190970/Test.git
git push -u origin master
#克隆已有仓库
git clone https://git.nowcoder.com/334190970/Test.git

发送邮件

• 邮箱设置

  • 启用客户端SMTP服务
    • Spring Email
  • 导入 jar 包
  • 邮箱参数配置
  • 使用 JavaMailSender 发送邮件
    • 模板引擎
  • 使用 Thymeleaf 发送 HTML 邮件
    在这里插入图片描述
    问题:
    版本不一致: 您的父 Spring Boot 版本是 3.3.1,但您使用的却是 Spring-boot-starter-mail 2.7.5 版。 这种不匹配会导致兼容性问题。
    将 Spring Boot 父版本更新为 3.1.3(上次更新时的最新稳定版本)。 删除了 spring-boot-starter-mail 中的版本。 删除了重复的 spring-boot-starter-test 依赖关系。 保留了 mysql-connector-j 和 mybatis-spring-boot-starter 的版本,因为它们不受 Spring Boot 管理。

javax.mail.* 包
这是 JavaMail API 的原始包名,它最初是作为 Java EE 的一部分提供的。随着时间的推移,JavaMail API 被迁移到了一个独立的模块,并且包名也发生了变化。

jakarta.mail.* 包
随着 Java EE 迁移到 Jakarta EE,原来的 javax.* 包名也被迁移到了 jakarta.* 命名空间。因此,JavaMail API 也随之迁移到了 jakarta.mail.* 包名下。

配置文件
spring.mail.host=smtp.sina.com
spring.mail.port=465
spring.mail.username=邮箱名
spring.mail.password=新浪邮箱的授权码
spring.mail.protocol=smtps
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.auth=true

// 生成随机字符串
public static String generateUUID() {
return UUID.randomUUID().toString().replaceAll(“-”, “”);
}

// MD5加密
// hello -> abc123def456
// hello + 3e4a8 -> abc123def456abc  密码后面加字符串,提高安全性
public static String md5(String key) {if (StringUtils.isBlank(key)) {return null;}return DigestUtils.md5DigestAsHex(key.getBytes());
}

开发注册功能

• 访问注册页面

  • 点击顶部区域内的链接,打开注册页面。
    • 提交注册数据
  • 通过表单提交数据。
  • 服务端验证账号是否已存在、邮箱是否已注册。
  • 服务端发送激活邮件。
    • 激活注册账号
  • 点击邮件中的链接,访问服务端的激活服务。

会话管理

• HTTP的基本性质

  • HTTP是简单的
  • HTTP是可扩展的
  • HTTP是无状态的,有会话的
    • Cookie
  • 是服务器发送到浏览器,并保存在浏览器端的一小块数据。
  • 浏览器下次访问该服务器时,会自动携带块该数据,将其发送给服务器。
    • Session
  • 是JavaEE的标准,用于在服务端记录客户端信息。
  • 数据存放在服务端更加安全,但是也会增加服务端的内存压力。
    在这里插入图片描述

生成验证码

• Kaptcha

  • 导入 jar 包
  • 编写 Kaptcha 配置类
  • 生成随机字符、生成图片

开发登录、退出功能

• 访问登录页面

  • 点击顶部区域内的链接,打开登录页面。
    • 登录
  • 验证账号、密码、验证码。
  • 成功时,生成登录凭证,发放给客户端。
  • 失败时,跳转回登录页。
    • 退出
  • 将登录凭证修改为失效状态。
  • 跳转至网站首页。

显示登录信息

• 拦截器示例

  • 定义拦截器,实现HandlerInterceptor
  • 配置拦截器,为它指定拦截、排除的路径
    • 拦截器应用
  • 在请求开始时查询登录用户
  • 在本次请求中持有用户数据
  • 在模板视图上显示用户数据
  • 在请求结束时清理用户数据

账号设置

• 上传文件

  • 请求:必须是POST请求
  • 表单:enctype=“multipart/form-data”
  • Spring MVC:通过 MultipartFile 处理上传文件
    • 开发步骤
  • 访问账号设置页面
  • 上传头像
  • 获取头像

检查登录状态

• 使用拦截器

  • 在方法前标注自定义注解
  • 拦截所有请求,只处理带有该注解的方法
    • 自定义注解
  • 常用的元注解:
    @Target、@Retention、@Document、@Inherited
  • 如何读取注解:
    Method.getDeclaredAnnotations()
    Method.getAnnotation(Class annotationClass

@Target 注解

@Target 注解用于指定一个注解能够应用到哪些程序元素上。ElementType 枚举定义了多个不同的目标位置,比如方法、字段、构造函数等。

例如,@Target(ElementType.METHOD) 表示该注解只能用在方法上。
ElementType 的常用值:

METHOD:方法。
FIELD:字段。
CONSTRUCTOR:构造函数。
PARAMETER:参数。
TYPE:类、接口、枚举等类型声明。
LOCAL_VARIABLE:局部变量。
ANNOTATION_TYPE:注解类型。
PACKAGE:包。

@Retention 注解

@Retention 注解用于指定注解的生命周期,即注解在哪个阶段是有效的。RetentionPolicy 枚举提供了三个不同的策略:

SOURCE:注解只存在于源码阶段,在编译时会被丢弃。
CLASS:注解会在编译时被保留下来,但是运行时不可见。
RUNTIME:注解会在编译时被保留下来,并且在运行时也可见。

使用示例

下面是一个简单的例子,展示如何使用 @Target 和 @Retention 来定义一个自定义注解:

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

// 定义一个自定义注解,表示该方法需要日志记录

@Target(ElementType.METHOD) // 只能应用到方法上

@Retention(RetentionPolicy.RUNTIME) // 运行时可见

public @interface Loggable {

String value() default "";  // 默认值为空字符串

}

应用自定义注解

接下来,你可以在方法上应用这个注解:

public class MyClass {

@Loggable(value = "这是一个需要记录日志的方法")public void doSomething() {// 方法体}

}

检查注解

在运行时,你可以通过反射来获取这个注解:

public class Main {

public static void main(String[] args) {Method method = MyClass.class.getMethod("doSomething");Loggable loggable = method.getAnnotation(Loggable.class);if (loggable != null) {System.out.println("Log Value: " + loggable.value());}}

}

注意事项

如果没有显式地指定 @Target 和 @Retention,那么默认情况下,注解可以应用于所有类型的元素,并且在编译期会被丢弃(相当于 SOURCE)。
当你定义了一个注解处理器(annotation processor),或者需要在运行时通过反射访问注解信息时,通常会使用 RUNTIME 作为保留策略。
如果只是在编译时需要使用某些信息(例如生成额外的代码),那么可以使用 CLASS 作为保留策略,但注意此时在运行时无法通过反射获取这些注解。

相关文章:

  • Opencv中的直方图(1)计算反向投影直方图函数calcBackProject()的使用
  • 洛谷8.30
  • 盲盒小程序开发,探索市场发展优势
  • 基于 OpenCV 的数字图像处理实验平台设计
  • 自己开发完整项目一、登录功能-05(动态权限控制)
  • 创建型设计模式-原型模式(prototype)- python实现
  • 微软AD替代方案统一管理Windows和信创电脑的登录认证与网络准入认证
  • ARM体系与架构
  • C++AVL树
  • 后端输出二进制数据,前端fetch接受二进制数据,并转化为字符输出
  • 智能体进化发展了一年,现在的RPA Agent迭代到什么程度了?
  • 【初出江湖】SOA 与微服务:哪个最适合您的业务?
  • 计算机网络-BFD实验配置
  • 测试:TestGRPCDiscovery
  • docker实战基础二(Docker基础命令)
  • Electron入门介绍
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Java 最常见的 200+ 面试题:面试必备
  • laravel5.5 视图共享数据
  • React组件设计模式(一)
  • windows下如何用phpstorm同步测试服务器
  • 闭包--闭包作用之保存(一)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 盘点那些不知名却常用的 Git 操作
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 算法-图和图算法
  • 微信小程序开发问题汇总
  • 为什么要用IPython/Jupyter?
  • 智能合约开发环境搭建及Hello World合约
  • Java总结 - String - 这篇请使劲喷我
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #NOIP 2014#Day.2 T3 解方程
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $ git push -u origin master 推送到远程库出错
  • (07)Hive——窗口函数详解
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (20050108)又读《平凡的世界》
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (SpringBoot)第七章:SpringBoot日志文件
  • (三)模仿学习-Action数据的模仿
  • (一)Java算法:二分查找
  • (转)创业家杂志:UCWEB天使第一步
  • (转载)Linux 多线程条件变量同步
  • ./configure、make、make install 命令
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET DataGridView数据绑定说明
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET开源、简单、实用的数据库文档生成工具
  • @EventListener注解使用说明
  • [240903] Qwen2-VL: 更清晰地看世界 | Elasticsearch 再次拥抱开源!
  • [android] 看博客学习hashCode()和equals()
  • [bzoj2957]楼房重建
  • [C/C++] -- 二叉树