root(“/”)上的spring mvc网站

我想将spring mvc控制器映射到root( /** )路径(而不是像“/ something”这样的子文件夹),同时使用mvc:resources创建exception(对另一个方法开放)。

这应该是该框架的基础知识,但显然是一个非常复杂的问题。

我的app-servlet.xml有这些明显的映射exception:

   

我有这个控制器:

 import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/**") public class MainController { @RequestMapping(method = RequestMethod.GET) public String service(final HttpServletRequest request) { final String servlet_path = request.getServletPath(); System.out.println(String.format("%s %s", new Date().toString(), servlet_path)); return "test"; } } 

现在,当我点击“/”或“/ test”或“/ test / page”时,我得到如下输出:

 Fri Aug 03 00:22:12 IDT 2012 / Fri Aug 03 00:22:13 IDT 2012 /favicon.ico 

..看? 即使明确排除了/favicon.ico也会调用service()

现在我想@Controller对XML有一些“优先级”,但是,如何进行排除呢?

一个简单的要求 – 将网站放在“/”上。

PS 这个答案回答了一个非常相似的问题。

另一个注意事项:这个问题不是关于tomcat的上下文。

这里的问题是与注册的基础HandlerMapping与注册的相比具有非常低的优先级。 如果你的要求只是让某些东西响应“/”,那么更好的方法可能是拥有一个不同的@RequestMapping而不是/**而是将它作为/home并在这些行中定义一些东西:

如果这不起作用,唯一的另一个选择是降低的底层handlerMapping的优先级,这可以通过显式定义HandlerMapping来完成 - 有点复杂但可以完成。

更新这里是一个可能的配置:

先尝试一下:

   

如果仅此一项不起作用, 更改为Spring 3.1.x中的这些行:

                           

我想澄清一下,不是重写 ,而是可以改变处理程序指令的声明顺序: