zoukankan      html  css  js  c++  java
  • spring笔记1 spring MVC的基础知识1

    1,spring MVC的流程

      优秀的展现层框架-Spring MVC,它最出彩的地方是注解驱动和支持REST风格的url。

     
    流程编号 完成的主要任务 补充
    1 用户访问web页面,发送一个http请求到服务器端的DispatcherServlet 或发送一个ajax请求
    2

    服务器启动的时候加载spring-mvc的配置文件,扫描@Controller注解,得到一个HanderMapping

    (姑且把它叫做url,处理适配器映射,即Map<String,Class> ,String:用户访问的url,Class:url对于的HandlerAdapter类)

    通过用户访问的url,http的方法,请求报文头,请求参数,cookie等来查找是否存在HanderMapping里面,

    如果存在,进入步骤3

    3 得到HandlerAdapter,调用实际的Handler(处理类),处理之后得到ModelAndView,返回到DispatcherServlet 包含视图的名称和所需数据
    4 通过配置的视图解析器ViewResolver,结合ModelAndView的Model数据,得到一个无状态的View(视图对象) 可配置不同的视图解析器,得到视图,比如说常见的jsp,FreeMarker,PDF,xls,报表等
    5 视图对象解析到Http的Response中,返回给用户 用户可以看到不同的视图对应的东西,比如html或者pdf,xls等

       配置DispatcherServlet

       在web.xml中配置,示例如下:

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:app.xml</param-value>
    </context-param>

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

    <servlet>
    <servlet-name>web</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:dispatcher.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>web</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>

    通过url-pattern,获取(截获)对所有的请求url的处理;

    需要注意的地方有几个:

    •  一个web.xml可以配置多个DispatcherServlet,处理不同的请求
    • 可在DispatcherServlet中指定特殊的参数值,比如namespace,指定命名空间,那么如果没有指定contextConfigLocation,默认的配置文件名namespace.xml;contextConfigLocation可以指定多个位置,支持spring的资源路径(支持ant风格和简称代替);publishContext,是否发布到ServletContext中;publishEvent,是否要向容器发布一个ServletRequestHandledEvent事件(为了提高程序的性能,最好显示的关闭);

    这里我有个小小的疑问,这里配置了两个容器,spring容器和springmvc容器,他们的实际关系如何,可否实现互相访问? 留到以后解决,mark一下;

    通过上面的配置,应用启动的时候会初始化好spring MVC的所需组件资源,准备充当她展现层引擎框架的作用,具体准备了哪些组件资源呢?

    查看下源码:如下图所示:有个protected的initStrategies方法,调用了init*的使用方法来完成组件资源的安装,用途从名称可以看出来,

          

    比如这个方法第一步就是初始化spring的文件上传解析器组件,第二步是安装本地化解析相关的组件,以此类推...

    关于具体的组件的种类繁多,可以进入源代码分析;比如文件上传的解析器MultipartResolver,有两种实现

    默认配置哪一种,我在源码目录下找到一个DispatcherServlet.properties的文件,放出来看看,让大家知道实际的组件到底是哪些类控制的:

    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

    比如最常见的ViewResolver默认使用的是org.springframework.web.servlet.view.InternalResourceViewResolver,这是解析jsp常用的视图解析器;

    说了这么多,来个实例轻松下吧!(经典的注册,然后显示出用户列表)这里主要是想说下开发的流程:

    流程编号 详细内容 说明
    1 配置DispatcherServlet,指定配置文件的位置,关闭发布事件  
    2 开发Controller类  
    3 编写视图,比如说jsp  
    4 配置控制器,视图解析器  
    5 测试页面功能  
    6 结合springMVC的流程再回顾下过程,温故知新  

    //todo

    2,spring MVC的注解驱动控制器,rest风格的支持

    3,spring MVC的类型转换,格式转化,输入校验

    4,spring MVC的视图

    5,spring MVC的本地化解析,文件上传,静态资源处理,拦截器,异常处理等

    6,小结

  • 相关阅读:
    BestCoder6 1002 Goffi and Squary Partition(hdu 4982) 解题报告
    codeforces 31C Schedule 解题报告
    codeforces 462C Appleman and Toastman 解题报告
    codeforces 460C. Present 解题报告
    BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
    BestCoder3 1001 Task schedule(hdu 4907) 解题报告
    poj 1195 Mobile phones 解题报告
    二维树状数组 探索进行中
    codeforces 460B Little Dima and Equation 解题报告
    通过Sql语句控制SQLite数据库增删改查
  • 原文地址:https://www.cnblogs.com/snidget/p/3428576.html
Copyright © 2011-2022 走看看