发现可以在springmvc的配置文件中注释掉处理器映射器和处理器适配器的配置(可省略不配置映射器和适配器),重新测试发现依然可以正确的访问Controller,得到预期的内容。
问题:为什么可以省略?
因为SpringMVC具有默认的配置。
在spring-webmvc/org.springframework.web.servlet/DispatcherServlt.properties配置文件中,已经配置好了SpringMVC的默认配置,通过查看该配置文件可以发现如下内容:
基于注解的SpringMVC配置:
AnnotationController.java
package com.its.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/**
* 基于注解的SpringMVC Controller。
* 使用注解,自定义的Controller不需要继承指定的类或者实现指定的接口
*/
@Controller // 标记为SpringMVC的Handler对象
@RequestMapping("/its")
public class AnnotaionController {
@RequestMapping("/hello")
public ModelAndView show(){
ModelAndView mv = new ModelAndView("hello2");
mv.addObject("msg", "我的第一个基于注解的SpringMVC应用");
return mv;
}
}
springmvc-servlet.xml
hello2.jsp视图页面
简化在springmvc配置文件中添加Controller的bean的操作:使用标签扫描包
问题:查看SpringMVC源码,发现默认的映射器和适配器都已经过期了,不推荐使用。
根据源码中注释的内容中可以发现,官方推荐使用其它代替的映射器和适配器,分别是:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
和
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
将以上两个推荐使用的映射器和适配器配置到springmvc的配置文件中(保留扫描包的配置),
再次执行hello.action,查看dubug日志,发现新配置映射器和适配器都已经生效。
注解驱动:
使用了注解启动之后,使用的注解的映射器和适配器都是推荐使用的映射器和适配器。可以理解为:SpringMVC默认配置的升级版。
使用了<mvc:annotation-driven />之后,就可以不用配置映射器和适配器了。