Java EE 9 Jersey启动报错:Servlet.init()抛出异常求助
兄弟,我刚入门Java Web的时候也被这种初始化坑折磨过好几天,太懂你现在的崩溃感了!咱们先把问题拆解清楚,一步步来排查:
首先先把你遇到的错误信息明确列出来:
HTTP Status 500 – Internal Server Error
类型:异常报告
消息:Servlet.init() for servlet [com.recnav.api.RestApp] threw exception
描述:服务器遇到意外状况,无法完成请求。
异常堆栈:javax.servlet.ServletException: Servlet.init() for servlet [com.recnav.api.RestApp] threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.jav...
核心排查方向(按优先级来)
先抓完整的异常堆栈:你贴的堆栈被截断了,后面藏着的根异常才是真凶!赶紧去Tomcat的
logs目录找localhost.log或者catalina.out文件,把完整的错误堆栈扒出来——比如可能是ClassNotFoundException(找不到依赖类)、NullPointerException(初始化时某个对象没实例化)、或者REST框架的配置错误(比如Jersey的包扫描路径写错)。检查
RestApp的初始化逻辑:你的RestApp类里的init()方法(或者如果用了JAX-RS的Application子类,就是构造/配置代码)做了什么?比如是不是加载配置文件时路径写错了?初始化数据库连接池时参数不对?如果是REST服务,看看@ApplicationPath注解的路径是不是合法,或者getClasses()/getSingletons()里有没有漏加资源类?验证依赖是否正确:如果是Maven/Gradle项目,检查pom.xml/build.gradle里的依赖:
- Servlet API的依赖要设为
provided(因为Tomcat自带,避免类加载冲突) - REST框架(比如Jersey、Spring Web)的版本是不是和Tomcat兼容?比如Tomcat 9对应Servlet 4.0,别用太新的框架版本
-有没有漏加必要的依赖?比如Jersey的核心包、JSON处理包之类的
- Servlet API的依赖要设为
检查web.xml配置(如果用了的话):如果不是用注解注册Servlet,而是在web.xml里配置的
RestApp,看看:<servlet>的class属性是不是完全限定名(com.recnav.api.RestApp)有没有拼写错?<init-param>里的配置项(比如扫描包路径)是不是正确?<servlet-mapping>的url-pattern是不是和你访问的路径匹配?
用排除法缩小范围:暂时把
RestApp里的初始化代码注释掉,只保留最基础的空实现,看看服务器能不能正常启动。如果能,再一点点把代码加回去,找到哪一行触发了异常——这种笨办法对新手排查问题特别管用!
慢慢来,入门Java Web遇到这种初始化错误太正常了,找到根异常就解决了一半!
内容的提问来源于stack exchange,提问作者Eno Hoxha

