在webapp的包里面的web.xml里,注册前端控制器DispatcherServlet。
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<url-pattern>/</url-pattern>
这里是映射请求地址的,除了.jsp的,都可以匹配捕获(/*就可以连同.jsp一起拦截)。
在控制器类中
@Controller
public class TestController {
@RequestMapping("/")
public String index(){
return "index";
}
}
@RequestMapping(value = {"/testRequestMapping")
public String success(){
return "success";
}
@RequestMapping(value = {"/testRequestMapping")和@RequestMapping("/")两个注解中,我当时的问题就是,为什么同样都有value值,会先匹配后者,而不是前者。后来通过测试最终才解决:因为Tomcat中搭建的时候
里面设置的URL就是项目名称+/结尾,没有其他的东西,所以是匹配@RequestMapping("/")这个。
<url-pattern>/</url-pattern>当时理解是可以拦截其他的,为啥不匹配其他的。其实它只是可以拦截,具体是什么值,就配对什么。准确说它是来什么拦截什么,而不是有什么匹配什么,比如,请求的是"/"那么就拦截到这个,控制器里面就只匹配"/"。而不是控制器有多个方法,任意都能匹配,这是错误的。这里的"/"是具体的,而<url-pattern>/</url-pattern>里的"/"是可以对应多种的。