Spring MVC的学习笔记

基于注解形式配置Spring MVC

一、注册并初始化DispatcherServlet,由Servlet容器自动检测并启动

注解形式

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletCxt) {

        // Load Spring web application configuration
        AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext();
        ac.register(AppConfig.class);
        ac.setServletContext(servletCxt);
        ac.refresh();

        // Create and register the DispatcherServlet
        DispatcherServlet servlet = new DispatcherServlet(ac);
        ServletRegistration.Dynamic registration = servletCxt.addServlet("app", servlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/app/*");
    }
}

XML形式

<web-app>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/app-context.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>app</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>app</servlet-name>
        <url-pattern>/app/*</url-pattern>
    </servlet-mapping>

</web-app>

2.WebApplicationContext层次结构配置SpringMVC

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

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

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

等同于XML配置

<web-app>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>app1</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/app1-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>app1</servlet-name>
        <url-pattern>/app1/*</url-pattern>
    </servlet-mapping>

</web-app>

如果不需要应用程序上下文层次结构,则应用程序可以仅配置“根”上下文,并将contextConfigLocationServlet参数保留为空。

3.特殊Bean类

HandlerMapping

将请求映射到处理程序以及用于预处理和后处理拦截器列表 映射基于某些标准,其细节因HandlerMapping 实施而异

扫描二维码关注公众号,回复: 4619707 查看本文章

两个主要HandlerMapping实现RequestMappingHandlerMapping(支持带@RequestMapping注释的方法)和SimpleUrlHandlerMapping(维护URI路径模式到处理程序的显式注册)。

HandlerAdapter

DispatcherServlet无论实际调用处理程序如何,都可以帮助调用映射到请求的处理程序。例如,调用带注释的控制器需要解析注释。一个主要目的HandlerAdapter是保护DispatcherServlet这些细节。

HandlerExceptionResolver

解决异常的策略,可能将它们映射到处理程序,HTML错误视图或其他目标。请参阅例外

ViewResolver

String将从处理程序返回的基于逻辑的视图名称解析View 用于呈现给响应的实际视图请参阅查看分辨率查看技术

LocaleResolverLocaleContextResolver

解决Locale客户正在使用的问题以及可能的时区问题,以便能够提供国际化的视图。请参阅区域设置

ThemeResolver

解决Web应用程序可以使用的主题 - 例如,提供个性化布局。主题

MultipartResolver

在一些多部分解析库的帮助下,解析多部分请求(例如,浏览器表单文件上载)的抽象。请参阅Multipart Resolver

FlashMapManager

存储和检索“输入”和“输出” FlashMap,可用于将属性从一个请求传递到另一个请求,通常是通过重定向。请参阅Flash属性

说明:应用程序可以声明 处理请求所需的特殊Bean类型中列出的基础结构bean 。该DispatcherServlet检查 WebApplicationContext对每个特殊的豆。如果没有匹配的bean类型,它将回退到列出的默认类型 DispatcherServlet.properties

4.注册SpringMVC与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("/");
    }
}

5.基于Java类进行配置SpringMVC

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[] { "/" };
    }
}

6.基于XML的Spring配置

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[] { "/" };
    }
}

也可以重写并注册多个Filter过滤器

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    /**
    * 每个过滤器都会根据其具体类型添加一个默认名称,并自动映射到
    * DispatcherServlet
    */
    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] {
            new HiddenHttpMethodFilter(), new CharacterEncodingFilter() };
    }
}

猜你喜欢

转载自www.cnblogs.com/XingXiaoMeng/p/10164660.html