Servlet.init() for servlet action threw exception 异常解决办法

tomcat 经常会报一些莫名其妙的异常:如下 

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet action threw exception
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	java.lang.Thread.run(Thread.java:595)

 

root cause

java.lang.NullPointerException
	org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003)
	org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)
	org.apache.struts.action.ActionServlet.init(ActionServlet.java:482)
	com.dc.idm.ui.action.init.InitServlet.init(InitServlet.java:68)
	javax.servlet.GenericServlet.init(GenericServlet.java:211)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	java.lang.Thread.run(Thread.java:595)

 

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.20 logs.

 

这个问题主要是由于配置文件对应不上造成的,也就是说你的web.xml文件中关于struts的配置说明( struts -[*-config.xml])在指定的目录下没找到造成的,如:

 

<init-param>
            <param-name>config/console/workflow</param-name>
            <param-value>
                /WEB-INF/struts-conf/struts-flow.xml
            </param-value>
        </init-param>

 

 

而在       /WEB-INF/struts-conf/struts-flow.xml 下并没有找到 struts-flow.xml文件,此时,就会报这个错!!请校正~

### 解决 Spring DispatcherServlet 初始化时抛出异常的问题 在 Spring 框架中,`DispatcherServlet` 是一个关键组件,用于处理 Web 请求并将其分发到相应的控制器。如果 `DispatcherServlet` 在初始化过程中抛出异常(`Servlet.init() for servlet dispatcherServlet threw exception`),通常与 `spring-servlet.xml` 文件未找到或配置错误有关。以下是问题的详细分析及解决方案: #### 1. 确保 `spring-servlet.xml` 文件路径正确 `DispatcherServlet` 的初始化依赖于 `web.xml` 文件中定义的 `contextConfigLocation` 参数。如果该参数值不正确,`DispatcherServlet` 将无法找到 `spring-servlet.xml` 文件[^1]。确保 `web.xml` 文件中的配置如下所示: ```xml <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 如果 `spring-servlet.xml` 文件位于其他目录下,请根据实际路径调整 `<param-value>` 的值。 #### 2. 检查 `spring-servlet.xml` 文件内容 即使路径正确,如果 `spring-servlet.xml` 文件内容存在语法错误或配置不当,也可能导致初始化失败。以下是一个标准的 `spring-servlet.xml` 配置示例: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 扫描指定包下的控制器 --> <context:component-scan base-package="com.example.controller" /> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans> ``` 确保文件中的 XML 声明、命名空间和 Schema 定义正确无误[^1]。 #### 3. 检查依赖范围 如果项目使用 Maven 构建,某些依赖项可能被错误地设置为 `provided` 或 `test` 范围,这可能导致运行时缺少必要的类[^3]。例如,以下是一个常见的 Servlet API 依赖配置: ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> ``` 如果使用的是 Spring Boot,则需要确保未排除 Tomcat 依赖[^2]。例如: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` #### 4. 检查 IDE 配置 在开发环境中,IDE 可能未正确识别资源文件夹,导致 `spring-servlet.xml` 文件未被复制到目标目录中。在 IntelliJ IDEA 中,可以通过以下步骤解决此问题: - 右键点击 `resources` 文件夹,选择 **Mark Directory as** -> **Resources Root**。 - 如果上述方法无效,可以尝试通过 **File** -> **Invalidate Caches / Restart** 来清理缓存并重启 IDE[^4]。 #### 5. 检查日志信息 如果问题仍未解决,建议检查完整的异常堆栈信息以定位具体原因。例如,以下是一个典型的异常堆栈信息: ```plaintext javax.servlet.ServletException: Servlet.init() for servlet dispatcherServlet threw exception org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) ``` 从堆栈信息中,可以进一步确认是哪个组件或配置导致了问题。 --- ###
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值