首页 > 其他分享 >操作日志的实现

操作日志的实现

时间:2023-04-09 18:11:06浏览次数:50  
标签:返回 实现 URL 对象 Future 注解 操作 日志 方法

1,用到spring中的切面编程, 用网址 http://whois.pconline.com.cn/ipJson.jsp 查询到访问者的ip信息

2,了解到了异步类:
CompletableFuture是Java 8中新增的类,用于实现异步编程。它提供了一些方法,可以方便地对异步操作进行组合、转换和处理异常。下面是一些常用的方法:

  • runAsync(Runnable runnable):异步执行一个Runnable任务,不返回任何结果。
  • supplyAsync(Supplier<U> supplier):异步执行一个Supplier任务,返回一个Future对象,可以通过Future.get()方法获取结果。
  • thenApply(Function<? super T,? extends U> fn):在Future完成后执行一个Function任务,将Future的结果作为参数,返回一个新的Future对象。
  • thenAccept(Consumer<? super T> action):在Future完成后执行一个Consumer任务,将Future的结果作为参数,不返回任何结果。
  • thenRun(Runnable action):在Future完成后执行一个Runnable任务,不接受任何参数,也不返回任何结果。
  • handle(BiFunction<? super T,Throwable,? extends U> fn):在Future完成后执行一个BiFunction任务,将Future的结果和异常作为参数,返回一个新的Future对象。
  • exceptionally(Function<Throwable,? extends T> fn):当Future抛出异常时执行一个Function任务,将异常作为参数,返回一个新的Future对象。

除此之外,CompletableFuture还提供了一些方法用于组合多个Future对象,例如:

  • thenCompose(Function<? super T,? extends CompletionStage<U>> fn):在Future完成后执行一个Function任务,将Future的结果作为参数,返回一个新的Future对象,这个新的Future对象的结果由Function任务返回的Future对象决定。
  • allOf(CompletableFuture<?>... cfs):等待所有Future对象完成,返回一个新的Future对象,这个新的Future对象的结果为null。
  • anyOf(CompletableFuture<?>... cfs):等待任意一个Future对象完成,返回一个新的Future对象,这个新的Future对象的结果为第一个完成的Future对象的结果。

这些方法可以让我们更方便地处理异步操作,提高代码的可读性和可维护性。

3,URLConnection是Java中用于访问URL资源的基础类,它提供了一些方法,可以打开连接、读取数据、设置请求头等。下面是一些常用的方法:

打开连接

  • openConnection():打开URL连接,返回一个URLConnection对象。这个方法只是打开了连接,并没有发送请求,因此可以在打开连接之后设置请求头等参数。
  • connect():连接到URL,发送请求。如果没有调用这个方法,那么后面的操作也无法执行。

读取数据

  • getInputStream():获取URL的输入流,可以通过这个流读取URL的数据。
  • getOutputStream():获取URL的输出流,可以通过这个流向URL发送数据。

设置请求头

  • setRequestProperty(String key, String value):设置请求头中的一个属性。例如,可以设置User-Agent、Referer等属性。
  • addRequestProperty(String key, String value):添加请求头中的一个属性。如果这个属性已经存在,那么会将新的值添加到已有值的后面,用逗号隔开。
  • setDoInput(boolean doInput):设置是否从URL读取数据,默认为true。
  • setDoOutput(boolean doOutput):设置是否向URL发送数据,默认为false。
  • setRequestMethod(String method):设置请求的方法,例如GET、POST等。

其他方法

  • getHeaderFields():获取响应头的所有属性值,返回一个Map对象。Map的key为属性名,value为属性值。
  • getResponseCode():获取响应的状态码,例如200表示成功,404表示未找到资源等。
  • getContentType():获取响应的Content-Type属性值。
  • getContentLength():获取响应的Content-Length属性值。

除了这些方法之外,URLConnection还提供了一些其他的方法,例如设置超时时间、设置Cookie等。使用URLConnection可以方便地访问URL资源,读取数据和设置请求头等属性。但是,如果需要更高级的功能,例如HTTP连接池、SSL连接等,建议使用第三方库,例如Apache HttpClient或OkHttp。
4,@Documented是Java的一个注解,
用来指示编译器将被标注的元素的注释包含到Java文档中。它是一个元注解,就是用来注解其他注解的注解。当一个类或方法被标注了一个被@Documented注解的注解时,Java文档生成工具会将这个注解的信息包含到生成的文档中。

例如,你可以创建一个自定义注解,并加上@Documented,那么任何使用了你的自定义注解的方法或类,都会在Java文档中包含有关这个注解的信息。这有助于创建自我记录的代码,使开发人员更容易理解如何使用代码和相关的注解。

下面是使用@Documented注解来记录自定义注解的示例:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
// 注解元素
}
在这个例子中,MyAnnotation接口被标记为@Documented,这意味着任何使用这个自定义注解的类或方法都将被包含在API文档中。此外,这个自定义注解还被标记为@Retention(RetentionPolicy.RUNTIME),这意味着注解信息在运行时保留并可以使用反射访问。最后,这个自定义注解被标记为@Target(ElementType.METHOD),这意味着它只能应用于方法。

