2012-04-03 149 views
4

我開始使用Spring 3.1開發一個新項目,並深入瞭解所有關於如何使用@Controller註釋的文檔和論壇意見。Spring MVC 3.1沒有註釋?

我個人不喜歡使用MVC註釋;我更喜歡使用SimpleUrlHandlerMapping在一個地方提供一個webapp的所有URL。

此外,從以前使用Spring 2.x的許多工作中,我非常習慣BaseCommandController方法。

我一直都很喜歡Spring,因爲它不受限制地賦權。現在我發現Spring MVC迫使我將URL放入java源代碼中,這意味着(a)我無法將控制器映射到多個URL,(b)發現Web應用程序中正在使用的URL,我必須掃描通過不同的java源文件,我覺得不切實際。

將@Controller與SimpleUrlHandlerMapping結合使用的推薦方法是什麼?


更新:

戴夫嗨,你說,你可以對應多個網址,這樣(從petclini.web.ClinicController改變)?

@RequestMapping({"/vets", "/another"}) 
public ModelMap vetsHandler() { 

如果這工作的話很好。

雖然我的問題仍然存在: 如果我不想在我的Java源代碼中的URL,如何最好地將它們映射到@Controller類?

此致,

+0

我不知道你不能映射多個網址,你有一個文檔的參考嗎? – 2012-04-03 11:54:01

+0

使用@(用戶名)作爲註釋來回應評論 - 如果您向某人提出嵌入在原始問題中的問題,他們可能永遠無法看到它。我問*你*是否已更改,如果有,請提供文檔鏈接。就我個人而言,我會使用[this](https://github.com/bclozel/springmvc-router)進行路由;我把自己推出,但顯然其他人也這樣做了。 – 2012-04-03 12:37:39

+0

@Dave Newton:感謝您的鏈接,我將研究這一點。 (順便說一句:我回答了這個問題,所以我可以格式化代碼) – Stewart 2012-04-03 12:41:57

回答

3

這是一個簡單的設置,以支持註釋和未註釋的控制器。

調度servlet配置XML

<mvc:annotation-driven/> 
<bean id="testController" class="com.test.web.TestController"/> 
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
     <value> 
     /test=testController 
     </value> 
    </property> 
    <property name="order" value="0"/> 
</bean> 

一個簡單的URL映射到控制器

public class TestController implements Controller { 

    @Override 
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 
     PrintWriter responseWriter = response.getWriter(); 
     responseWriter.write("test"); 
     responseWriter.flush(); 
     responseWriter.close(); 
     return null; 
    } 
} 

MVC的註解配置

@Controller 
@RequestMapping("/home") 
public class HomeController { 

    @RequestMapping(method = RequestMethod.GET) 
    @ResponseBody 
    public String dashboard(Model model, HttpServletRequest request) { 
     return "home"; 
    } 
} 

如果你想使用自己的處理程序控制器@Controller註釋。你可以看看ClassPathBeanDefinitionScannerDefaultAnnotationHandlerMapping.determineUrlsForHandlerMethods

+0

這看起來是有效的,我想這是一種方法,但我特別關注@Controller和SimpleUrlHandlerMapping,而不是Controller接口 - 特別是現在不贊成使用此接口的許多實現。 – Stewart 2012-07-05 13:04:40

+0

聽起來像是一個子類的計劃:http://grepcode.com/file/repo1.maven.org/maven2/org.springframework/spring-webmvc/3.1.0.RELEASE/org/springframework/web/servlet/mvc/註釋/ DefaultAnnotationHandlerMapping.java#DefaultAnnotationHandlerMapping.determineUrlsForHandler%28java.lang.String%29也許這就是springmvc路由器試圖做的? – Stewart 2012-07-05 16:44:02