(四)注解的处理器映射器和适配器的使用 配置 使用注解自定义开发处理器 批量扫描自定义处理器

目录


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"/>