5,RequestContextHolder是Spring框架中的一个工具类,
用于从当前线程中存储和访问HTTP请求相关的对象,如HttpServletRequest和HttpServletResponse。它是一个线程安全的类,可以在多线程环境下使用。

RequestContextHolder提供了两种访问HttpRequest对象的方法:

RequestContextHolder.getRequestAttributes():
该方法返回一个RequestAttributes对象,可以用来获取Servlet request和response等相关信息。在Spring MVC中,返回的RequestAttributes对象是ServletRequestAttributes类型,在Spring WebFlux中,返回的RequestAttributes对象是ServerRequestAttributes类型。

下面是一个Spring MVC的示例:

@RequestMapping("/hello")
public String hello() {
// 获取request对象
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 获取response对象
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
return "hello";
}
RequestContextHolder.getRequestContext():
这个方法用于获取当前的RequestAttributes对象。如果当前线程没有与任何请求相关的上下文,则会返回null。使用此方法时,您必须确保在一个HTTP请求范围内调用,否则会抛出IllegalStateException异常。

在大多数情况下,我们推荐使用第一种方法获取request和response对象。如果您需要在拦截器等环节中访问request和response对象,那么使用第一种方法将是最好的选择。

标签:返回,实现,URL,对象,Future,注解,操作,日志,方法
From: https://www.cnblogs.com/wscsdn/p/17300308.html

相关文章

  • Python+Selenium.webdriver实现WEB端UI自动化测试
    本篇记录基于Python+Selenium.webdriver实现WEB端UI自动化测试,其中测试用例使用excel维护。 1.项目选取(登录页无验证码校验的项目)该示例选取的是登录页不需要输入验证码校验的基础页面(考虑到现在大部分项目都是需要进行验证码校验的,后面研究后再出一篇相关的分享。) 2.环境......
  • 自用纯C语言实现任务调度(可用于STM32、C51等单片机)
    前言  这个任务调度模块的实现是形成于毕设项目中的,用在STM32中,断断续续跨度2个月实现了一些基本功能,可能后面再做其他项目时会一点点完善起来,也会多学习相关知识来强化模块的实用性和高效性,毕竟用自己自主实现出来的功能还是蛮舒心的。任务调度模式结构  整体上的结构属于......
  • Linux文件与文件夹操作
    创建文件夹/文件mkdir通过mkdir命令可以创建新的目录(文件夹)。语法:mkdir[-p][Linux路径]参数必填,表示Linux路径,即要创建的文件夹的路径,相对或绝对路径即可。-p选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录。如果想要一次性创建多个层级的目录,会报错,因......
  • Flask 与 HTML5 简单功能实现
    Flask与HTML5简单功能实现目录Flask与HTML5简单功能实现1实现注册与登陆1.1前端配置1.2后端配置2flask与html5+1.1前端配置1.1.1index.html配置1.1.2main.html配置1.1.3register.html配置1.1.4login.html配置1.1.5user_info.html配置1.1.6audio.html2.1后端配......
  • abp(net core)+easyui+efcore实现仓储管理系统——模块管理升级(六十)
    Abp(netcore)+easyui+efcore实现仓储管理系统目录abp(netcore)+easyui+efcore实现仓储管理系统——ABP总体介绍(一)abp(netcore)+easyui+efcore实现仓储管理系统——解决方案介绍(二)abp(netcore)+easyui+efcore实现仓储管理系统——领域层创建实体(三) abp(netcore)+eas......
  • 【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandl
    ExceptionHandler的作用ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常。当应用程序中发生异常时,ExceptionHandler将优先地拦截异常并处理它,然后将处理结果返回到前端。该注解可用于类级别和方法级别,以捕获不同级别的异常。在Spring中使用ExceptionHandler非......
  • 85-云原生操作系统-分层镜像构建并部署业务到Kubernetes集群生产案例
    在生产环境中业务迁移至Kubernetes环境都需要提前规划机房kubernetes集群部署基本步骤:机房环境搭建基础服务搭建系统迁移数据库迁移测试及联调使用服务及版本Pod地址规划端口使用统计业务迁移Nginx+Tomcat+NFS实现动静分离实现步骤:Centos基础环境镜像制作#准备安装包[root@K8s-a......
  • Linux常用操作命令总结
    一、基础知识1.1Linux系统的文件结构/bin二进制文件,系统常规命令/boot系统启动分区,系统启动时读取的文件/dev设备文件/etc大多数配置文件/home普通用户的家目录/lib32位函数库/lib6464位库/media手动临时挂......
  • 【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandl
    ExceptionHandler的作用ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常。当应用程序中发生异常时,ExceptionHandler将优先地拦截异常并处理它,然后将处理结果返回到前端。该注解可用于类级别和方法级别,以捕获不同级别的异常。在Spring中使用ExceptionHandle......
  • 多表查询和python操作mysql
    目录多表查询的两种方法方法1:连表操作方法2:子查询小知识点补充说明可视化软件NaviCat多表查询练习题1、查询所有的课程的名称以及对应的任课老师姓名2.查询平均成绩大于八十分的同学的姓名和平均成绩3.查询没有报李平老师课的学生姓名4.查询没有同时选修物理课程和体育课程的学生......