当Tapestry映射到/ *时,如何在/ foo / *上映射DispatcherServlet

时间:2014-08-27 09:36:57

标签: spring-mvc servlets tapestry

我试图让Tapestry和DispatcherServlet在我的应用程序中共存,但它让我疯狂。我知道我必须在web.xml中定义Servlet,为它分配一个URL,因为Tapestry被分配给/*我必须在Tapestry AppModule中排除Servlet URL。

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

当然模式是可以的,因为jetty和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 个答案:

答案 0 :(得分:0)

servlet映射中的URL模式提供了部分URL,因此相对而言,控制器中的URL不必包含maping中指定的URL部分。

在访问/bots/

时,只更改Controller代码就可以这样工作
@RequestMapping(value = "/", method = RequestMethod.GET, headers = "Accept=*")

正如chrylis所说,使用旧的代码,网址将为/bots/bots/