Tomcat及其JSP/Servlet引擎对JDK、JRE的依赖咨询(含Tomcat9求证)
嘿,我来帮你把这些关于Tomcat和JDK/JRE依赖的问题掰扯清楚,顺便纠正你对Tomcat 9的一些小误解~
1. Tomcat对Java JDK和JRE是否存在依赖?
答案是肯定的,但分两种情况:
- 必须依赖JRE:Tomcat本身是用Java编写的Web容器,它的核心运行完全依赖JRE(Java运行时环境)——没有JVM和JRE提供的核心类库,Tomcat根本启动不起来。
- JDK是可选但按需依赖:如果只是部署和运行已经编译完成的Web应用(比如打包好的WAR包,里面只有
.class字节码文件),那有JRE就足够了;但如果你的Web应用里包含需要动态编译的内容(比如JSP文件),或者你需要自己开发、编译Servlet/JSP代码,那你就必须安装JDK了。
2. Tomcat的JSP/Servlet引擎对JDK和JRE的依赖关系,以及你的理解纠正
首先得给你指个小错误:你说“将Servlet编译为字节码(.java)”这里写错啦,正确的流程是JSP先转译成Servlet的.java源码文件,再编译成.class字节码文件~
接下来咱们详细拆解:
- Jasper 2(Tomcat 9的JSP引擎)的依赖:
Tomcat 9确实使用Jasper 2作为JSP引擎,它的工作流程是:把JSP文件解析并转译为对应的Servlet.java源码,再将这份源码编译成.class字节码,最后由Servlet引擎加载执行。
你提到的Eclipse JDT编译器没错,Jasper 2默认用它来替代JDK自带的javac。但这不代表完全不需要JDK:Eclipse JDT虽然可以独立完成编译动作,但它仍然需要JDK提供的核心类库(比如rt.jar)来做编译时的类型校验、类引用解析等工作。如果你的Tomcat只在JRE环境下运行,而JRE里没有完整的JDK类库,那Jasper 2很可能无法完成JSP的编译工作,这时候你要么安装JDK,要么在Tomcat的配置里指定JDK的路径。 - Servlet引擎的依赖:
Tomcat的Servlet引擎(比如核心的Catalina组件)本身是运行在JRE之上的,因为它是Java程序,必须依赖JRE的JVM和核心类库才能启动和运行。对于已经编译好的Servlet(.class文件),只需要JRE就能加载执行;但如果是从JSP转译过来的动态Servlet,那编译过程就需要依赖JDK相关的类库支持,这时候就离不开JDK了。
内容的提问来源于stack exchange,提问作者Peng
相关产品推荐
相关产品推荐

