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