【问题标题】:HTTP Status 500 - Servlet.init() for servlet spring-dispatcher threw exceptionHTTP 状态 500 - servlet spring-dispatcher 的 Servlet.init() 抛出异常
【发布时间】:2015-12-10 08:46:02
【问题描述】:

我正在学习 Spring MVC,当我尝试运行 html 文件时,它会给出错误 HTTP Status 500 - Servlet.init() for servlet spring-dispatcher throw exception

这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>`<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <display-name>FirstSpringMVC</display-name>

    <servlet>
        <servlet-name>spring-dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>


    <servlet-mapping>
        <servlet-name>spring-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

这是我的 spring-dispatcher-servlet

<?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">


    <bean id="HandlerMapping" class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <bean name = "/welcome.html" class = "com.ankitud.hellocontroller.HelloController"/>

    <bean id = "viewResolver"
     class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name = "prefix">
            <value>/WEB-INF/</value>
        </property>

        <property name = "suffix">
            <value>.jsp</value>
        </property>
    </bean>
</beans>

这是我的jsp页面

<html>
    <head>
        <title>First MVC Application</title>
    </head>
    <body>

    <h1>First MVC Application</h1>
    <h2>${welcomemessage}</h2>      

    </body>
</html>

这是我的 HelloController 类

package com.ankitud.hellocontroller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class HelloController extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception{

        ModelAndView modelandview = new ModelAndView("HelloPage");
        modelandview.addObject("welcomemessage", "Hi User, welcome to the first Spring MVC application");

        return modelandview;

    }

}

这是我得到的例外

javax.servlet.ServletException: Servlet.init() for servlet spring-dispatcher threw exception
 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

我正在使用 Eclipse 4.5.1、Tomcat 8.0.30 和 Spring 4.2.3。

【问题讨论】:

  • 这是整个堆栈,还是您在日志中有一个根本原因堆栈?

标签: java


【解决方案1】:

你错过了 web.xml 中的这个块尝试添加它:

 <web-app...>

  <!-------- DispatcherServlet definition goes here----->
   ....
   <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/spring-dispatcher-servlet.xml</param-value>
   </context-param>

   <listener>
   <listener-class>
     org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
 </web-app>

【讨论】:

  • 它有助于摆脱错误 HTTP 状态 500 - Servlet.init() 但现在我得到“HTTP 状态 404 - /FirstSpringMVC/welcome.html 类型状态报告消息 /FirstSpringMVC/welcome.html描述 请求的资源不可用。”这个错误。
  • @Ankit Jain 尝试在此处指定正确的 URL:/ 可能使用 * like /* ,为什么你有 .jsp 但在 url 你有welcome.html?
  • 我试过 /* 但还是不行。 Welcome.html 通过 绑定到 HelloContoller,最终它的 HelloPage.jsp 将在最后显示。实际上我正在通过 youtube 教程学习 Spring MVC 并遵循他们正在做的事情,这就是我所理解的,如果我在某个地方错了,请纠正我。
  • 我发现了一些东西,.jsp 在这一行有一条警告消息说“单词 jsp 拼写不正确“,这会是问题吗?
  • @AnkitJain:你找到解决方案了吗?我也面临同样的问题
【解决方案2】:

在 spring-dispatcher-servlet.xml 中而不是下面的代码

   <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

尝试使用此代码

<?xml version="1.0" encoding="UTF-8"?>
<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">

我试过了,它对我有用。 编码愉快。

【讨论】:

    【解决方案3】:

    这可能为时已晚,但我是未来任何寻求帮助者的解决方案。代码中缺少 2 个块:

    1. 在你的web.xml里面,你需要添加

    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/spring-dispatcher-servlet.xml</param-value>
    </context-param>
    
     <listener>
       <listener-class>
         org.springframework.web.context.ContextLoaderListener
       </listener-class>
    </listener>
    1. 上述更改将帮助您摆脱 HTTP 状态错误 500。但您现在最终会收到 HTTP 状态错误 404,这是因为在您的类中,即 HelloController.java 您需要在上面导入添加 @Controller 注释你的类定义是这样的

    @Controller
    public class HelloController extends AbstractController {
    
        //Your class content goes here
    
    }

    这将解决您的路由问题,现在您可以访问 /welcome.html。尽管您仍然会看到 ${welcomemessage} 在您路由到 /welcome.html 时的样子。最后为了在jsp页面上看到实际的对象数据,只需添加

    &lt;%@ page contentType="text/html; charset=UTF-8" isELIgnored="false" %&gt;

    就是这样!这将帮助您访问 Jsp 页面中的欢迎消息对象。希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 2019-07-29
      • 2013-02-04
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 2014-01-18
      • 2015-12-01
      • 1970-01-01
      相关资源
      最近更新 更多