1.1.3. Web MVC Config
    1.1.2中的解析器可以自定义实现,DispatcherServlet检查每个特殊bean的WebApplicationContext,如果没有匹配的自定实现,就使用默认的。

1.1.4. Servlet Config
    Servlet3.0+中可以使用代码的方式配置servlet或者在web.xml中配置。
    
    import org.springframework.web.WebApplicationInitializer;

    public class MyWebApplicationInitializer implements WebApplicationInitializer {

        @Override
        public void onStartup(ServletContext container) {
            XmlWebApplicationContext appContext = new XmlWebApplicationContext();
            appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");

            ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
            registration.setLoadOnStartup(1);
            registration.addMapping("/");
        }
    }

    springmvc提供接口WebApplicationInitializer,实现了此接口的配置将自动被用于初始化Servlet3.0+的容器。
    WebApplicationInitializer的抽象实现类AbstractDispatcherServletInitializer,通过覆盖指定Servlet映射和DispatcherServlet配置位置的方法,使注册DispatcherServlet更容易。

    // 基于代码的配置
    public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

        @Override
        protected Class<?>[] getRootConfigClasses() {
            return null;
        }

        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class<?>[] { MyWebConfig.class };
        }

        @Override
        protected String[] getServletMappings() {
            return new String[] { "/" };
        }
    }

     // 基于xml的配置
     public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

        @Override
        protected WebApplicationContext createRootApplicationContext() {
            return null;
        }

        @Override
        protected WebApplicationContext createServletApplicationContext() {
            XmlWebApplicationContext cxt = new XmlWebApplicationContext();
            cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
            return cxt;
        }

        @Override
        protected String[] getServletMappings() {
            return new String[] { "/" };
        }
    }

    AbstractDispatcherServletInitializer中如何添加Filter?
    public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

        // ...

        @Override
        protected Filter[] getServletFilters() {
            return new Filter[] {
                new HiddenHttpMethodFilter(), new CharacterEncodingFilter() };
        }
    }

1.1.5. Processing

    - 搜索WebApplicationContext并将其绑定在请求中,流程中的controller和其他元素可以使用。
            DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE
    - 语言环境解析器绑定到请求,以使流程中的元素解析在处理请求(呈现视图,准备数据等)时要使用的语言环境。
    - 主题解析器绑定到请求,以使诸如视图之类的元素确定要使用的主题。
    - 如果指定多部分文件解析器,则将检查请求中是否有多媒体。
            如果找到多媒体,则将该请求包装在MultipartHttpServletRequest中,以供流程中的其他元素进一步处理。
    - 搜索适当的处理程序。 如果找到处理程序,则执行与处理程序(预处理器,后处理器和控制器)关联的执行链,以准备模型或渲染。
            或者,对于带注释的控制器,可以呈现响应(在HandlerAdapter中),而不是返回视图。(???)
    - 如果返回了model,则渲染视图。如果没有任何model返回,则视图不会被渲染,可能由于安全原因该请求被前置处理器或后置处理器拦截。

    -web.xml中的定制参数
        init-params:{contextClass,contextConfigLocation,namespace,throwExceptionIfNoHandlerFound}

1.1.6. Interception
    - preHandle(..): B在执行实际的处理程序之前执行
    - postHandle(..): 在执行实际的处理程序之后执行
    - afterCompletion(..):在请求完成后执行
    -   postHandle对有@ResponseBody和@ResponseEntity注解的方法用处不大,这个方法的结果已经在postHandler之前提交了,
            此时在postHandler中去做修改,比如修改额外的请求头已经晚了。
            对于这种情况,可以实现ResponseBodyAdvice并将其声明为Controller Advice Bean或直接在RequestMappingHandlerAdapter上对其进行配置。

