-
下载Tomcat10.1.26源码
-
使用idea打开项目,需要引入maven。但IDEA 2024.1.4右键项目后找不到添加框架
Add Framework Support。方法一:本来我想通过设置,把Add Framework Support添加到Project View Popup Menu下,但是添加完还是没有,所以通过方法二。
方法二:先选中项目,IDEA中菜单Help - Find Action中查找Add Framework Support
3. 引入Maven,加入缺失依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.1</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxrpc</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.38.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>jakartaee-migration</artifactId>
<version>1.0.8</version>
</dependency>
<dependency>
<groupId>biz.aQute.bnd</groupId>
<artifactId>biz.aQute.bndlib</artifactId>
<version>5.2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
- 但仍然提示缺失
java.lang.foreign.*,看了下缺失类例如,就搜了下java.lang.foreign.ValueLayout。
import java.lang.foreign.Arena;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.ValueLayout;
显示java.lang.foreign.ValueLayout为jdk19后的类。不理解但是还是更新到22了。
- 最后终于找到了Bootstrap的main方法要开始启动了但是一访问,报JasperException错误。
- org.apache.jasper.JasperException: java.lang.NullPointerException: Cannot invoke "jakarta.servlet.jsp.JspFactory.releasePageContext(jakarta.servlet.jsp.PageContext)" because "org.apache.jsp.index_jsp._jspxFactory" is null
org.apache.jasper.JasperException: java.lang.NullPointerException: Cannot invoke "jakarta.servlet.jsp.JspFactory.releasePageContext(jakarta.servlet.jsp.PageContext)" because "org.apache.jsp.index_jsp._jspxFactory" is null
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:612)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:488)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:377)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:325)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
- java.lang.NullPointerException: Cannot invoke "jakarta.servlet.jsp.JspFactory.releasePageContext(jakarta.servlet.jsp.PageContext)" because "org.apache.jsp.index_jsp._jspxFactory" is null
java.lang.NullPointerException: Cannot invoke "jakarta.servlet.jsp.JspFactory.releasePageContext(jakarta.servlet.jsp.PageContext)" because "org.apache.jsp.index_jsp._jspxFactory" is null
org.apache.jsp.index_jsp._jspService(index_jsp.java:435)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:67)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:456)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:377)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:325)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
**):注意** 主要问题的全部 stack 信息可以在 server logs 里查看
- 根据JasperException猜测是缺失tomcat-jasper包,因此添加依赖tomcat-jasper。
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>10.1.26</version>
</dependency>
- 启动Tomcat,启动成功。
总结:
- 看官网Tomcat10.1.x对应的java应该就是11及以后就可以了。但是不知道为什么一开始用的17就是不行。但升级到22才解决。
- 没理解这个tomcat-jasper包,没细搜。总之主要目的是先把源码跑起来以后再研究。