操作日志的实现

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对象,那么使用第一种方法将是最好的选择。

posted @   扬帆起航$  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示