-
急!求大神帮忙,为什么eclipse启动Tomcat 项目一直在编译不会停止
2017-06-20 10:36:47我的maven项目之前还能运行,今天启动后就一直在编译 一直到启动时间结束,谁遇到过这情况 ,怎么解决? -
intellij idea 怎么部署javaweb项目(导入的项目和在ide中写的项目)到Tomcat中,详细步骤,为什么不能热部署...
2018-08-02 21:25:08写好了javaweb项目后,之前我一直按照网上的方式尝试了很久,也用了一段时间intellij idea ,现在总结一下部署的方法....简单来说就是一个工具包,只要把项目在这里包装就能够放入Tomcat去运行. 3. 创建...更多IntelliJ IDEA 的操作请参考:https://blog.csdn.net/qq_33442160
写好了javaweb项目后,之前我一直按照网上的方式尝试了很久,也用了一段时间intellij idea ,现在总结一下部署的方法.
1. 查看facets是否配置正确
2. Artifacts到底是什么?
Artifacts是一种用于装载项目资产以便于测试,部署,或者分布式软件的解决方案。简单来说就是一个工具包,只要把项目在这里包装就能够放入Tomcat去运行.
3. 创建war包(war包就是web项目打包后的后缀名,比如普通java项目打包后的后缀名是jar包.)
标注1:使用该方式创建的war包是解压好的,也就是可以进行热部署(热部署就是实时更新修改的java代码或者jsp页面等等)的项目,建议开发时选择这个Exploded的方式打包.
标注2:使用Archive打包的web项目时压缩包,后缀名为.war的压缩包,不支持热部署.
标注3:选择from Modules,从模块中选择要打包的项目.此时打包已经完成:
接着就可以开始配置Tomcat,当然如果你是导入的项目可能需要配置输出目录和jdk,最重要的是配置好web.xml文件和web根目录.
4. 配置Tomcat并部署项目到Tomcat中
点击添加Tomcat服务器.
依次点击添加Tomcat本地服务器.
如果没有下载Tomcat需要自己下载,去官网下载就可以了,网页翻译很方便,都看得懂.
注意:选择Tomcat安装目录即可,不用选择到bin目录里面去.
这里有一个快速修复,可以快速部署项目,但是先不要点击.
看到这里应该明白为什么要使用Artifacts了吧,Artifacts可以把项目包装成war包
部署后的效果:
当然也可以选择Artifacts下面的按钮(External Source)进行导入,如图:
此时你的整个web项目部署已经完成,可能会疑问为什么在Tomcat的webapps目录里面为什么找不到我刚部署的项目可以参考文章:https://blog.csdn.net/qq_33442160/article/details/81347319
5. 项目虽然部署完成了,点击run按钮就可以启动服务器了,但是还可以根据需要进行热部署,我看了网上很多关于热部署的方式,但是都没有将全面或者是方法不可行.
5.1 首先确保三件事情:①:确保勾选了这两个选项
②确保你的war包后缀名有加上exploded.
③确保选择了图片上的按钮:
标注1:这里的选项与Tomcat服务器的选项相同.
On frame detectivation,会监测窗口,idea窗口发生切换则自动更新文件.尽管intellij idea 的说明是切换窗口时更新文件,但还是需要一点时间,速度明显比eclipse的热部署快很多.
6. 项目路径解释
刚刚开始使用intellij idea时还不懂这个配置,启动项目后一直按照原来的方式(本地地址+项目名称)去打开项目,但是一直报错404.
默认设置是 / ,意思是你的项目根路径为localhost:8080/ , 但是这个不是Tomcat的主页吗?实际上Tomcat根本没有加载这个ROOT项目(Tomcat的主页项目名称),只加载了一个自己部署的项目,如果不习惯可以自己加上项目名称,比如:
-
【BUG处理】IDEA启动tomcat不报错,但tomcat中引用的项目非最新版本,导致上传的一些资源存到tomcat目录却...
2020-07-31 16:41:06一直搜索寻找idea如何配置tomcat以及部署,全部都是换汤不换药的千篇一律的帖子,完全没有讲为什么,导致我不知道为什么我的tomcat运行明明没报错,明明已经配置了artifacts了,却还是访问不了localhost:8080/...一直搜索寻找idea如何配置tomcat以及部署,全部都是换汤不换药的千篇一律的帖子,完全没有讲为什么,导致我不知道为什么我的tomcat运行明明没报错,明明已经配置了artifacts了,却还是访问不了localhost:8080/networkliterature,完全不明白war和war explode的区别……
自己摸索了半天,想到最初项目之所以能在tomcat上运行,是因为将项目添加到tomcat的webapps目录下,然后加上受到帖子的提示,才知道配置artifacts的war explode时,实际上里面的Output Directory应该设置到tomcat的webapps下的我的工程,而Output Layout就是配置这个路径里面生成的所有文件。这样才能在tomcat的webapps下面生成我们项目的所有东西。正确配置如下:
先把配置完自动生成的文件贴上来看看:
说明:
1、Output directory:我填写本地tomcat的webapps的路径+我的工程名(工程名这个可以随便写,不过访问时这个URL是项目的根目录的一部分,比如我这么写访问时应该是localhost:8080/networkliterature/index.jsp)
2、Output Layout:真正生成到上面Output directory所配置的目录下的所有文件内容,需要包含上图列出的三个内容。刚开始不配置的时候是这样的:
可以看到Output Layout下啥也没有。接着点击红框框起来的那个小按钮手动创建目录WEB-INF、子目录classes,子目录lib。创建好后就是这样的:
两个子文件夹都是空的。然后将右边的Available Elements的元素分别添加进来,这个元素的作用就是列出你可以被添加进生成目录的文件,里面有一堆maven包,有项目中webapps目录下的文件资源,有项目编译输出的class文件。可以右键选择Navigate查看你是否有配置这些,像这样:
比如我点击模块'networkliterature' compile output的Navigate可以看到这个Project Structure自动跳转到Modules,如下图所示:
这个模块我之前已经配置好输出文件的路径(即class文件的路径,maven项目得配置到“项目\target\classes”和"项目\target\test-classes"下了,而不能配置到out下)。其实模块'networkliterature' compile output的意思就是找到你项目编译后所有生成的class文件,而它正是通过我们配置的输出文件路径去找到所有的class文件。换言之,这里的Modules的输出文件路径配置对了,这个元素就能被我们拿来使用。
所以我们把这个元素模块'networkliterature' compile output拖到classes文件夹下,像这样:
同理,我们将Available Element里面所有maven帮我们下载好的jar包拖到lib目录下(可以一个个拖,也可以全选右键“Put into /WEB-INF/lib”),像这样:
lib搞定之后还差最后一个Web相关资源。直接将右边的Web facet resources拖到WEB-INF的目录下,如下图所示:
可以看到是有点问题的,我们需要手动修改,将‘webapp’ directory contents放到根目录的WEB-INF下,这时会有一个提示如下图所示,不理它就是删。
点击yes后就是这样了(自动删除了WEB-INF和下面的文件web.xml):
这样就配置完成了。
不过有一点要注意,这个‘webapp’ directory contents是我们在项目里配置的webapps文件夹下的东西,里面就是放各种jsp等页面资源+web.xml:
本来这里应该得有个WEB-INF,不过因为我们配置war explode时就是手动将WEB-INF创建出来,所以这里只需要放各种页面资源+web.xml。
这里位置就配置完了,运行启动tomcat之后,可以看到在tomcat的webapps下面看到生成的文件,上面已经贴过一遍了,这次再贴一遍:
稍微说明一下:中间那张图可以看到,它多帮我们生成了一个文件夹META-INF,里面有个MANIFEST.MF文件,这是它自动帮我们生成的,我们不需要手动添加。而同样是中间那张图,有个index.jsp文件,那个文件是我为了方便测试helloworld程序自己拖进去的,上述并且没有配置这个文件。实际开发那些jsp文件都放在WEB-INF里面即可,无需理会这个。
URL访问“localhost:8080/networkliterature/index.jsp”,可以看到访问成功了:
终于……困扰我三四天的bug……解决了7_7
总结:
一直没办法解决这个Bug,首先是产生这个Bug的原因可能有很多,其次网上找的帖子都是只有表象没有实质,都不明白为什么。实在找不到解决办法的时候,就从最本质的分析出发:比如我这里一直访问不到tomcat的我的这个项目,那么可以用排除法,能访问到tomcat其他项目吗?比如tomcat自带的项目examples吗?一般访问项目的时候都是localhost:8080/项目名,比如:
可以看到是可以访问的,而且tomcat也没报错,说明是项目的部署出了问题。在网上找了很多部署的文章都不能解决我的问题后,我开始思考脱离IDE最本质的部署到tomcat的方法是什么?然后看到tomcat自带项目的examples的目录结构,模仿着将artifact配置了出来。怎么模仿的,就是一边试着将右边的Available Element元素拖过来试,一边看生成的文件是否正确,试了四五遍之后就摸索出来了,当然其中也有借鉴一些帖子。
很久没有遇到这种棘手的bug了,感觉归根到底还是对tomcat的部署本质,IDEA的部署本质了解的不够透彻。所以以后得花时间看看IDEA给的官方文档,以及巩固下JDK的基础知识。路漫漫其修远兮,慢慢来吧。
-
请问tomcat的问题
2011-06-01 11:07:00请问什么是tomcat,我也找了一些资料说是容器,但为什么要使用这个容器,我的web程序不能直接运行是为什么,一直只知道使用,还没找到答案,希望给个答案 -
IDEA启动tomcat不报错,tomcat的webapps文件夹没有项目文件,项目的默认URL404
2019-04-21 17:35:50一直搜索寻找idea如何配置tomcat以及部署,全部都是换汤不换药的千篇一律的帖子,完全没有讲为什么,导致我不知道为什么我的tomcat运行明明没报错,明明已经配置了artifacts了,却还是访问不了localhost:8080/...这个问题困扰了我三四天了。
一直搜索寻找idea如何配置tomcat以及部署,全部都是换汤不换药的千篇一律的帖子,完全没有讲为什么,导致我不知道为什么我的tomcat运行明明没报错,明明已经配置了artifacts了,却还是访问不了localhost:8080/networkliterature,完全不明白war和war explode的区别……
自己摸索了半天,想到最初项目之所以能在tomcat上运行,是因为将项目添加到tomcat的webapps目录下,然后加上受到帖子的提示,才知道配置artifacts的war explode时,实际上里面的Output Directory应该设置到tomcat的webapps下的我的工程,而Output Layout就是配置这个路径里面生成的所有文件。这样才能在tomcat的webapps下面生成我们项目的所有东西。正确配置如下:
先把配置完自动生成的文件贴上来看看:
说明:
1、Output directory:我填写本地tomcat的webapps的路径+我的工程名(工程名这个可以随便写,不过访问时这个URL是项目的根目录的一部分,比如我这么写访问时应该是localhost:8080/networkliterature/index.jsp)
2、Output Layout:真正生成到上面Output directory所配置的目录下的所有文件内容,需要包含上图列出的三个内容。刚开始不配置的时候是这样的:
可以看到Output Layout下啥也没有。接着点击红框框起来的那个小按钮手动创建目录WEB-INF、子目录classes,子目录lib。创建好后就是这样的:
两个子文件夹都是空的。然后将右边的Available Elements的元素分别添加进来,这个元素的作用就是列出你可以被添加进生成目录的文件,里面有一堆maven包,有项目中webapps目录下的文件资源,有项目编译输出的class文件。可以右键选择Navigate查看你是否有配置这些,像这样:
比如我点击模块'networkliterature' compile output的Navigate可以看到这个Project Structure自动跳转到Modules,如下图所示:
这个模块我之前已经配置好输出文件的路径(即class文件的路径,maven项目得配置到“项目\target\classes”和"项目\target\test-classes"下了,而不能配置到out下)。其实模块'networkliterature' compile output的意思就是找到你项目编译后所有生成的class文件,而它正是通过我们配置的输出文件路径去找到所有的class文件。换言之,这里的Modules的输出文件路径配置对了,这个元素就能被我们拿来使用。
所以我们把这个元素模块'networkliterature' compile output拖到classes文件夹下,像这样:
同理,我们将Available Element里面所有maven帮我们下载好的jar包拖到lib目录下(可以一个个拖,也可以全选右键“Put into /WEB-INF/lib”),像这样:
lib搞定之后还差最后一个Web相关资源。直接将右边的Web facet resources拖到WEB-INF的目录下,如下图所示:
可以看到是有点问题的,我们需要手动修改,将‘webapp’ directory contents放到根目录的WEB-INF下,这时会有一个提示如下图所示,不理它就是删。
点击yes后就是这样了(自动删除了WEB-INF和下面的文件web.xml):
这样就配置完成了。
不过有一点要注意,这个‘webapp’ directory contents是我们在项目里配置的webapps文件夹下的东西,里面就是放各种jsp等页面资源+web.xml:
本来这里应该得有个WEB-INF,不过因为我们配置war explode时就是手动将WEB-INF创建出来,所以这里只需要放各种页面资源+web.xml。
这里位置就配置完了,运行启动tomcat之后,可以看到在tomcat的webapps下面看到生成的文件,上面已经贴过一遍了,这次再贴一遍:
稍微说明一下:中间那张图可以看到,它多帮我们生成了一个文件夹META-INF,里面有个MANIFEST.MF文件,这是它自动帮我们生成的,我们不需要手动添加。而同样是中间那张图,有个index.jsp文件,那个文件是我为了方便测试helloworld程序自己拖进去的,上述并且没有配置这个文件。实际开发那些jsp文件都放在WEB-INF里面即可,无需理会这个。
URL访问“localhost:8080/networkliterature/index.jsp”,可以看到访问成功了:
终于……困扰我三四天的bug……解决了7_7
总结:
一直没办法解决这个Bug,首先是产生这个Bug的原因可能有很多,其次网上找的帖子都是只有表象没有实质,都不明白为什么。实在找不到解决办法的时候,就从最本质的分析出发:比如我这里一直访问不到tomcat的我的这个项目,那么可以用排除法,能访问到tomcat其他项目吗?比如tomcat自带的项目examples吗?一般访问项目的时候都是localhost:8080/项目名,比如:
可以看到是可以访问的,而且tomcat也没报错,说明是项目的部署出了问题。在网上找了很多部署的文章都不能解决我的问题后,我开始思考脱离IDE最本质的部署到tomcat的方法是什么?然后看到tomcat自带项目的examples的目录结构,模仿着将artifact配置了出来。怎么模仿的,就是一边试着将右边的Available Element元素拖过来试,一边看生成的文件是否正确,试了四五遍之后就摸索出来了,当然其中也有借鉴一些帖子。
很久没有遇到这种棘手的bug了,感觉归根到底还是对tomcat的部署本质,IDEA的部署本质了解的不够透彻。所以以后得花时间看看IDEA给的官方文档,以及巩固下JDK的基础知识。路漫漫其修远兮,慢慢来吧。
-
VM和TOMCAT的理解
2017-05-16 20:52:48JVM和TOMCAT的理解一直没有想过这个问题,究竟TOMCAT是什么,算不算JVM?...那么为什么需要两个容器呢?如果两方都是纯JAVA应用,没有web的需求,那么之间可以通过JVM的方式进行调用。 如果是web应用呢,打交道就JVM和TOMCAT的理解
一直没有想过这个问题,究竟TOMCAT是什么,算不算JVM?
首先JVM肯定都能明白,相当于我们的程序运行的容器,负责加载运行class文件。Tomcat呢? 也是一个容器,不同于JVM的来说,它是一个web容器即servlet的容器。那么为什么需要两个容器呢?
如果两方都是纯JAVA应用,没有web的需求,那么之间可以通过JVM的方式进行调用。
如果是web应用呢,打交道就从Java与Java之间,变成了浏览器与Java应用。HotSpot的JVM是没有提供这个功能的,所以就由tomcat来进行url的识别与处理。在wiki上的定义:
A web container (also known as a servlet container;[1] and compare "webtainer"[2]) is the component of a web server that interacts with Java servlets. A web container is responsible for managing the lifecycle of servlets, mapping a URL to a particular servlet and ensuring that the URL requester has the correct access-rights. A web container handles requests to servlets, JavaServer Pages (JSP) files, and other types of files that include server-side code. The Web container creates servlet instances, loads and unloads servlets, creates and manages request and response objects, and performs other servlet-management tasks. A web container implements the web component contract of the Java EE architecture, specifying a runtime environment for web components that includes security, concurrency, lifecycle management, transaction, deployment, and other services.
一个web容器即servlet容器是一个与java servlet打交道的web服务器。一个web容器负责管理servlet的声明周期,映射URL到指定的servlet,确保url请求具有正确的权限。
web容器用来处理请求到servlet和jsp和其他服务端的文件。web容器创建servlet实例,加载和卸载servlet, 创建管理请求和返回对象,还可以执行其他的servlet管理任务。
web容器需要实现Java EE架构规定的架构,指定web组件运行的环境,包括安全、并发、声明周期管理、事务、部署和其他服务。
这里插一句tomcat的load classes的过程
- Bootstrap 加载jvm提供的$JAVA_HOME/jre/lib/ext下面的jar
- System 加载tomcat本身的jar包
- $CATALINA_HOME/bin/bootstrap.jar 使用main方法启动tomcat server
- CATALINABASE/bin/tomcat−juli.jarorCATALINA_HOME/bin/tomcat-juli.jar 加载tomcat默认的日志jar
- $CATALINA_HOME/bin/commons-daemon.jar 加载daemon jar
- Common 加载tomcat通用的jar
- unpacked classes and resources in $CATALINA_BASE/lib
- JAR files in $CATALINA_BASE/lib
- unpacked classes and resources in $CATALINA_HOME/lib
- JAR files in $CATALINA_HOME/lib
- WebappX 为每个webapp分配classloader,加载每个web应用
从这里能看得到出来,tomcat是基于java的一个应用,提供一个中间件管理系统,tomcat是程序,jvm是平台。
-
Tomcat启动报错,不能正常解析配置文件 Could not load META-INF/services/javax.xml.parsers....
2016-09-09 16:09:46运行环境:Ubantu 14. Tomcat7 声明:此服务器为公司测试服务器,因为...项目在本地运行没有问题,但是发布到服务器就一直报错,不能启动项目;下面是报错 The web application [] registered the JDBC drive -
Struts1.3+spring2.5+hibernate3.2部署tomcat6.0.18报错请教
2009-06-24 18:00:45但不知为什么拿出来运行,查询就报错,现在我推断很有可能是就是页面标签的问题。我下面贴上来一个查询后分页的页面。大家再帮忙看看哪里的标签有问题? <%@ page language="java" pageEncoding=... -
项目启动在[PoolBackedDataSource.java:257] Initializing c3p0 pool...一直卡着不走
2020-07-14 11:51:07项目启动一直卡在那一行不走了,Tomcat重启了几次也不行,百度说可能是数据库配置,可是我的配置的没有问题,用jdbc测试也能连上,最后就看控制台最后一行的信息,看能不能找到什么,然后,果然!!!!我配置的url... -
如何优雅地保证程序不退出?
2019-11-01 09:36:17quartz程序为什么能一直运行不退出? 我们为了让程序保持不退出,一般使用Thread.sleep方法,或者使用一个while无限循环,但是总感觉不太优雅。参考springboot和tomcat的源码写了一个小工具,可以优雅地实现... -
【Java虚拟机】第一章、Java虚拟机是如何产生的
2019-03-07 11:22:40先不讲java虚拟机,我们从最最基本的出发。 当我开始学习java之初,老是听我老师吹牛逼说java能跨...2、为什么tomcat能在各个平台运行,靠的是啥,为啥运行之后访问的东西都是一样的,不会有linux和window的区别... -
SSH整合增删改查求助!删和查功能可以实现,改和增不能
2018-03-17 12:01:18我研究到现在,发现了很诡异的地方……现在增的功能也能实现了,我把roleAction类里的add方法名字换成save,然后jsp里那个也换了jsp的form里action="save",注意,这里没有后缀【我为什么强调后缀是因为这个很诡异的... -
IP与域名
2016-09-06 14:08:11建站前一直不填清楚IP与域名绑定到底是怎么一回事,今天灵光一闪,有点明白了,之前一直郁闷的是为什么当IP与域名绑定的时候不能输入端口号呢?当我的网站运行的时候,如javaweb网站运行时放在tomcat容器下,不指定... -
【新手跪求大神T_T】FLEX上传java服务器端的时候一直提示路径不对 我都快被整疯了
2013-11-06 02:30:13java文件我用tomcat加载的时候没问题为什么还出现这个错误呢 web.xml中 url-pattern :/servlet/UploadFile servlet-name: UploadFile flex的代码是这样的 layout="vertical" horizontalAlign... -
关于我之前学习JavaWeb时遇到的类加载器问题
2020-12-23 12:58:48之前一直没有搞懂这个问题,直到最近开始学习JVM,学到类加载器这里,我好像理解了当时为什么错了。首先,ClassLoader.getSystemClassLoader()拿到的是应用程序类加载器,也叫系统类加载器,然而在Tomcat容器中,... -
Project facet Java version 1.8 is not supported.
2017-09-13 02:07:17在eclipse上运行项目的时候,不知道为什么就不能自动编译了, 改着改着,把tomcat8删除,重新加载项目的时候就报了这个错误, 问题分析: 报错说版本不支持,我也没改过版本,一直是jdk1.8,所以推断不是这个原因... -
hibernate mysql 连接池_hibernate数据库连接池的问题
2021-03-22 10:00:38这个问题可能大部分用过hibernate的开发人员都遇到过,即“tomcat运行一段时间,比如一晚上后,发现原来能打开的网页现在都出现了问题”。探其究竟,其实是数据库访问失败。这又是为什么呢?原来mysql数据库默认的一... -
【Flink】01、flink快速入门
2021-01-07 23:30:47就像tomcat一样,从启动之后就一直处于运行状态,只要有请求事件过来,就会进行处理 二、flink快速体验 当前scala版本为2.11.8 如果在这个版本下,使用scala_2.12和1.10.1版本的话会报错的哦: <dependency>... -
1.1.6 从innodb的索引结构分析,为什么索引的 key 长度不能太长 1.1.7 MySQL的数据如何恢复到任意时间点? 1.1.8 NFS 和 SMB 是最常见的两种 NAS(Network Attached Storage)协议,当把一个文件系统同时通过 ...
-
kubernetes/k8s+SpringCloud全栈技术
2021-02-06 12:12:34为什么要用微服务? 单体架构下的所有代码模块都耦合在一起,代码量大,维护困难,想要更新一个模块的代码,也可能会影响其他模块,不能很好的定制化代码。微服务中可以有java编写、有Python编写的,他们都是靠... -
java 面试题 总结
2009-09-16 08:45:34为什么要有GC? GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域... -
超级有影响力霸气的Java面试题大全文档
2012-07-18 09:47:04为什么要有GC? GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域... -
oracle10G 提示找不到SID
2009-07-07 11:36:32# tnsnames.ora Network ...特别是最后一直有关第的ROWEN 只是这分不知道该派给谁好。 分拿出来总得花吧。不花对不起大家———— ROWEN您就受累接着吧。 再次感谢关注和帮助我的朋友。感谢! -
iuhyiuhkjh908u0980
2009-12-31 19:13:36它跟每日构建的区别就在于代码提交频率更高(一般为一个小时),构建的频率也更高,这样做的目的就是为了快速反馈,使得BUG越早被发现,并能以邮件或者消息(甚至短信)的形式快速反馈给开发人员,从而快速解决问题... -
-
但如果并发的数量很多,而且每个线程都是执行很短的时间便结束了,那样频繁的创建线程和销毁进程会大大的降低系统运行的效率。线程池正是为了解决多线程效率低的问题而产生的,他使得线程可以被复用,就是线程执行...
-
COLA :根据我的了解来看,很多公司的项目都是基于 COLA 进行开发的,相比于其他快速开发脚手架,COLA 并不提供什么已经开发好的功能,它提供的主要是一个干净的架构,然后你可以在此基础上进行开发。通过一行命令就...
-
外文翻译 stus MVC
2010-05-28 15:02:311:外文原文 Struts——an open-source MVC implementation This article introduces Struts, a Model-View-Controller implementation that uses servlets and JavaServer Pages (JSP) technology.... -
网上购物系统
2012-12-18 17:53:18该事件不能对所购买的商品数量的更改而更改,只能通过确认更改来实现。 </p><br /> <p>目</b><b normal"> </b><b normal">录</b><b normal"></b></p> 第一章 系统配置... 3 一、运行环境... 3 二、...