我试图让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";
}
}
我在这里做错了什么? 提前致谢
答案 0 :(得分:0)
servlet映射中的URL模式提供了部分URL,因此相对而言,控制器中的URL不必包含maping中指定的URL部分。
在访问/bots/
@RequestMapping(value = "/", method = RequestMethod.GET, headers = "Accept=*")
正如chrylis所说,使用旧的代码,网址将为/bots/bots/