• springmvc<二> 一些配置


    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上对其进行配置。

  • 相关阅读:
    Linux压缩和解压类指令
    Linux 搜索查找类指令
    Linux时间日期类指令
    Linux文件目录类指令
    Linux帮助指令
    Linux运行级别
    微信授权获取code/openid
    微信公众配置
    MySQL规范
    PHP7搭建项目遇到的坑
  • 原文地址:https://www.cnblogs.com/woooodlin/p/13043177.html
Copyright © 2020-2023  润新知