• 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,小结

  • 相关阅读:
    SVM的新理解
    特征提取,特征选择
    条件随机场
    分类、检测、识别
    matlab fgetl()
    matlab fopen()
    rar ubuntu
    makefile for opencv
    [洛谷P1231] 教辅的组成
    [洛谷P1514]引水入城
  • 原文地址:https://www.cnblogs.com/snidget/p/3428576.html
Copyright © 2020-2023  润新知