Servlet Specification V2.4——SRV.1 Overview

Servlet概述
本文介绍了Servlet的概念,它是基于Java技术的Web组件,用于生成动态内容。Servlet由容器管理,并通过请求/响应模型与Web客户端交互。此外,文章还详细解释了Servlet容器的作用及其实现方式。

SRV.1 Overview

 

SRV.1.1 What is a Servlet?

  • 基于Java技术,由容器管理,可以生成动态内容的web组件。
  • 和其他基于Java技术的组件一样,servlet是跨平台的。并且它还运行于可以支持Java技术的web服务器
  • container,我们有时候称为servlet引擎,是支持servlet的web server。
  • servlet通过container实现的request/response模型与web client进行交互。

 

SRV.1.2 What is s Servlet Container?

        Servlet container是web server/application server的一部分, 这种server通过发送request/response,解码基于MIME的request,并且格式化基于MIME的response来提供网络服务。

        一个servlet container必须构建在宿主web服务器之内,或者作为一个附加组件被安装到web服务器上,通过其服务器的原生扩展API。Servlet container也可以或者有能力被被构建在支持web的应用程序服务器上。

        所有的servlet container必须支持HTTP作为request和reponse的协议,但附加的基于request/response的协议,比如HTTPS也可以被支持。Container必须实现的HTTP规范版本为HTTP/1.0和HTTP/1.1。因为container必须有一个在RFC2616(HTTP/1.1)中描述的缓存机制,它可以在分发来自client的request至servlet之前修改它们,也可以响应request而不分发它至servlet,像RFC2616描述的那样。

        Servlet container可以在servlet执行的环境上设置安全限制。在Java 2平台上,标准版(J2SE1.3或更高)或者企业版(J2EE1.3或更高)的环境中,这些限制应该通过使用Java2平台定义的权限架构被设置。比如,高端的应用服务器可以限制Thread对象的创建来确保container的其他组件不受到不好的影响。

        J2SE 1.3是构建Java平台下web container所需的最低版本。

 

 

SRV.1.3 An Example

  1. client访问web server,并且发起一个http request;
  2. web server收到request并转交给servlet container;
  3. servlet container根据servlet的相关配置决定调用哪个servlet,并且使用展现request/response所需的对象去调用那个servlet;
  4. servlet通过request对象找出谁是远程调用者,这个request通过http post的方式发送了那些参数,以及其他相关数据。servlet会执行代码指定的业务逻辑,并且生成数据,通过response对象返回到client。
  5. 一旦servlet完成了对request处理,container会确认response已经被正确地flush了,并将控制权还给web server。
### `.msg` 文件 `.msg` 文件用于定义 ROS 中的消息类型,这些消息是节点之间通信的基本单元。消息文件中包含多个字段,每个字段都有特定的数据类型和名称。例如,一个描述二维坐标的消息文件可能如下: ```plaintext float32 x float32 y ``` 消息文件通常用于订阅和发布数据流,如传感器数据、控制指令等。在 ROS 中,所有消息都必须定义在功能包的 `msg/` 目录下,并通过 `package.xml` 和 `CMakeLists.txt` 文件进行配置,以确保在编译时能够正确生成对应语言的绑定[^5]。 ### `.srv` 文件 `.srv` 文件用于定义服务接口,与 `.msg` 文件不同的是,服务文件使用三个连字符(`---`)将请求和响应部分分隔开来。例如,一个服务定义可能如下: ```plaintext # 请求部分 string name int32 age --- # 响应部分 string result ``` 服务通信是一种同步通信方式,客户端发送请求后必须等待服务器返回响应。这种通信方式适用于需要明确反馈的场景,例如查询某个设备的状态或执行一个特定操作[^4]。服务定义文件必须存放在功能包的 `srv/` 目录下,并通过构建系统进行注册,以便生成相应的服务接口[^5]。 ### `.action` 文件 `.action` 文件用于定义动作接口,动作是一种异步通信方式,允许客户端发送一个目标,并在后台执行任务,同时可以接收反馈信息。动作接口文件通常包含目标、结果和反馈三个部分,例如: ```plaintext # 目标部分 int32 goal --- # 结果部分 string result --- # 反馈部分 float32 percent_complete ``` 动作通信适用于长时间运行的任务,如导航、抓取等操作,客户端可以在任务执行期间接收反馈,并在任务完成后获得最终结果。动作定义文件必须存放在功能包的 `action/` 目录下,并通过构建系统进行注册,以生成相应的动作接口[^5]。 ### 消息、服务和动作的比较 - **消息(.msg)** 是 ROS 中最基础的通信机制,适用于简单的数据传输,不涉及请求-响应模式。 - **服务(.srv)** 提供了一种同步通信方式,适用于需要明确响应的场景,但不支持在执行过程中提供反馈。 - **动作(.action)** 是一种更高级的通信机制,支持异步通信,适用于长时间运行的任务,并能够在执行过程中提供反馈[^4]。 ### 构建和使用消息、服务和动作 在 ROS 中,为了使用自定义的消息、服务和动作,需要完成以下步骤: 1. 在功能包的 `msg/`、`srv/` 或 `action/` 目录下创建相应的定义文件。 2. 在 `package.xml` 文件中添加必要的依赖项,例如 `<build_depend>message_generation</build_depend>` 和 `<exec_depend>message_runtime</exec_depend>`。 3. 在 `CMakeLists.txt` 文件中配置生成消息、服务或动作的规则,例如: ```cmake add_message_files( FILES MyMessage.msg ) generate_messages( DEPENDENCIES std_msgs ) ``` 4. 编译功能包,生成对应语言的绑定。 5. 在节点中使用生成的消息、服务或动作进行通信[^5]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值