1

我创建了简单的 spring MVC 控制器,当我尝试执行时出现错误。

错误信息:

org.springframework.beans.factory.CannotLoadBeanCl assException:找不到在 ServletContext 资源 [/WEB-INF/springapp-servlet.xml] 中定义的名称为“Redirect.jsp”的 bean 的类 [SpringApp.web.java.HelloController];嵌套异常是 java.lang.ClassNotFoundException: SpringApp.web.java.HelloController

这是我的应用程序结构。

SpringApp

----Web Pages   
    ----META-INF    
    ----WEB-INF     
        ----springapp-servlet.xml
        ----web.xml
    ----Redirect.jsp    
    ----index1.jsp  
----Source Packages         
    ----java    
        ----HelloController.java




web.xml
--------

        <?xml version="1.0" encoding="UTF-8"?>
         <!--
    To change this template, choose Tools | Templates
    and open the template in the editor.
    -->

     <web-app version="2.4"
             xmlns="http://java.sun.com/xml/ns/j2ee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

      <servlet>
        <servlet-name>springapp</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>

      <servlet-mapping>
        <servlet-name>springapp</servlet-name>
        <url-pattern>*.htm</url-pattern>
      </servlet-mapping>


      <welcome-file-list>
        <welcome-file>
          index1.jsp
        </welcome-file>
      </welcome-file-list>

    </web-app>

springapp-servlet.xml
----------------------


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

    1. This file will be used up by the DispatcherServlet and which contains the bean         definition
    2. The file will be picked up by the specification in the WEB-INF/web.xml using         <servlet>spring</servlet>
    3. hello controller is responsible for handling the request for the particular page     of     the website and known
    as the page controller.
-->

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

      <!-- the application context definition for the springapp DispatcherServlet -->

      <bean name="Redirect.jsp" class="SpringApp.web.java.HelloController"/>

    </beans>

index1.jsp
---------

        <%--
        Document   : index
        Created on : Nov 23, 2012, 11:55:53 AM
        Author     : gopc
    --%>

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h1>Hello World!</h1>
        </body>
    </html>

Redirect.jsp
------------


<%--
    Document   : index
    Created on : Nov 23, 2012, 11:55:53 AM
    Author     : gopc
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Hello Controller redirect</title>
    </head>
    <body>
        <h1>This is redirect from the HelloController!</h1>
    </body>
</html>

HelloController.java
-------------------
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package java;
    /**
     *
     * @author gopc
    */



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

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

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;

    import java.io.IOException;

    public class HelloController implements Controller {

    protected final Log logger = LogFactory.getLog(getClass());

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        logger.info("Returning hello view");
        System.out.println("hi this handlerequest");

        return new ModelAndView("Redirect.jsp");
        }

    }
4

2 回答 2

0

你说:

<bean name="Redirect.jsp" class="SpringApp.web.java.HelloController"/>

这意味着 Spring 期望在包中找到您的控制器SpringApp.web.java。你已经把它放在包里了java

package将控制器中的语句更改为SpringApp.web.java,并将源文件移动到适当的目录SpringApp/web/java

另请注意,该包java是为 Java 平台保留的,因此无论如何您都不应该使用它。

于 2012-11-23T09:45:16.377 回答
0

你不能把你的类放在一个名为java. 这个包是为标准 JDK 类保留的。

如果你的类 HelloController 在包 foo 中,那么它的类名是foo.HelloController. 不是SpringApp.web.foo.HelloController

将 bean 称为“Redirect.jsp”会引起很多混乱。为什么用 JSP 的名称调用控制器 bean?

坦率地说,您似乎没有掌握非常基本的 Java 概念,例如类和包。在玩 Spring 之前,我会先从基础开始,这是一个复杂的野兽。

于 2012-11-23T09:48:28.607 回答