文章编号:11484时间:2024-09-30人气:
在 Java Web 应用程序中,HttpServletRequest 对象是负责处理来自客户端的 HTTP 请求的重要组成部分。它提供了一系列的方法,允许应用程序获取有关请求的详细信息,例如请求方法、请求 URI、请求头以及请求正文。
要使用 HttpServletRequest,可以在 Java Servlet 或 Web 应用程序中使用它。Servlet 是 Java 中的 API,用于处理 HTTP 请求并生成响应。HttpServletRequest 对象是通过 ServletRequest 接口获得的,它可以转换为 HttpServletRequest 类型以获得对特定 HTTP 请求方法的访问。
HttpServletRequest 对象提供了多种方法来获取有关 HTTP 请求的详细信息。一些最常用的方法包括:
HTTP 请求处理通常涉及以下步骤:
以下示例代码演示了如何在 Java Servlet 中使用 HttpServletRequest 对象:
import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/process-request")public class ProcessRequestServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取请求方法String method = request.getMethod();// 获取请求 URIString uri = request.getRequestURI();// 获取请求头String userAgent = request.getHeader("User-Agent");// 获取请求正文String body = request.getReader().readLine();// 处理请求并生成响应// ...}}
HttpServletRequest 对象是 Java Web 应用程序处理 HTTP 请求的关键部分。通过理解它的方法和用法,开发人员可以构建健壮且高效的 Web 应用程序。
网络输入法,作为业界领先的智能输入解决方案,凭借其强大的词库、智能化的组词功能和用户友好的界面设计,赢得了亿万用户的青睐。 无论是手机还是电脑,网络输入法都能提供快速、准确的输入体验。 现在您可以轻松下载最新版本的网络输入法,享受极致的输入新体验。 都SpringMVC了为什么还要学Servlet?今天面试一个工程师,tomcat、springmvc都懂,基础还不错,最后问了这个故障:SpringMVC、Tomcat是怎样完成一次Http请求的? 能回答说tomcat把请求分配给springmvc,具体业务逻辑由springmvc执行,听着有些含糊。 其实这个故障只是把各自独立的内容整合在一起问而已,就把面试者难住了。 要回答这个故障并不难。 首先,我们来看看Tomcat、SpringMVC各自的定位和职责。 Tomcat和SpringMVC的职责Tomcat:The Apache Tomcat software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket :Spring推出的基于Servlet标准的MVC框架实现。 正是因为上面的定义,程序员经常把Tomcat是一个Servlet容器,其实Tomcat实现的功能比这个要更多一些。 由上面两个的职责描述,可以看出SpringMVC和Tomcat的结合点是Servlet。 其实SpringMVC的DispatchServlet实现了HttpServlet,那么SpringMVC在Tomcat看来,其实就是一个Servlet。 Tomcat和Servlet的工作原理Tomcat作为Servlet容器,当然也可以当作web服务器直接运用,负责把接收和返回http请求。 Tomcat 和 Servlet工作原理下面,我们通过一个更细致的时序图来看一下具体工作过程:Tomcat和Servlet时序图从上图我们看出一个Http的具体处理流程:Web客户向Servlet容器(Tomcat)发出Http请求Servlet容器分析客户的请求信息Servlet容器创建一个HttpRequest对象,将客户请求的信息封装到这个对象中Servlet容器创建一个HttpResponse对象Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet对象HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息HttpServlet调用HttpResponse对象的有关方法,生成响应数据Servlet容器把HttpServlet的响应结果传给Web客户Tomcat下Servlet的配置文件的作用是配置Http和Servlet之间的映射关系、filter、context参数等。 这样通过这份约定的配置文件,Tomcat可以把Http请求映射到不同的Servlet实例上。 所以,在Servlet时代的中,会有很多的 项配置。 SpringMVC的改变我们上面说过,SpringMVC也是Servlet的实现,只不过SpringMVC增加了一个DispatchServlet,所有的http请求都是映射到这个Servlet上,请求进入到这个Servlet中之后,就算进入到了框架之中了,由这个Servlet来统一的分配http请求到各个Controller,接下来的事情大家就清楚了。 PS:最后给大家几个建议:很多人问我都SpringMVC了,为什么还需要学习Servlet,这篇文章如果能加副标题,我就会把它加上。 嗯,我就把定为标题算了。 技术的学习一定要细心一点,多提问,举个例子,http服务器、web服务器、应用服务器,这些大家常常用到的名字,到底有什么分别。 所学知识,要多想一点,尤其是现在,很多同学都是通过微信号这些一篇一篇的文章学的,甚至不怎么学,直接网络来的,那么要注意把点连成线,把线扩成面。 网络输入法官网不仅提供了便捷的下载通道,还为用户准备了详尽的使用指南和贴心的客户服务。 通过访问,您将进入一个全新的智能输入世界。 无论您遇到任何问题或困惑,网络输入法官网都将是您最坚实的后盾。 立即点击链接,开启您的智能输入之旅吧!
post请求获取body内容
注意:HttpServletRequest请求中的body内容仅能调用(),()和(key)方法读取一次,重复读取会报:Streamclosed异常。
请求获取全部参数
2、可选参数
@RequestMapping的可选参数
使用@requesMapping标注的处理函数包括的可选参数,除了HttpServletRequest,HttpServletResponse,HttpSession这些web应用中常见的参数及之前提到过的@PathVariable外,还可以包括以下可选的参数,其中大部分参数的顺序没有特殊要求的。
当前请求所属的区域设置。
用来读取requestcontent,相当于()或();
用来生成reponsecontent,相当于()或()。
当前认证了的用户
Spring对request,response,session等web元素封装后的对象HttpServletRequest/response/HttpSession等原始的web对象
用来存放domainmodel的map结构。
可用来读取http请求的header和body内容,注意因为httpentity,@RequestBody,Reader这三种类型的参数都是通过inputstram来读取httpbody的数据的,而inputstream流不能反复读取,因此这三种类型的参数不能放在一起使用。 而且在没有设置content-type或没有设置相应的messageconverter的情况下,都会报错。
通过spring的databinding机制将request请求中的参数自动转换为对应的javabean实例。
对command或formobjects值的校验结果。 此参数必须紧跟在需校验的command或formobject参数后面。 因为databinding可以允许将输入参数和多个javabean进行绑定(也就是说我们可以把输入requestparam转换成为多个java对象)。
Session的状态。 当使用@SessionAttributes来标注请求需要session中对应的值时,在处理结束时,使用()来将session设置为时效。
将request参数和handlermethod参数做绑定。例如
将handlermethod中的参数与requestheader中的值绑定,例如
将handlermethod中的参数与requestcontextbody中的值绑定
例如
表示将requestbody中的内容与u这个入参绑定。
将handlermethod中的参数与cookie中的值绑定
例如
将handlermethod中的参数与对应的类型绑定,名称缺省为类名(首字母小写),如果ModelAttribute指定了值则以该值作为modelattributename。
例如
实例
1、直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。
url形式:;password=提交的参数需要和Controller方法中的入参名称一致。
2、通过HttpServletRequest接收,post方式和get方式都可以。
3、通过一个bean来接收,post方式和get方式都可以。
(1)建立一个和表单中参数对应的bean
(2)用这个bean来封装接收的参数
4、通过@PathVariable获取路径中的参数
例如,访问路径时,则自动将URL中模板变量{username}和{password}绑定到通过@PathVariable注解的同名参数上,即入参后username=lixiaoxi、password=。
5、使用@ModelAttribute注解获取POST请求的FORM表单数据
Jsp表单如下:
JavaController如下:
6、用注解@RequestParam绑定请求参数到方法入参
当请求参数username不存在时会有异常发生,可以通过设置属性required=false解决,例如:@RequestParam(value=username,required=false)
SpringBoot配置文件详解(告别XML)快速学会和掌握SpringBoot的核心配置文件的使用。
SpringBoot提供了丰富的外部配置,常见的有:
其中核心配置文件我们并不陌生,主要以Key-Value的形式进行配置,其中属性Key主要分为两种:
在添加配置如下:
①添加数据源信息
在添加配置如下:
①添加认证信息,其中.*是自定义的属性前缀。
②添加随机值,其中.*是自定义的属性前缀。
使用方法:@ConfigurationProperties(prefix=)
使用说明:提供Setter方法和标记组件Component
如何验证是否成功读取配置?答:这里可以简单做个验证,注入MyDataSource,使用Debug模式可以看到如下信息:
使用方法:@Value(.*)
使用说明:提供Setter方法和标记组件Component
注意事项:@Value不支持注入静态变量,可间接通过Setter注入来实现。
关于两者的简单功能对比:
显然,前者支持松绑定的特性更强大,所以在实际开发中建议使用@ConfigurationProperties来读取自定义属性。
SpringBoot默认会加载这些路径加载核心配置文件,按优先级从高到低进行排列:具体规则详见ConfigFileApplicationListener
如果存在多个配置文件,则严格按照优先级进行覆盖,最高者胜出:
举个简单的例子,例如再上述位置都有一个,并且每个文件都写入了=xx(xx分别是9001,9002,9003,9004),在启动成功之后,最终应用的端口为:9004。图例:
如果想修改默认的加载路径或者调改默认的配置文件名,我们可以借助命令行参数进行指定,例如:
YAML是JSON的一个超集,是一种可轻松定义层次结构的数据格式。
答:因为配置文件这东西,结构化越早接触越规范越好。 这里推荐阅读阮一峰老师写的YAML语言教程,写的很简单明了。
引入依赖:在POM文件引入snakeyaml的依赖。
使用说明:直接在类路径添加即可。
例如下面这两段配置是完全等价的:
①在配置数据源:
②在配置数据源:
在项目的实际开发中,我们往往需要根据不同的环境来加载不同的配置文件。 例如生产环境,测试环境和开发环境等。 此时,我们可以借助Profiles来指定加载哪些配置文件。 例如:
温馨提示:如果指定了多个配置文件,则按顺序加载,其中最后的优先级最高,也就是最后的会覆盖前者。
使用方法:
使用Maven插件打包好项目,然后在当前路径,执行DOS命令=8081,在控制台可看到应用端口变成了8081。
实现原理:
默认情况下,SpringBoot会将这些命令行参数转化成一个Property,并将其添加到Environment上下文。
温馨提示:
由于命令行参数优先级非常之高,基本高于所有常见的外部配置,所以使用的时候要谨慎。 详见PropertySource执行顺序。
关闭方法:
如果想禁用命令行属性,可以设置如下操作(false)
SpringBootController接收参数的几种常用注解方式今日份鸡汤:一岁一礼,一寸欢喜,往后余生,积极向上的生活,热气腾腾的活着。
1、请求路径中带参数使用@PathVariable获取路径参数。 即url/{id}这种形式。
运行结果展示:
2、@RequestParam获取查询参数。 即url?name=这种形式,用于get/post。 springboot默认情况就是它,类似不写注解
运行结果展示:
3、@RequestBody获取POST请求参数
运行结果展示:
4、请求头参数以及Cookie
(1)@RequestHeader
(2)@CookieValue
方式一:
运行结果展示:
方式二:
运行结果展示:
烧脑巨作,SpringBoot请求处理(常用参数注解使用)注解:
该注解主要是用于rest风格的搭配使用,在请求路径中不再以k:v的形式给出请求参数与值;而是直接给定一个值。 如果方法参数是一个MapString,String将会包含路径中所有的变量与值。
访问:浏览器输入路径变量即可,以下是rest风格的get请求的展示,直接在地址栏发起请求就是一个get请求
获取所有访问路径上的请求参数:localhost:8080/car/{id}/owner/{username}?age=19inters=
该注解主要用于获取请求头header中的数据,客户端请求之后可以拿到一些头部携带的参数。 支持传统的SpringMVC,也支持WebFlux响应式。 如果方法参数是一个MapString,String将会包含所有的请求头与值
测试:
主要用于获取请求参数名称,设置参数是否可有可无以及默认值。
@RequestParam注解详解/weixin_4380…
主要用于获取Cookie值
主要用在请求转发时,如果页面无法直接跳转(如WEB-INF下的success页面)可以使用转发的手段。当进行转发时可以在请求中携带上请求的参数,转发会携带上一次请求的参数(一次完整的请求包括转发)
由于是同一次请求,因此也可以直接拿到原生的HttpServletRequest,然后从这里面拿参数和属性也都是可以的【获取request域属性】。
下面就体现了一种转发的思想
结果
主要获取表单或者ajax提交的内容,将表单中提交的参数与值获取全部获取出来。即获取请求体【所以请求必须是post请求--@PostMapping】,一般情况下都会使用@RequestBody注解将参数映射到pojo类的能力,但是要保证前后传入的参数名是一样的
上述是最常见的三种请求方式;而矩阵变量请求是今天的主角一种新的请求风格,严格来说矩阵变量的请求需要用到rest风格但是又不同于rest.
面试官:页面开发当中把cookie禁用了,session里面的内容怎么使用(找到)???
由上面源码知道首先可以知道这个注解是一个修饰在参数上的注解,并且可以在运行时被JVM虚拟机加载到。
由于SpringBoot中默认并没有开启矩阵变量的支持,直接关闭了矩阵变量。 因此在使用的时候我们需要对SpringBoot自动装配的Bean对象进行手动的配置更改。
真正使得无法使用矩阵变量的原因是UrlPathHelper类中的removeSemicolonContent默认为true,即移除分号内容。
方法:参照第一章说的SpringBoot三个自配置规则,利@configuration+WebMvcConfigurer自定义规则即可,因此为了开启矩阵变量的使用必须实现WebMvcConfigurer接口,完成对configurePathMatch方法的手动实现。 而WebMvcConfigurer接口中所有的方法都是default的默认方法,因此可以使用适配器模式单独对该方法进行重写。 所以可以在配置类中手动向IOC容器中配置一个Bean对象,该对象只对这一个方法进行重写实现即可。
重写如下
首先必须手动配置对矩阵变量的支持,其次矩阵变量是绑定在rest路径变量中的
上述两种路径都会使用同一个Controller进行处理,path拿到的就是/到第一个;号之间的路径。
Gage绑定{gege}中的age参数,Dage绑定{didi}中的age;这样就能准确的区分出到底获取哪个age。
摘自/qq_…
现在大多数互联网项目都是采用前后端分离的方式开发,前端人员负责页面展示和数据获取,后端负责业务逻辑处理和接口封装。 当与前端交互的过程当中,常用json数据与前端进行交互,这样想取出前端传送过来的json数据的时候,就需要用到@RequestBody这个注解。 @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。
提交方式为POST时,
获取参数的几种常用注解
我是这样使用SpringBoot(API传参)springboot中的Controller或者RestController接收参数的方法是一样的。 这章目标是对几种常用的传参都写个例子。
创建,这个包里放置API接口的RestController
在包中创建一个class:ParamController。 这章的示例都在这个类中进行。
路径中包含参数,这种情况适合与传递一个不能为空值的参数。 比如有些应用中,查询某个企业的数据,必须包含企业的编号,就可以在地址里接收这个编号。
在ParamController中增加一个函数PathParam
路径中的参数通过{sn}接收值。
使用名称接收参数比较直观,我用得比较多。 不用注解。 跟客户端传的参数同名就可以接收到。 如下例子中的reqParam
也可以用get传参
上面用参数名称接收值,只要与请求时的名称一致就能接收到参数值。 如果需要传递的参数比较多的时候,就不适合一个一个参数写在函数里了,那样很不方便,也容易出错。 可以把这些参数写到一个对象里接收。 如下例子
创建一个,创建一个类Person
用Person对象接收参数
虽然这样的方式也能接收get传参,但是因为需要传的参数多了,用get显得不太方便。 这里就不测试GET方式请求了。
有的时候,需要接收JSON传参。 比如某些服务的调用需要开发一个回调函数接收对方的回调并获得参数值为结果,对方回调回来的值是JSON格式的值,这时候就需要接收JSON传参数了。 用RequestBody可以接收到JSON传值。
需要JSON请求才能正确接到值
HttpServletRequestWrapper:Provides a convenient implementation of the HttpServletRequest interface that can be subclassed by developers wishing to adapt the request to a Servlet. This class implements the Wrapper or Decorator pattern. Methods default to calling through to the wrapped request object. Filter:A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both. Filters perform filtering in the doFilter method. Every Filter has access to a FilterConfig object from which it can obtain its initialization parameters, a reference to the ServletContext which it can use, for example, to load resources needed for filtering tasks.
在处理使用过滤器解密请求参数的场景时,直接调用()可能影响后续过滤器或Controller(如@RequestBody)的正常工作。 为解决此问题,我们可以通过创建一个HttpServletRequestWrapper,包装原始HttpServletRequest对象,然后在Wrapper中重写getInputStream()方法,以确保所有后续处理均能获取到正确的请求流信息。 以下步骤展示如何使用HttpServletRequestWrapper来解决这个问题:1. **背景**:在使用过滤器解密请求参数时,直接调用()会直接读取请求流的信息。 然而,这可能导致后续的过滤器或Controller无法正确获取请求数据,因为原始的request对象已经发生了改变,变得“失效”。 2. **使用HttpServletRequestWrapper**:通过创建一个HttpServletRequestWrapper类,并在其中重写getInputStream()方法,我们可以封装原始的HttpServletRequest对象。 当后续的过滤器或Controller需要访问请求流信息时,它们将从HttpServletRequestWrapper中获取,而不会影响原始的request对象。 3. **Filter**:在过滤器中,可以使用创建的HttpServletRequestWrapper对象替换原始的HttpServletRequest对象。 这样,过滤器可以安全地读取请求流信息,而不会影响到后续的处理流程。 4. **Java config**:在Spring配置文件或通过Java配置类中,可以使用WebMvcConfigurer接口来配置过滤器,将HttpServletRequestWrapper注入到过滤器中。 这样可以确保所有过滤器都使用经过包装的请求对象。 5. **YML**:在Spring Boot的配置文件中,可以通过配置WebMvcConfigurerAdapter或使用@Component注解的类来动态地配置过滤器或请求包装策略。 6. **测试**:在完成配置后,通过编写单元测试或集成测试,验证过滤器是否能够正确处理请求流信息,以及Controller是否能够获取到完整的请求数据,确保应用的各个部分都能正常工作。 通过这种方式,我们不仅能够解决使用过滤器时导致的请求对象失效问题,还能确保应用的各个组件都能够安全、高效地处理请求,从而提高应用的整体稳定性和可靠性。
在web开发中,当我们需要从HttpServletRequest对象中获取表单数据,特别是当不确定表单项名称时,`getParameterNames()`方法就派上用场了。 下面是一个简单的例子,展示了如何在Servlet中使用这两个方法来处理用户提交的数据。
public class ParameterHandlerServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
(text/html; charset=gbk);
PrintWriter out = ();
// 创建表单
(用户名:);
(密码:);
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = ();
// 获取所有参数名
Enumeration test = ();
while (()) {
String name = ();
String value = (name);
(name + = + value);
这段代码首先创建了一个包含用户名、密码和Email输入字段的HTML表单,然后在`doPost()`方法中,通过`getParameterNames()`获取所有提交的参数名,并使用`getParameter()`方法获取对应的值。 这样,即使表单中字段的name值未知,也能通过循环遍历获取所有数据。
内容声明:
1、本站收录的内容来源于大数据收集,版权归原网站所有!
2、本站收录的内容若侵害到您的利益,请联系我们进行删除处理!
3、本站不接受违法信息,如您发现违法内容,请联系我们进行举报处理!
4、本文地址:http://www.jujiwang.com/article/9ad7da0d5f9f207a5a35.html,复制请保留版权链接!
Sethc.exe是一个隐藏在Windows系统中的强大命令行工具,它通常用于启用系统辅助功能,例如屏幕键盘,但是,它还具有其他用途,可以将其用作一种便捷且强大的故障排除和诊断工具,Sethc.exe的功能启用屏幕键盘,Sethc.exe的主要功能是启用屏幕键盘,这是一个允许用户使用鼠标或其他输入设备输入文本的虚拟键盘,启动命令提示符...。
最新资讯 2024-09-30 17:05:39
想要在竞争激烈的数字营销领域取得成功,实施有效的搜索引擎优化,SEO,策略至关重要,AWStats是一款强大的开源网络日志分析工具,可为SEO优化提供宝贵见解,帮助网站提高其可见性,AWStats的SEO益处AWStats通过以下途径为SEO提供支持,分析流量来源,AWStats确定网站流量的来源,如搜索引擎、社交媒体和推荐网站,这些...。
互联网资讯 2024-09-30 15:22:57
你想过一种非凡的生活吗,一种让你每天都充满动力和目标的生活,一种让你感到充实、满足和活着的日子,如果你愿意付出努力,改变一些习惯,这完全有可能实现,创造非凡生活的7个关键习惯明确你的目标,清楚地知道你想要什么,为什么想要它,你的目标应该是具体的、可衡量的、可实现的、相关的和有时限的,一旦你明确了目标,你就能制定一个计划来实现它们,走出...。
互联网资讯 2024-09-29 04:38:10
引言convert命令是ImageMagick套件中的一个强大的工具,它可以执行广泛的图像处理任务,它是一个命令行工具,允许您通过简单的命令行将图像转换为各种格式,本指南将提供convert命令的综合概述,包括其主要功能、选项和示例用法,转换图像格式convert最基本的功能是转换图像格式,它支持各种输入和输出格式,包括,输入格式,B...。
最新资讯 2024-09-28 21:24:30
作为一名程序员,您经常需要处理不同进制之间的转换,无论是将十进制转换为十六进制以表示颜色代码,还是将二进制转换为八进制以分析二进制文件,熟练进行进制转换对于平稳高效地编码至关重要,虽然手动执行进制转换是可能的,但这可能会耗时且容易出错,这就是在线进制转换工具的用武之地,在线进制转换工具的好处快速准确,在线进制转换工具提供快速可靠的转换...。
本站公告 2024-09-27 04:25:48
<,类提供了模板化方法,简化了LDAP操作,与Spring框架集成,SpringLDAP与Spring框架无缝集成,从而可以使用Spring容器和其他Spring组件,结论SpringLDAP是一个功能强大的库,它упрощает集成applicationswithLDAPservers.Itprovidesaconvenient...。
互联网资讯 2024-09-25 04:29:38
数组是PHP中一种至关重要的数据结构,用于存储和组织数据,通过了解和使用PHP数组提供的各种功能,你可以优化数组处理,提高代码效率,本文将指导你了解PHP数组的基础知识、常用操作以及优化数组性能的技巧,PHP数组基础知识PHP数组是一种有序的、键值对的数据结构,每个元素由一个键和一个值组成,键用于标识元素,而值存储实际数据,数组可以使...。
最新资讯 2024-09-16 22:16:14
JSON,JavaScript对象表示法,是一种轻量级的基于文本的数据交换格式,它广泛用于网络应用中,以返回一个关联数组,或false以返回一个关联数组或对象,取决于JSON数据的结构,返回关联数组$data=json,decode,$json,true,返回stdClass对象$data=json,decode,$jso...。
最新资讯 2024-09-14 23:19:48
按钮,是,当您使用`history.back,`方法返回页面时,浏览器前进按钮将变为可用,因为它现在可以向前导航到当前页面,我可以使用`history.back,`方法在不同的域之间导航吗,否,`history.back,`方法只能在当前域的历史记录中导航,如果您需要在不同的域之间导航,您需要使用`window.location...。
本站公告 2024-09-13 18:31:02
引言在教育创新日新月异的时代,采用新技术对于提升教学质量至关重要,JavaApplet作为一种广泛应用于教育领域的交互式应用程序,具有强大的潜力,可以为学习者提供引人入胜且个性化的学习体验,本文旨在探讨JavaApplet在面向未来教育中的作用,并重点介绍其与新技术和应用程序的整合,JavaApplet的优势JavaApplet拥有以...。
最新资讯 2024-09-12 16:46:37
body,font,family,Helvetica,Arial,sans,serif,font,size,16px,line,height,1.6,h1,h2,h3,margin,bottom,1em,h2,font,size,1.5em,h3,font,size,1.2em,ul,list,style,type,none,...。
互联网资讯 2024-09-07 23:19:23
自古以来,人类就对浩瀚的宇宙和潜在的外星生命着了迷,对于宇宙中是否存在外星人,以及他们是否曾经访问过地球,人们进行了无休止的猜测和争论,而UFO,不明飞行物,现象的存在,似乎为外星生命的存在提供了进一步的证据,目击事件不计其数,有些甚至得到了军方和政府官员的证实,外星生命存在的论据广袤的宇宙,宇宙浩瀚无垠,包含着数十亿颗恒星和星系,根...。
互联网资讯 2024-09-04 03:31:58