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的上下文。
这里的问题是与
注册的相比具有非常低的优先级。 如果你的要求只是让某些东西响应“/”,那么更好的方法可能是拥有一个不同的@RequestMapping而不是/**
而是将它作为/home
并在这些行中定义一些东西:
如果这不起作用,唯一的另一个选择是降低
更新这里是一个可能的配置:
先尝试一下:
如果仅此一项不起作用,
更改为Spring 3.1.x中的这些行:
我想澄清一下,不是重写
,而是可以改变处理程序指令的声明顺序: