2017-07-07 76 views
1

我想在導航到我的Web應用程序的根目錄時點擊控制器的readTasks方法。我在該方法中設置了一個斷點,但在服務器上進行調試時沒有打斷它。我正在使用Eclipse。如何在Spring MVC中調用控制器方法

我很喜歡:http://localhost:8080/ToDoList/我看到了我的索引頁,但是控制器方法沒有被調用。

我的控制器:

import java.util.List; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.ResponseBody; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
public class TaskController { 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public List<TaskEntity> readTasks() 
    { 
     TaskEntityDao tasks = new TaskEntityDaoImpl(); 
     return tasks.getAllTasks(); 
    } 
} 

我的web.xml:

<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" > 

    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

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

    <servlet-mapping> 
     <servlet-name>Dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

我相信我錯過了一些配置初始化控制器,但我不知道如何去做。我是否需要一個包含初始化應用程序中每個控制器的配置文件?

+0

你有沒有彈簧配置文件? – Jobin

+0

我沒有 - 我意識到這是非常基本的東西,但我真的不知道如何寫它來初始化我的控制器... – petehallw

+0

在你的控制器中添加一個postconstruct方法,並在那裏放置一個斷點,看看控制器正在初始化 – Plog

回答

1

你需要做一個Spring MVC的配置,在您的web.xml

<servlet> 
    <servlet-name>Dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/mvc-dispatcher-servlet.xml</param-value> 
    </init-param> 
</servlet> 

然後讓mvc-dispatcher-servlet.xml下WEB-INF文件夾中。

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

    <!-- enable to scan spring annotations, specify on web package --> 
    <context:component-scan base-package="id.swhp.spring.web"/> 
    <!-- Enable Spring MVC Anotations --> 
    <mvc:annotation-driven/> 

</beans> 
+0

感謝您的回答 - 在web.xml中它引用了'dispatcher-config.xml',但是接下來您會說'make mvc-調度員servlet.xml中」。這些不應該被命名爲相同嗎?我在'base-package = [mypackage]'中試過了我的包名,但是它仍然沒有初始化我的控制器。控制器是否需要註明什麼?謝謝 – petehallw

+0

我剛剛從spring文檔複製而不知道它有不同的命名,但是它應該在控制器類上有相同的名稱(已經編輯過我的文章)給出'@ Controller'或@ RestController'註釋。 –

+0

謝謝,很好的答案,但我仍然沒有擊中我的控制器。我在'base-package'中指定了我的控制器所在的包,而我的控制器用'@ RestController'註釋。 – petehallw

1

您需要編寫一個Spring配置文件,其中包含您的控制器所在軟件包的組件掃描。這將告訴Spring在Spring上下文加載時初始化此控制器。那麼你需要你的servlet指向此配置:

<servlet> 
    <servlet-name>Dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/dispatcher-config.xml</param-value> 
    </init-param> 
</servlet> 
相關問題