第15章 拦截器
Exception ex) throws Exception {
}
}
✎ 15.1.2 拦截器的配置
要使自定义的拦截器类生效,还需要在Spring MVC的配置文件中进行配置。
<mvc:interceptors> <bean class="com.itheima.interceptor.CustomInterceptor"/>
✎
Java EE企业级应用开发教程
(Spring+Spring MVC+MyBatis)
第15章 拦截器
· 拦截器概述
· 拦截器的执行流程
· 应用案例—实现用户登录权限验证
✎ 作业点评
– 请简述JSON数据交互两个注解的作用。 – 请简述静态资源访问的几种配置方式。
✎ 预习检查
– 如何定义和配置拦截器? – 单个拦截器和多个拦截器是如何执行的?
第二种 通过实现WebRequestInterceptor接口
✎ 15.1.1 拦截器的定义
以实现该 操Ha方 作n法 。dl会 当er在 其Int控 返er制 回ce器 值p方为tot法rr接u前e口时执,方行表式,示为其继返例续回,向值自下表定执示义行是;拦否当截中其器断返后类回续的值代码如下:
通过本章的学习,读者可以对Spring MVC中拦 截器的定义和配置方式有一定的了解,能够熟悉拦 截器的执行流程,并能够掌握拦截器的使用。
✎ 作业&预习
✎ 本章作业 – 请简述Spring MVC拦截器的定义方式。 – 请简述单个拦截器和多个拦截器的执行流程。
✎ 预习作业 –实现文件上传的页面有哪些要求? –如何限制上传文件的大小和类型? –如何解决中文名文件下载的乱码问题?
注意:<mvc:interceptor>中的子元素必须按照上述代码 的配置顺序进行编写,否则文件会报错。
✎ 主讲内容
15.1 拦截器概述 15.2 拦截器的执行流程 15.3 应用案例
主讲内容
Speech content
✎ 15.2 拦截器的执行流程
在运行程序时,拦截器的执行是有一定顺序的,该顺序与配置 文件中所定义的拦截器的顺序相关。
✎ 15.3 应用案例—实现用户登录权限验证
Hibernate
的学习案例
二级缓存
案例代码
了解了案例的整个执行流程后,接 下来就讲解下如何在项目中实现用 户登录权限验证,详细代码请查看 教材15.3小节。
✎ 15.4 本章小结
本章主要对Spring MVC中的拦截器使用进行了 详细讲解。首先介绍了如何在Spring MVC项目中定 义和配置拦截器,然后详细讲解了单个拦截器和多 个拦截器的执行流程,最后通过一个用户登录权限 验证的应用案例演示了拦截器的实际应用。
CustomInterceptor (afterCompletion)
在业务处理器(即控制器 Controller类)处理完请求后 ,会执行postHandle()方法, 然后会通过DispatcherServlet
向客户端返回响应
在DispatcherServlet处理完请 求后,才会执行
afterCompletion()方法
✎ 15.1.1 拦截器的定义
要使用Spring MVC中的拦截器,就需要对拦截器类进行定义 和配置。通常拦截器类可以通过两种方式来定义。
第一种
通过实现HandlerInterceptor接口,或继 承HandlerInterceptor接口的实现类(如 HandlerInterceptorAdapter)来定义。
Interceptor1 (preHandle)
return true
Interceptor2 (preHandle)
Interceptor1 (postHandle)
HandlerAdapter (handle)
Interceptor2 (postHandle)
从图可以看出,当有多个拦截器同 时工作时,它们的preHandle()方法 会按照配置文件中拦截器的配置顺 序执行,而它们的postHandle()方法 和afterCompletion()方法则会按照配 置顺序的反序执行。
✎ 主讲内容
15.1 拦截器概述 15.2 拦截器的执行流程 15.3 应用案例
主讲内容
Speech content
✎ 15.3 应用案例—实现用户登录权限验证
案例说明
本案例中,只有登录后的用户才能 访问系统中的主页面,如果没有登 录系统而直接访问主页面,则拦截 器会将请求拦截,并转发到登录页 面,同时在登录页面中给出提示信 息。如果用户名或密码错误,也会 在登录页面给出相应的提示信息。 当已登录的用户在系统主页中单击 “退出”链接时,系统同样会回到 登录页面。
</mvc:interceptor>
<mvc:interceptor> <mvc:mapping path="/hello"/>
/hello表示拦截所有以 “/hello”结尾的路径
<bean class="com.itheima.interceptor.Interceptor2" />
</mvc:interceptor> ... </mvc:interceptors>
} 出进一步的修改。 public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler, 该方法M会o在de整lA个nd请Vi求ew完m成od,elA即n视dV图ie渲w)染th结ro束ws之Ex后ce执ption { 行。可以通过此方法实现一些资源清理、记录日志 } 信息等工作。 public void afterCompletion(HttpServletRequest request,
return true
HandlerAdapter (handle)
程序先执行preHandle()方法 ,如果该方法的返回值为 true,则程序会继续向下执 行处理器中的方法,否则将
不再向下执行
CustomInterceptor (postHandle)
DispatcherServlet (render)
Interceptor1 (afterCompletion)
DispatcherServlet (render)
Interceptor2 (afterCompletion)
✎ 15.2.2 多个拦截器的执行流程
Hibernate
的学习案例
二级缓存
案例代码
为了验证上面所讲解的多个拦截器 执行流程,接下来,就通过一个案 例来演示说明,详细代码请查看教 材15.2.2小节。
✎
为false时,会中断后续的所有操作。 public class CustomInterceptor implements HandlerInterceptor{
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)throws Exception { 该方法会r在et控urn制fa器ls方e; 法调用之后,且解析视图之前 执行。可以通过此方法对请求域中的模型和视图做
全局拦截器, 拦截所有请求
<mvc:interceptor> <mvc:mapping path="/**"/>
/**配置,表示 拦截所有路径
<mvc:exclude-mapping path=""/>
配置不需要拦 截的路径
<bean class="com.itheima.interceptor.Interceptor1" />
✎ 学习目标
1
拦截器的使用 掌握
拦截器的定义和
3 配置方式
拦截器的执行流程
2
✎ 主讲内容
15.1 拦截器概述 15.2 拦截器的执行流程 15.3 应用案例
主讲内容
Speech content
✎ 15.1 拦截器概述
什么是拦截器?
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器 (Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截 器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
拦截器的执行流程是怎样的呢?
在前面小节已经学习了拦截器的定义和配置,并且了解了拦截器中 的三个方法,接下来的两个小节,将针对单个拦截器和多个拦截器的执 行流程进行详细讲解。
✎ 15.2.1 单个拦截器的执行流程
单个拦截器,在程序中的执行流程如下图所示:
CustomInterceptor (preHandle)
✎ 15.2.1 单个拦截器的执行流程
Hibernate
的学习案例
二级缓存
案例代码
为了验证上面所讲解的单个拦截器 执行流程,接下来,就通过一个案 例来演示说明,详细代码请查看教 材15.2.1小节。
✎ 15.2.2 多个拦截器的执行流程
多个拦截器(假设有两个拦截器Interceptor1和Interceptor2,并且在配置文 件中, Interceptor1拦截器配置在前),在程序中的执行流程如下图所示:
CXF拦截器拦截请求和发送时的报文
CXF拦截器拦截请求和发送时的报⽂cxf 可以对请求和发送时的报⽂进⾏拦截,然后对其进⾏加⼯成我们想要的格式,然后再放到回去我实现的是⾃定义拦截器1.在需要拦截的⽅法上⾯加上这个注解,注解⾥⾯是我们的⾃定义拦截器@OutInterceptors(interceptors = { "com.deloitte.tms.vat.webservice.result1.CDATAOutInterceptor" })@InInterceptors(interceptors="com.deloitte.tms.vat.webservice.result1.ArtifactOutInterceptor")2.对返回时的格式进⾏拦截实例,如果public CDATAOutInterceptor() { //这⾥代表流关闭之前的阶段,这很重要!可以到官⽹去看,拦截的阶段分为很多种super(Phase.PRE_STREAM);}Phase.PRE_STREAM写的阶段不对可能会对想要的结果有影响,我开始写的Send和Write都是不⽣效的,⽹上也有好多博⽂写的是这种踩到坑了!import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import org.apache.cxf.helpers.IOUtils;import org.apache.cxf.io.CachedOutputStream;import org.apache.cxf.message.Message;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;public class CDATAOutInterceptor extends AbstractPhaseInterceptor<Message> {private static final Logger log = LogManager.getLogger(ArtifactOutInterceptor.class);public CDATAOutInterceptor() { //这⾥代表流关闭之前的阶段,这很重要!可以到官⽹去看,拦截的阶段分为很多种super(Phase.PRE_STREAM);}@Overridepublic void handleMessage(Message message) {/*这⾥是通过注解的⽅式来加<!CDATA[[]]>的格式* message.put("disable.outputstream.optimization", Boolean.TRUE);* XMLStreamWriter writer =* StaxUtils.createXMLStreamWriter(message.getContent(OutputStream.class* )); message.setContent(XMLStreamWriter.class, new* CDATAXMLStreamWriter(writer));*/try {OutputStream os = message.getContent(OutputStream.class);CachedStream cs = new CachedStream();message.setContent(OutputStream.class, cs);message.getInterceptorChain().doIntercept(message);CachedOutputStream csnew = (CachedOutputStream) message.getContent(OutputStream.class);InputStream in = csnew.getInputStream();String xml = IOUtils.toString(in);System.out.println("replaceBegin" + xml); //转换的⽅式xml = xml.replace("<body>", "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?><body>").replace("<returnMessage>", "<returnMessage><![CDATA[").replace("</returnMessage>", "]]></returnMessage>").replace("<returnCode>", "<returnCode><![CDATA[").replace("</returnCode>", "]]></returnCode>");// 这⾥对xml做处理,处理完后同理,写回流中System.out.println("replaceAfter" + xml);IOUtils.copy(new ByteArrayInputStream(xml.getBytes()), os);cs.close();os.flush();message.setContent(OutputStream.class, os);} catch (Exception e) {log.error("Error when split original inputStream. CausedBy : " + "\n" + e);}}private class CachedStream extends CachedOutputStream {public CachedStream() {super();}protected void doFlush() throws IOException {currentStream.flush();}protected void doClose() throws IOException {}protected void onWrite() throws IOException {}}}如果上请求的数据量过⼤的话:会出现传输的xml获取不到数据的情况。
一步一步学Spring Boot:微服务项目实战(第2版)
7.3.1监听器Listener开发 7.3.2项目启动缓存数据 7.3.3更新缓存数据 7.3.4测试
8.1 Log4J概述 8.2集成Log4J2
8.3使用Log4J记录 日志
8.4思考题
8.2.1引入依赖 8.2.2添加Log4J配置 8.2.3创建log4j2.xml文件
8.3.1打印到控制台 8.3.2记录到文件 8.3.3测试
19.4.1 H2概述 19.4.2 Spring Boot集成H2
19.5.1 Postman概述 19.5.2 Postman的简单使用
19.6.1 AB概述 19.6.2 AB测试
1
20.1回顾入口 类
20.2
2
SpringAppli
cation执行流
程
3 20.3
springbootstarter原理
读书笔记
讲解清晰易懂,也比较全面。 讲了很多实践性的案例,也描述了多了个常用starter的作用和使用,总体不错,可以温故知新。 一本告诉你springboot有什么以及可以有什么的书,可惜没有告诉为什么以及怎么做。 springboot的基本应用与配置都有介绍,少了原理性的论述,更多的是实战开发,比较适合我现在的阶段, 会买纸质书支持!!。 看目录感觉挺全的,然后我就看了下mock那,真的是入门中的入门,就一段,方法就介绍了一两个,真的有 点失望。 整体上讲的不是很深,有的地方想看看怎么实现的就一带而过了,比如限流、降级等,推荐初学者看,还是 很有收获的。
3.1 Spring Data JPA介绍
3.2集成Spring Data JPA
3.3集成测试 3.4思考题
3.1.1 Spring Data JPA介绍 3.1.2核心接口Repository 3.1.3接口继承关系图
拦截器的作用说明
struts2默认各个拦截器的作用说明2010-07-23 15:25(1)在xml配置文件中配置拦截器和拦截器栈都是以“<i nterc eptor s>”开头,以“</inter cepto rs>”结尾。
(2)配置拦截器的格式如上面代码所示以“<inter cepto r/>”格式显示,其中两个属性name是拦截器名字,另一个是对应的类路径,因为之前也已经说过其实拦截器也是一个普通的Ja va对象。
(3)拦截器栈的格式是以“<inte rcept or-st ack >”开头,以“</in terce ptor-stack>”结尾。
其中属性n ame是拦截器栈名字。
在“<i nterc eptor-stac k >”和“</in terce ptor-stack>”之间可以设置拦截器。
如代码所示格式为“<int ercep tor-r ef />”,其中n ame属性也是拦截器名字。
如果系统运行拦截器栈都是按照拦截器栈中定义的拦截器先后顺序执行拦截器。
请读者仔细查看那个基础栈配置,其中配置的拦截器都是在x ml 文件中定义的拦截器。
注意:拦截器栈中不单单可以配置拦截器,它甚至还可以配置拦截器栈。
比如在“valid ation Workf lowSt ack”拦截器栈中就配置了“basic Stack”拦截器栈。
这样的话,配置的子拦截器栈中的拦截器也会被执行。
这就类似于父集合和子集合的概念。
(4)针对st ruts-defau lt.xm l文件中各个拦截器配置,笔者一一做介绍,因为如果使用Stru ts2在W eb项目开发中,这些拦截器都是默认缺省的会被执行的。
《开发者突击:精通AOP整合应用开发》读书笔记模板
这是《开发者突击:精通AOP整合应用开发》的读书笔记模板,暂无该书作者的介绍。
谢谢观看
5.1编写Aspect方面类 5.2编写Advice通知函数 5.3 JoinPoint输入参数 5.4下一个主题:关联Aspect核心类
6.1匹配模式语言 6.2匹配表达式 6.3第1种关联方式:使用Annotation定义关联 6.4第2种关联方式:使用XML文件定义关联 6.5下一个主题:AspectWerkz在Java EE项目中的应用
7.1安装Java EE项目的开发环境 7.2运行Java EE项目 7.3开发前的准备工作 7.4应用一:开发AOP日志记录器 7.5应用二:开发AOP性能分析器 7.6应用三:开发AOP权限检查拦截器 7.7程序结构图 7.8下一个主题:AspectJ应用篇
01
第8章 AspectJ入 门基础
19.1选择@Aspect还是Schema 19.2开发前的准备工作 19.3应用一:AOP日志记录器 19.4应用二:AOP性能分析器 19.5应用三:AOP权限检查拦截器 19.6应用四:AOP异常监视器 19.7应用五:AOP在线用户监视器 19.8程序结构图 19.9下一个主题:Spring与AspectJ的集成
9.1使用AspectJ命令行开发 9.2使用Ant任务进行开发 9.3下一个主题:在Eclipse中使用AJDT开发AspectJ应用
10.1 AJDT下载与安装 10.2 AJDT应用开发详解——开发实例AspectJHelloWorld 10.3 AJDT的高级功能 10.4 AspectJ与其他IDE的集成 10.5下一个主题:AspectJ核心语法详解
02
第9章 AspectJ应 用开发详解
03
Java三大器之拦截器(Interceptor)的实现原理及代码示例
Java三⼤器之拦截器(Interceptor)的实现原理及代码⽰例1,拦截器的概念java⾥的拦截器是动态拦截Action调⽤的对象,它提供了⼀种机制可以使开发者在⼀个Action执⾏的前后执⾏⼀段代码,也可以在⼀个Action执⾏前阻⽌其执⾏,同时也提供了⼀种可以提取Action中可重⽤部分代码的⽅式。
在AOP中,拦截器⽤于在某个⽅法或者字段被访问之前,进⾏拦截然后再之前或者之后加⼊某些操作。
⽬前,我们需要掌握的主要是Spring的拦截器,Struts2的拦截器不⽤深究,知道即可。
2,拦截器的原理⼤部分时候,拦截器⽅法都是通过代理的⽅式来调⽤的。
Struts2的拦截器实现相对简单。
当请求到达Struts2的ServletDispatcher时,Struts2会查找配置⽂件,并根据配置实例化相对的拦截器对象,然后串成⼀个列表(List),最后⼀个⼀个的调⽤列表中的拦截器。
Struts2的拦截器是可插拔的,拦截器是AOP的⼀个实现。
Struts2拦截器栈就是将拦截器按⼀定的顺序连接成⼀条链。
在访问被拦截的⽅法或者字段时,Struts2拦截器链中的拦截器就会按照之前定义的顺序进⾏调⽤。
3,⾃定义拦截器的步骤第⼀步:⾃定义⼀个实现了Interceptor接⼝的类,或者继承抽象类AbstractInterceptor。
第⼆步:在配置⽂件中注册定义的拦截器。
第三步:在需要使⽤Action中引⽤上述定义的拦截器,为了⽅便也可以将拦截器定义为默认的拦截器,这样在不加特殊说明的情况下,所有的Action都被这个拦截器拦截。
4,过滤器与拦截器的区别过滤器可以简单的理解为“取你所想取”,过滤器关注的是web请求;拦截器可以简单的理解为“拒你所想拒”,拦截器关注的是⽅法调⽤,⽐如拦截敏感词汇。
4.1,拦截器是基于java反射机制来实现的,⽽过滤器是基于函数回调来实现的。
(有⼈说,拦截器是基于动态代理来实现的)4.2,拦截器不依赖servlet容器,过滤器依赖于servlet容器。
hp operations agent 用户指南说明书
HP Operations Agent 软件版本:12.00Windows®、HP-UX、Linux、Solaris和AIX操作系统用户指南文档发布日期:2015年9月软件发布日期:2015年9月法律声明担保HP产品和服务的唯一担保已在此类产品和服务随附的明示担保声明中提出。
此处的任何内容均不构成额外担保。
HP不会为此处出现的技术或编辑错误或遗漏承担任何责任。
此处所含信息如有更改,恕不另行通知。
受限权利声明机密计算机软件。
必须拥有HP授予的有效许可证,方可拥有、使用或复制本软件。
按照FAR12.211和12.212,并根据供应商的标准商业许可的规定,商业计算机软件、计算机软件文档与商品技术数据授权给美国政府使用。
版权声明©Copyright HP机密Hewlett-Packard Development Company,L.P.商标声明Adobe®是Adobe Systems Incorporated的商标。
Microsoft®和Windows®是Microsoft公司集团在美国的注册商标。
UNIX®是The Open Group的注册商标。
本产品包含“zlib”通用压缩库,Copyright©1995-2002Jean-loup Gailly and Mark Adler。
致谢本产品包含由Eric Young(*****************)编写的加密软件。
本产品包含由OpenSSL Project(/)开发用于OpenSSL工具包的软件。
本产品包含由Tim Hudson(*****************)编写的软件。
本产品包含“zlib”通用压缩库,Copyright©1995-2002Jean-loup Gailly and Mark Adler。
文档更新此文档的标题页包含以下标识信息:l软件版本号,用于指示软件版本。
光电检测技术与应用(第2版)郭培源学习
8
光电信息技术
9、光电人工智能和机器视觉 10、光(电)逻辑运算和光(电)计算机及光电数据存储 11、生物光子学
本课程着重在第5、6、7三个方面的一些基本知识,
电控制一体化。 向人们无法触及的领域发展。 光电跟踪与光电扫描测量技术。
23
光电检测技术的应用
一、在工业生产领域的应用
在线检测:零件尺寸、产品缺陷、装配定位…. 现代工程装备中,检测环节的成本约占50~70%
24
检测技术在汽车中的应用日新月异
汽车传感器:汽车电子控制系统的信息源,关键部件,核心技术内容 普通轿车:约安装几十到近百只传感器, 豪华轿车:传感器数量可多达二百余只。
即:光电检测的元器件、系统、方法和应用。
9
光电检测技术
检测与测量 光电传感器:
– 基于光电效应,将光信号转换为电信号的一种光电器件 – 将非电量转换为与之有确定对应关系的电量输出。
光电检测技术:是利用光电传感器实现各类检测。
它将被测量的量转换成光通量,再转换成电量,并综合 利用信息传送和处理技术,完成在线和自动测量
非PN结 电子管类
其他类
实例
PN光电二极管(Si,Ge, GaAs) PIN光电二极管(Si) 雪崩光电二极管(Si, Ge) 光电晶体管(Si) 集成光电传感器和光电晶闸管(Si)
光电元件(CdS, CdSe, Se, PbS) 热电元件(PZT, LiTaO3, PbTiO3) 光电管,摄像管,光电倍增管
色敏传感器
固体图象传感器(SI,CCD/MOS/CPD型)
基于拦截器机制的编辑器上传附件的自动清理
在 线文本 编辑器 ,也称 为富文本 编辑器 ,是一种
的修 改和删除, 特 别是对文档 中附件对 象的更新操作, 如上传 新的附件 以替换原有附件 或是取消链接、删除 图片等, 从文档 中删 除或取消 附件对象 并不会 从服 务
Struts2的拦截器配置
拦截器实例
public class SimpleInterceptor extends AbstractInterceptor { private String name; public void setName(String name) { = name; } public String intercept(ActionInvocation invocation) throws Exception { LoginAction action = (LoginAction)invocation.getAction(); ......... String result = invocation.invoke(); ...... return result; } }
Struts 专题篇
第九章 Struts 2 的拦截器 主讲:陈宝峰
内容描述
● ● ● ● ● ●
拦截器概述 拦截器配置 使用拦截器的配置 使用默认拦截器的配置 拦截器实例 方法过滤
拦截器概述
● ●
拦截器是 Struts 2 中的重要组成部分 大量的内建拦截器完成了大部分的 Struts2 框架的工作
结束
使用默认拦截器的配置
<package name=” 包名” > <interceptors> <interceptor name=” 拦截器名 1” class=”......” /> ...... <interceptor-stack name=” 拦截器栈名 1”> <interceptor-ref name=” 拦截器名 1” /> ...... </interceptor-stack> </interceptors> <default-interceptor-ref name=” 拦截器名或拦截器栈名” /> <action ...... /> </package>
航空航天概论智慧树知到答案章节测试2023年西安航空学院
第一章测试1.活塞式发动机和螺旋桨推进的飞机是不能突破“音障”的,_____的出现解决了这一问题。
A:内燃机B:蒸汽机C:涡轮喷气发动机D:电动机答案:C2.在克服地球引力而进入太空的航天探索中, ______科学家戈达德提出火箭飞行的飞行原理,并导出脱离地球引力所需的 7.9 km /s的 ______。
A:德国第二宇宙速度B:英国第一宇宙速度C:美国第一宇宙速度D:英国第二宇宙速度答案:C3.在冷战期间,美国人觉得载人飞船这种不能重复航天器太贵了,不划算,因此研制了像火箭一样发射,但像飞机一样返航的航天器()A:人造地球卫星B:航天飞机C:运载火箭D: 国际空间站答案:B4.航空航天之间没有什么联系A:对B:错答案:B5.空乘需要有良好的国际礼仪、非常好的心理素质和身体素质。
A:对B:错答案:A第二章测试1.最为常见的一种增生装置是 ______。
A:尾翼B:机翼C:襟翼D:副翼答案:C2.平流层中空气沿铅垂方向的运动较弱,因而该层气流______A:比较平稳但能见度较差B:比较平稳且能见度较好C:不稳定且能见度差D:虽不稳定但能见度较好答案:B3.超声速气流流过激波时,气流的速度将减小。
A:错B:对答案:B4.哪款战斗机第一次做出“眼镜蛇”机动动作?A:F-22B:Su-37C:Su-27D:F-18答案:C5.当返回舱重新回到稠密的大气时,会与大气摩擦产生大量的热。
这些热量会使返回舱周围的空气电离,形成等离子层。
这个时段,宇航员与地面指挥人员之间的通信将会中段,我们把这一段时间叫做黑障区。
A:对B:错答案:A第三章测试1.活塞发动机具有的优点?A:技术成熟B:寿命长C:结构简单D:价格便宜E:油耗低答案:ABCDE2.液体火箭发动机主要用途A:轨道转移B:姿态修正与控制C:航天器发射D:火箭弹、导弹发动机E:航天器发射和飞机起飞的助推发动机答案:ABC3.钢铁作为最早被人类使用的金属之一,其成本低廉,强度大,还耐高温,但是它的重量太大,不能大规模使用,因此只分布在飞机上一些高温、高负载区域,比如发动机附近以及机翼、尾翼的接头等处。
