(四)注解的处理器映射器和适配器的使用
目录
配置
springMvc的默认配置文件
在包 spring-webmvc-4.3.12.RELEASE.jar/org/springframework/web/servlet/DispatcherServlet.properties 下面有个名叫 DispatcherServlet.properties 配置文件 ;
里面是 springMvc 自己的默认配置
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
    org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
里面 springMVC 自己默认加载了许多的 适配器 、映射器、视图解析器 处理异常解析器 等等 ;
也就是说,假如我们在 springMvc.xml不做任何配置,就会使用这里的默认配置 ;
但是对于注解映射器和适配器,里面默认加载的时候 2.5 版本的,但是 spring 3.1 版本之后,有了新的实现,但是在默认配置文件里边并没有添上 ;
我们需要在 springMvc.xml 中配置,让它使用新的实现 :
    <!--让注解使用新的映射器、适配器实现-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
可以使用 <mvc:annotation-driven/> ,这个标签会加载上面配置的注解的映射器、适配器,并且还默认加载了许多参数绑定方法,因此,我们一般都用这个标签,代替上面的配置 ;
使用注解自定义开发处理器
之前自定义开发处理器,都是实现接口,然后在接口的方法中写逻辑 ;我们也发现,那样每个处理器只能写一个方法(写多个方法也没用,反正最后都只能处理一个地址请求),处理一个 url ;
现在使用注解 @Controller 表示此类是一个处理器,并且不需要实现任何接口,从而我们可以在处理器写多个方法,并且在每个方法上面都使用 @RequestMapping 进行地址的映射 ,这样一个处理器,就可以处理多个请求映射 ;
/**
 *
 * 使用注解开发处理器类,这样我们在一个处理器类中实现多个方法
 * @author An
 */
@Controller
public class ItemsController3  {
    /**
     * 使用注解进行映射
     * 注解内容写上后缀 .action 或者不写都行,但是最后访问的时候,都要带上 .action  后缀
     * @return
     * @throws Exception
     */
    @RequestMapping("/queryItems3")
    public ModelAndView queryItems() {
        List<Item> items = new ArrayList<>() ;
        Item item1 = new Item();
        item1.setId(22);
        item1.setName("奶茶");
        Item item2 = new Item();
        item2.setId(111);
        item2.setName("锡纸酥肉");
        items.add(item1) ;
        items.add(item2) ;
//        创建 ModelAndView
        ModelAndView modelAndView = new ModelAndView() ;
//        添加model,也就是数据。(键值对)
//        在页面中取数据,就是根据键名
        modelAndView.addObject("items",items) ;
        Map map = modelAndView.getModel();
//        添加视图,也就是界面
        modelAndView.setViewName("/WEB-INF/jsp/Item/ItemController.jsp");
        return modelAndView;
    }
}
注意使用了注解,注解映射器和注解适配器必须一起用,也就是不能进行混搭,比如:使用注解映射器,然后使用配置方式的适配器 ;
批量扫描自定义处理器
之前,我们都是自定义一个处理器,然后去 springMvc.xml 配置文件进行注册,一个一个的注册,很麻烦;
现在使用批量的扫描注册 ;
 <!--批量扫描处理器-->
    <context:component-scan base-package="xin.ijava.ssm.controller"/>                                    

                
            
        
浙公网安备 33010602011771号