2013-08-02 67 views
0

我收到了沒有找到調度程序servelt的映射。你能否指出我在代碼中的問題所在。我很新的Spring MVC的未在春季爲HTTP請求找到映射mvc

我的錯誤是(我的POM具有EnhancedRoyaltyTool的的artifactId)

No mapping found for HTTP request with URI [/EnhancedRoyaltyTool/] in DispatcherServlet with name 'mvc-dispatcher 

我的web.xml文件

<web-app id="WebApp_ID" 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"> 

    <display-name>Spring Web MVC Application</display-name> 


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




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

我的MVC-調度員的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:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <context:component-scan base-package="com.acxiom.saas.royalty.controller"/> 

    <mvc:annotation-driven/> 



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

</beans> 

我Controller文件

@Controller 
public class SearchController 
{ 

    @ModelAttribute("search") 
    public Search getSearch() 
    { 
     return new Search(); 
    } 


    @RequestMapping(value ="/") 
    public String homePage() 
    { 
     System.out.println("home");  

     return "search";   
    } 

    @RequestMapping(value ="/payRoyalties", method = RequestMethod.POST) 
    public String searchJobs(ModelMap model, @ModelAttribute("search") Search search) 
    { 
     System.out.println(search.getOesNumber() +"TEST"); 
     model.addAttribute("test", "testing modelmap"); 

     return "payRoyalties";  
    } 

} 

我search.jsp的文件

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Search For Jobs</title> 
</head> 
<body> 

    <form:form method="POST" modelAttribute="search" action="payRoyalties" > 
     <table> 
      <tr> 
       <td><form:label path="oesNumber">OES Number</form:label></td> 
       <td><form:input path="oesNumber" /></td> 
      </tr> 
      <tr> 
       <td colspan="2"><input type="submit" value="Search" /></td> 
      </tr> 
     </table> 

    </form:form> 

</body> 
</html> 

我有一個payRoyalties.jsp文件和搜索模式。

+0

您可以搜索「映射到URL」,以檢查其控制器映射到您的特定網址? – Hippoom

+0

你能更詳細地解釋我嗎?我對春天MVC很陌生。當我部署應用程序時,初始主頁本身並未加載。 –

+0

將日誌級別設置爲DEBUG,然後檢查日誌。有沒有像「Mapped」{[/ payRoyalties],......}任何行到公共java.lang.String SearchController .searchJobs(org.springframework.ui.Model)...「當您啓動服務器? – Hippoom

回答

1

在您的班級中沒有名爲search的映射。

您需要您的getSearch()方法

+0

主頁方法指向search.jsp頁面 –

+0

有一件事情,處理程序與jsp名稱無關,您可以將您的jsp重命名爲任何內容並更改getSearch中的返回值方法。您在其中一個方法中添加了'@ModelAttribute(「search」)',這用於您的處理程序中,在其中一個方法參數上添加了相同的註釋。 – varun

0

增加@RequestMapping(值= 「/搜索」),我認爲問題出在你的web servlet配置。之前我曾看到過這種情況,當時Spring將映射URL與映射到JSP文件之間混淆了。

總之,而不是:

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

你應該嘗試:

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/*.html</url-pattern> 
</servlet-mapping> 

然後嘗試用/payRoyalties.html

+0

感謝您的回覆,但是當我更改爲此應用程序未能部署。 –

+0

LOG:重度:甲子容器開始 java.util.concurrent.ExecutionException期間失敗:org.apache.catalina.LifecycleException:未能啓動成分[StandardEngine [卡塔利娜] .StandardHost [本地主機] .StandardContext [/ EnhancedRoyaltyTool]] –

+0

@SandeepRao:它不應該失敗。其他地方一定有問題,你能否給我提供完整的堆棧跟蹤? –

0
@ModelAttribute("search") 
public Search getSearch() 
{ 
    return new Search(); 
} 

訪問控制器上面代碼的部分是混亂的,你有@ModelAttribute中的「搜索」,而@RequestMapping沒有「搜索」,什麼你是否想要這樣做。

請提供日誌以獲取更多幫助。

+0

2013年8月2日上午08時51分23秒org.springframework.web.servlet.DispatcherServlet noHandlerFound 警告:否的DispatcherServlet找到HTTP請求與URI [/ EnhancedRoyaltyTool /]名爲「MVC的調度」映射 –

+0

@ModelAttribute搜索直接在search.jsp頁面中使用。我的理解是,當你的search.jsp加載它時會自動綁定調用getSearch方法並將它綁定到jsp頁面中的搜索對象。 –

+0

是的,我錯過了你有搜索作爲您的處理方法之一定義的模型,這似乎很好。這個問題看起來非常明顯,它表示「在DispatcherServlet中沒有找到具有URI [/ EnhancedRoyaltyTool /]的HTTP請求的映射,這意味着你需要有一個映射到這個URL的處理方法,像'@RequestMapping(」/ EnhancedRoyaltyTool「)' 。希望這是唯一的錯誤 – varun

0

你想這樣的:

@Controller 
@RequestMapping("/search") 
public class SearchController { 
    … 
} 
+0

我不認爲,這是問題所在。因爲他沒有訪問url/search「,請參閱標籤」action =「payRoyalties」,並且已經爲此定義了映射。日誌會清除更多的東西。 – varun

相關問題