2014-08-27 55 views
0

我試圖讓Tapestry和DispatcherServlet在我的應用程序內共存,但這使我瘋狂。我知道我必須在web.xml中定義Servlet,爲它分配一個URL,因爲Tapestry被分配到/*我必須排除Tapestry AppModule中的Servlet URL。如何映射DispatcherServlet on/foo/* Tapestry映射到/ *

public static void contributeIgnoredPathsFilter(
     final Configuration<String> configuration) { 
    configuration.add("/bots/.*"); 
} 

然後,在web.xml我有我的servlet定義

<!-- Restlet adapter --> 
<servlet> 
    <servlet-name>BotService</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
    <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>BotService</servlet-name> 
    <url-pattern>/bots/*</url-pattern> 
</servlet-mapping> 

而且如果它的事項,在applicationContext.xml中的相關配置進行到此已經設置這樣

<mvc:annotation-driven/> 
<context:component-scan base-package="com.viktortech.automaton.rest" /> 

當然模式是可以的,因爲碼頭和Dispatcher Servlet啓動完美無缺。問題是,沒有問題我如何定義@RequestMapping註釋值,我什麼也沒得到,但404的努力達到我的控制器類(這是com.viktortech.automaton.rest包下的所有定義。

@Controller 
public class WelcomeController { 

    @ResponseBody 
    @RequestMapping(value = "/bots/", method = RequestMethod.GET, headers = "Accept=*") 
    public String plaintext(HttpServletResponse response) { 
     response.setContentType("text/plain"); 
     response.setCharacterEncoding("UTF-8"); 
     return "HELLO"; 
    } 

} 

我在做什麼錯在這裏? 在此先感謝

+1

要下手,具體談談你認爲你已經嘗試了映射,隨着一切整個GET請求你嘗試過的轉儲(例如,顯示的代碼,它會在'/ bots/bot /')。你有沒有嘗試刪除'method'和'headers'的縮小說明符?您是否在日誌中確認控制器實際上正在加載? – chrylis 2014-08-27 10:07:34

+0

對我而言,我並不瞭解url映射是如何工作的,簡單樸實,我嘗試了一些關於通配符和絕對路由的內容,但從未想過servlet定義中的指定url將提供部分路由給映射,我只是認爲我的行爲像一個正則表達式來匹配。 – Trigork 2014-08-27 10:19:48

回答

0

在servlet映射URL模式提供的URL的一部分,所以比較,在控制器的URL不必包含在馬平指定的URL的一部分。

只有改變控制器的一段代碼它會像這樣工作,當accesing /bots/

@RequestMapping(value = "/", method = RequestMethod.GET, headers = "Accept=*") 

由於chrylis說,與舊的代碼,則URL將/bots/bots/