springmvc<二> 一些配置的更多相关文章

  1. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(2 配置spring-dao和测试)

    用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 搭建目录环境和依赖) 四:在\resources\spring 下面 ...

  2. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)

    引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一   的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...

  3. 利用maven开发springMVC项目(二)——框架配置

    申明:主要内容来源于大神博客(使用IntelliJ IDEA开发SpringMVC网站(二)框架配置),我只是用eclipse自己练习使用,记录下来也只是为了学习使用,没有任何的商业用途,侵权必删. ...

  4. SpringMVC框架入门配置 IDEA下搭建Maven项目

    初衷:本人初学SpringMVC的时候遇到各种稀奇古怪的问题,网上各种技术论坛上的帖子又参差不齐,难以一步到位达到配置好的效果,这里我将我配置的总结写到这里供大家初学SpringMVC的同僚们共同学习 ...

  5. SpringMVC最基础配置

    SpringMVC和Struts2一样,是前后台的一个粘合剂,struts2用得比较熟悉了,现在来配置一下SpringMVC,看看其最基础配置和基本使用.SpriingMVC不是太难,学习成本不高,现 ...

  6. springmvc web.xml配置之 -- SpringMVC IOC容器初始化

    SpringMVC IOC容器初始化 首先强调一下SpringMVC IOC容器初始化有些特别,在SpringMVC中除了生成一个全局的spring Ioc容器外,还会为DispatcherServl ...

  7. spring 5.x 系列第2篇 —— springmvc基础 (代码配置方式)

    文章目录 一.搭建hello spring工程 1.1 项目搭建 1.2 相关注解说明 二.配置自定义拦截器 三.全局异常处理 四.参数绑定 4.1 参数绑定 4.2 关于日期格式转换的三种方法 五. ...

  8. spring 5.x 系列第1篇 —— springmvc基础 (xml配置方式)

    文章目录 一.搭建hello spring工程 1.1 项目搭建 1.2 相关配置讲解 二.配置自定义拦截器 三.全局异常处理 四.参数绑定 4.1 参数绑定 4.2 关于日期格式转换的三种方法 五. ...

  9. springmvc流程图以及配置

    springmvc:是完成数据的封装和跳转的功能 流程图如下: springmvc的配置流程 1.导入jar包 二.配置servlet文件 init-param的作用是在启动servlet启动时规定其 ...

随机推荐

  1. VSCode--HTML代码片段(基础版,react、vue、jquery)

    起因是最近在学习前端,看的网上的demo也是在react.vue.jquery之间穿插,为了方便一键生成html模板(懒)写demo,有了以下折腾. 本人使用的前端编辑工具是vscode(方便.懒), ...

  2. 主动关闭 tcp fin-wait-2 time-wait 定时器

    后面整理相关信息 //后面整理相关信息 /* * This function implements the receiving procedure of RFC 793 for * all state ...

  3. PyQt5信号与槽关联的两种方式

    目录 通过QtDesigner 手动关联的方式 通过QtDesigner 单击菜单栏切换到信号槽编辑模式 单击控件并拖动鼠标到信号的接收对象上,一般为对话框自己,松开鼠标弹出信号和槽选择框 选中cli ...

  4. UNIX目录访问操作

    1.目录访问相关函数: DIR* opendir (const char * path ); struct dirent* readdir(DIR *dirptr) ;参数是一个指向dirent 结构 ...

  5. Java泛型中<?> 和 <? extends Object>的异同分析

    相信很多人和我一样,接触Java多年,却仍旧搞不清楚 Java 泛型中 <?>和 <? extends Object>的相似和不同.但是,这应该是一个比较高端大气上档次的Que ...

  6. UNP——第二章,TCP状态,TIME_WAIT

    状态可以用 netstat 验证 加粗线为 数据交换. 可以看出,TCP在 建立连接和 关闭连接,耗费资源, 因为UDP只需要两次数据通信即可. 但UDP没有可靠传输,和流量控制. 上面协商的MSS为 ...

  7. linux修改网卡的mac地址

    linux在安装一些软件的时候可能会用到修改主机的mac地址的问题,在网卡配置文件 /etc/network/interface 中添加mac地址的方式我在修改重启机器后没有生效,所以采用其他方式 在 ...

  8. Flink处理函数实战之二:ProcessFunction类

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. 字典序问题(Java)

    Description 在数据加密和数据压缩中常需要对特殊的字符串进行编码.给定的字母表A由 26 个小写英文字母组成A={a,b,-,z}.该字母表产生的升序字符串是指字符串中字母按照从左到右出现的 ...

  10. new Date在不同浏览器识别问题

    原文 http://www.cnblogs.com/yangxiaopei/articles/4708157.html 4. 正确的做法 以下列出正确的做法: var time1 = (timesta ...