1. java 代码和C++ 代码的类比
java 的代码编译之后就会变成一个war包;这个war就相当于C++的.so 文件,要想让这个war能提供服务,处理query请求;
就需要一个web容器来把war包解压到一个工作目录,然后把java代码run起来;这样才能提供服务,处理手打的query。
则会给web 容器常用的有三种:Tomcat jetty Jboss ,web 容器的作用相当于C++启动的进程服务(可以是多 进程、多线程)
2. 那web 容器dryrun java代码的过程
- 在web容器对应的xml 配置文件中:jetty/etc/jetty-webapps.xml
设定我们的war 存放的目录;这样web 容器在启动时就去这个目录找需要解压的war包 - web 找到这个war后会把war 解压开,用war包里面的代码来处理query 请求:
在我们容器的启动脚本startjetty.sh 中会设置war解压的目录:-Djava.io.tmpdir="$JETTY_CONF_HOME/work" ;如果没有设置默认是/tmp/
- 因为任务java代码运行都需要jvm;所以在web容器启动时也把jvm的参数设置好,然后启动web容器(jetty),就可以用刚才war解压出来的
代码进行提供服务,处理收到的query请求。
3. 如果不是web 服务,只是一个java的服务或者task任务;
那就不需要web 容器,只需要jdk(jvm);设置好jvm参数后就可以启动这个java进程、task、服务
4. 编译的理解
- C++ 都是一个一个 .cpp的文件,需要gcc 把所有的.cpp 文件整合成一个.o 的可以执行文件(这个文件是把所有的.cpp文件整合成一个);那这个文件可以运行
处理对应的请求。
- java 也是一个一个文件(class),需要用编译器movan 把这些一个一个的文件整合编译成一个可执行的war包(web 服务器),或者一个jar包(jvm task)任务;