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

news/2024/9/19 0:45:29/ 标签: elasticsearch, 大数据, 搜索引擎

• 开发流程

  • 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 作为保留策略,但注意此时在运行时无法通过反射获取这些注解。

http://www.ppmy.cn/news/1519891.html

相关文章

刷题记录(2)

1. HWOD机试 - 模拟消息队列(100) package com.yue.test;import org.junit.Test;import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List;/*** Author: 夜雨* Date: 2021-12-08-10:31* Description:* Version 1.0*/ public…

SAPUI5基础知识25 - 聚合绑定(Aggregation Binding)

1. 背景 Aggregation Binding 是 SAPUI5 中的一种数据绑定方式,用于将数据模型中的集合(如数组)绑定到 UI 控件的聚合(如列表项、表格行等)。 常见的场景包括将一个数组绑定到 sap.m.List 的 items 聚合,…

如何定义核心场景用例?

​首先我们解决两个问题: 1.什么是场景测试? 2.什么是核心场景? 1、什么是场景测试? 🎯 1.1:什么是场景 事件触发时的情景形成了场景。场景必不可少的几个要素:环境、人、时间、行为。简而…

JavaWeb——介绍(什么是Web、Web网站的开发模式)、初始Web前端(Web标准、学习内容)

目录 介绍 什么是Web Web网站的开发模式 初识Web前端 Web标准 学习内容 介绍 JavaWeb学习路线 (仅用作参考) 什么是Web Web:全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的…

揭秘面试官常见问题 —— JavaScript 闭包

1. 什么是闭包? 闭包是 JavaScript 中的一种特性,它允许一个函数在定义的环境之外仍然能够访问和操作定义时的作用域中的变量。换句话说,闭包是指函数可以“记住”并访问它被创建时所处的词法作用域。 简单来说: - 当一个函数被…

[Meachines] [Medium] SecNotes XSRF跨站请求伪造+SMB-Webshell上传+Linux子系统命令历史记录泄露权限提升

信息收集 IP AddressOpening Ports10.10.10.97TCP:80,445,8808 $ nmap -p- 10.10.10.97 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 | http-title: Secure Notes - Login |…

SpringBoot中基于MongoDB的findAndModify原子操作实现分布式锁原理详解

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

网络是怎样连接的

网络是怎样连接的 HTTPDNS数据通信协议栈——TCP/IPRJ-45接口信号衰减噪声干扰双绞线MDI接口集线器交换机路由器接入网ADSL接入网FTTH接入网用户认证和配置下发DHCPPOPWeb服务器的部署地点防火墙 HTTP HTTP发展史&#xff1a; 1991 – HTTP/0.91996 – HTTP/1.01997 – HTTP/…

人工智能领域面试基础问题整理(二):什么是人工智能?

当你说你的专业是“人工智能”时&#xff0c;面试官问你&#xff1a;“假如我是一个不懂AI的人&#xff0c;你能和我说说&#xff0c;什么是AI吗&#xff1f;”你会怎么回答。 我们可以从以下几个方面入手&#xff1a; 1、人工智能的定义 人工智能&#xff08;Artificial Inte…

Android Studio gradle下载太慢了!怎么办?(已解决)

Android Studio&#xff01;你到底干了什么&#xff1f;&#xff01; 不能高速下载gradle&#xff0c;我等如何进行app编程&#xff1f;&#xff01; 很简单&#xff0c;我修改gradle地址不就是了。 找到gradle-wrapper.properties文件 修改其中distributionUrl的地址。 将 ht…

[Leetcode 51][Hard]-n皇后问题-回溯

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 这种可以算是组合问题的变种&#xff0c;在回溯函数中我们要保存当前已放置皇后的所有位置&#xff0c;同时递归调用时要进行寻找下一个皇后的放置位置。那么我们可以逐行遍历棋盘并作为递归调…

如何完美实现 Go 服务的平滑升级

Go 服务作为常驻进程,如何进行服务升级呢?你可能会觉得这还不简单,先将现有服务停止,再启动新的服务不就可以了。可是将现有服务停止时,如果它还在处理请求,那么这些请求该如何处理?另外,在现有服务已经退出但是新服务还没有启动期间,新的请求到达了又该如何处理? Go…

Logistic分类算法原理及Python实践

一、Logistic分类算法原理 Logistic分类算法&#xff0c;也称为逻辑回归&#xff08;Logistic Regression&#xff09;&#xff0c;是机器学习中的一种经典分类算法&#xff0c;主要用于解决二分类问题。其原理基于线性回归和逻辑函数&#xff08;Sigmoid函数&#xff09;的组…

3.4 数据传送指令

&#x1f393; 微机原理考点专栏&#xff08;通篇免费&#xff09; 欢迎来到我的微机原理专栏&#xff01;我将帮助你在最短时间内掌握微机原理的核心内容&#xff0c;为你的考研或期末考试保驾护航。 为什么选择我的视频&#xff1f; 全程考点讲解&#xff1a;每一节视频都…

使用JavaScript读取手机联系人列表:从理论到实践

更多内容前往个人网站&#xff1a;孔乙己大叔 在现代Web开发中&#xff0c;随着技术的不断进步&#xff0c;以前看似不可能的任务现在变得可行。例如&#xff0c;使用JavaScript读取手机联系人列表这一功能&#xff0c;在几年前几乎是不可想象的&#xff0c;但现在随着Web API的…

MyBatis之XML配置文件(一)

Mbatis是一个ORM框架&#xff0c;可以用XML配置文件或注解映射SQL语句&#xff0c;映射文件是MyBatis框架的核心&#xff0c;本文主要讲述XML 映射文件的结构和使用方法。 一、SQL映射文件 SQL映射文件就是mapperxml配置文件&#xff0c;主要实现SQL语句的配置和映射&#xf…

pdf.js如何支持base64的查看

1.pdf.js 作为一个查看在线阅读pdf的软件&#xff0c;常常被运用到前端开发中&#xff0c;但是如何让pdf支持base64的查看&#xff0c;这边就需要去进行修改一些代码了 这边我们就进行开发修改 首先去下载 https://mozilla.github.io/pdf.js/ 当然了&#xff0c;低版本的可以…

Kubernetes 上安装 Jenkins

安装 Helm curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash添加 Jenkins Helm 仓库 首先添加 Jenkins Helm 仓库 helm repo add jenkins https://charts.jenkins.io helm repo update安装 Jenkins 使用 Helm 安装 Jenkins 的最新版本&…

基于分布式计算的电商系统设计与实现【系统设计、模型预测、大屏设计、海量数据、Hadoop集群】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目展示项目介绍 目录摘要Abstract1 引言1.1 研究背景1.2 国内外研究现状1.3 研究目的1.4 研究意义 2 关键技术理论介绍2.1 Hadoop相关组件介绍2.2 分布式集群介绍2.3 Pyecharts介绍2.4 Fl…

Android音视频开发,需要学些什么?

如果你想学习 Android 音视频开发&#xff0c;以下是一些需要学习的内容&#xff1a; 一、基础知识 Java 或 Kotlin 编程语言&#xff1a;Android 开发主要使用这两种语言&#xff0c;确保你对其中一种有扎实的掌握&#xff0c;包括语法、面向对象编程概念、数据结构和算法等…