zoukankan      html  css  js  c++  java
  • SpringMVC的工作流程

    1、简单的谈一下SpringMVC的工作流程?

     流程
    1、用户发送请求至前端控制器DispatcherServlet
    2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
    3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
    4、DispatcherServlet调用HandlerAdapter处理器适配器
    5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
    6、Controller执行完成返回ModelAndView
    7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
    8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
    9、ViewReslover解析后返回具体View
    10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
    11、DispatcherServlet响应用户

    2、简要说说Struts2的处理流程?
    Struts2框架的大致处理流程如下:
    1、加载类(FilterDispatcher)
    2、读取配置(struts配置文件中的Action)
    3、派发请求(客户端发送请求)
    4、调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action )
    5、启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)
    6、处理业务(回调Action的execute()方法)
    7、返回响应(通过execute方法将信息返回到FilterDispatcher)
    8、查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROER,将跳转到哪个jsp页面)
    9、响应用户(jsp--->客户浏览器端显示)
    10、struts2标签库(相比struts1的标签库,struts2是大大加强了,对数据的操作功能很强大)

    请求(.action)---->经过StrutsPrepareAndExecuteFilter 核心控制器---->进入到Struts2的拦截器Interceptor

    (实现代码功能)----->通过action的名称找对应的Action类----->执行Action类的execute方法----->通过exec

    ute方法中返回的字符串,在Struts.xml中找对应的结果页面(result)【在action执行之前,执行了defaultStack

    拦截器栈】
    * 拦截器 在 struts-default.xml定义 【它位于sruts2-core-xxx.jar目录下】
    * 执行拦截器 是 defaultStack 中引用拦截器

    3、 说说Struts2的输入校验流程


    Struts2校验框架进行校验时,将执行以下流程:
    A:类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置成Action的属性值
    B:在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中
    convertionError拦截器将负责将其封装到fieldError里,如果没有异常,直接进入第3步
    C:调用Struts2的内置校验规则进行输入校验
    D:通过反射调用validateXXX()方法
    E:调用Action类中的validate()方法
    F:如果上面的几步中没有出FiledError,就调用Acton中的逻辑处理方法,如果有,则进入input视图
    所以,在进行校验时,别忘记在Action中的配置名为input的结果如:<result name=“input”>validate.jsp</result>


    4、拦截器和过滤器有什么区别?


    ①拦截器是基于java的反射机制的,而过滤器是基于函数回调
    ②过滤器依赖与servlet容器,而拦截器不依赖与servlet容器
    ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
    ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能
    ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
    拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态
    代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字
    符串,甚至在你抛出异常的时候做业务逻辑的操作。


    5、Struts2请求流程


    1、客户端发送请求
    2、请求先通过ActionContextCleanUp-->FilterDispatcher
    3、FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action
    4、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,这儿已经转到
    它的Delegate--Dispatcher来执行
    5、ActionProxy根据ActionMapping和ConfigurationManager找到需要调用的Action类
    6、ActionProxy创建一个ActionInvocation的实例
    7、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用
    8、Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。添加PreResultListener可以在Interceptor中实现。

    6、SpringMVC与Struts2的主要区别?


    ①springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。
    ②springmvc是基于方法开发,传递参数是通过方法形参,可以设计为单例或多例(建议单例),struts2是基于类开发,
    传递参数是通过类的属性,只能设计为多例。
    ③Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request对象内容进
    行解析成方法形参,将响应数据和页面封装成ModelAndView对象,最后又将模型数据通过request对象传输到页面。 Jsp视图解析器默认使用jstl。

  • 相关阅读:
    Java知识点总结
    Eclipse使用中遇到的问题及解决
    Ubuntu--64位系统安装32位的库
    Ubuntu--防火墙的使用
    Ubuntu--手动配置IP地址,网关,DNS
    tcp echo_server
    模板类继承-成员变量不可访问的问题
    brpc channel -负载均衡-NamingService三者之间的关系
    头文件依赖顺序风格
    brpc namingservice的调用栈
  • 原文地址:https://www.cnblogs.com/longyao/p/11720157.html
Copyright © 2011-2022 走看看