• (四)注解的处理器映射器和适配器的使用


    目录


    配置

    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"/>
  • 相关阅读:
    【BZOJ-4031】小z的房间 Matrix-Tree定理 + 高斯消元解行列式
    无题
    【BZOJ-4261】建设游乐场 最大费用最大流
    【BZOJ-2888】资源运输 LCT + 启发式合并
    【Codeforces666E】Forensic Examination 后缀自动机 + 线段树合并
    【BZOJ-2142】礼物 拓展Lucas定理
    【BZOJ-3672】购票 树分治 + 斜率优化DP
    【BZOJ-3218】a+b Problem 最小割 + 可持久化线段树
    【BZOJ-1913】signaling信号覆盖 极角排序 + 组合
    【BZOJ-4408】神秘数 可持久化线段树
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665661.html
Copyright © 2020-2023  润新知