`
goofyan
  • 浏览: 14634 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

struts理解

阅读更多
    找工作的时候老是会被问java框架熟悉吗,用哪个框架等等。表示我没用到过,趁现在闲着来粗粗学习下。
    struts源码重要的两个部分是core和xwork-core,前者依赖后者。使用struts有两个配置文件很重要,struts.xml和web-inf/web.xml。struts.xml配置struts的package/action等。org.apache.struts2.config.StrutsXmlConfigurationProvider读struts.xml,解析,加载各个package、constant等。web.xml中配置filter过滤器(FilterDispatcher被废弃,可用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)、filter-mapping(url-pattern:/*,当客户请求的URL和该指定的URL相匹配时,就会触发过滤器)。

    StrutsPrepareAndExecuteFilter是一个Servlet过滤器类。该类实现了接口StrutsStatics和Filter。前者定义了Struts的一些常量类路径,对常用的接口进行了重新封装,比如HttpServletRequest、HttpServletResponse、HttpServletContext等。后者是javax.servlet包的功能,它操纵客户端的请求或响应,在请求到达要访问的资源前或响应发送到客户端前截获之。
    StrutsPrepareAndExecuteFilter类中实现Filter接口中的init、doFilter(chain.doFilter方法将该请求向后续过滤器传递,或者进行跳转等)、destroy方法。

    init参数为FilterConfig,FilterConfig是servlet的类,通过getInitParameter方法读取web.xml配置文件中过滤器初始化参数。init方法中定义prepare和execute对象,分别表示过滤器请求准备和执行的过程,也创建Dispatcher对象。Dispatcher是一个重要的类,进行一系列初始化工作,如保存FilterConfig读取的配置初始化参数,调用StrutsXmlConfigurationProvider读struts.xml等,以及执行一些重要的代码,如serviceAction等。

    doFilter是过滤的具体过程。
    首先是prepare的工作,创建ActionContext(action执行环境,存储session、parameter、ServletContext等信息,ValueStack);调用Dispatcher.wrapRequest将请求和响应重新包装,例如针对请求类型是否为multipart/form-data,生成不同的request子类对象;之后根据requestUrl生成ActionMapping[name,namespace,method,extension,parameter]。
    这之后就是execute的工作了。若当前强求不是一个action(如其他非.action为后缀),以静态资源方式处理,或交给chain.doFilter往下传递;若是个action请求,根据action配置生成执行相应的action。
    首先是由ActionProxyFactory根据actionMapping的属性生成ActionProxy,ActionProxy只是个代理,真正完成创建、执行action工作的是ActionInvocation,在ActionProxyFactory生成ActionProxy的同时,生成ActionInvocation,该对象初始化时createAction->buildAction->buildBean->创建action的类实例。
    随后便是执行相应的action,如DefaultActionInvocation.invoke()方法。Action被一个或者多个拦截器所包围,所有的用户请求都会被拦截器所拦截,所有拦截器处理完后交给Action处理,处理结果以逻辑视图方式返回给用户。用户可以自己配置拦截器,即在struts.xml中定义如package/interceptors/interceptor,同时在package/action/interceptor-ref中引用。invoke方法实现了截拦器的递归调用,即调用Interceptor.intercept,intercept方法又调用invoke(),就会往下找到下一个拦截器。直到拦截器全部调用完毕,执行invokeAction,根据class、method,利用反射机制执行方法
分享到:
评论

相关推荐

    spring_hibernate_struts2的理解

    这是对spring_hibernate_struts2的理解,可以在面试中简要的抓住重点进行陈述。

    Struts2深入理解

    Struts2深入理解

    深入理解struts2原理之自己实现struts2框架源码

    作为struts2的初学者,有时候理解struts框架的原理,网上看图会一头雾水,所以要是能自己体会实现struts框架的整个过程,对理解struts思路会更加清晰一些,这个源码就是自己实现的过程,代码有详细注释

    谈谈你对Struts的理解。

    1. struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个Servlet处理,这个...

    Struts2视频教程

    Struts2是一套非常优秀的Java WEB应用框架,实现优雅、功能强大、使用简洁。目前已有大量的企业项目采用Struts2来...学习完本视频,你会真正理解Struts2相对于Struts1的优雅和简洁,并使你具备开发Struts2项目的能力。

    Struts2值栈的理解

    Struts2值栈的理解Struts2值栈的理解Struts2值栈的理解

    struts-2.3.24-lib

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    struts2JAR包

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    J2EE基础:MVC模式和Struts模式的理解

    详细介绍了java web开发的model2模式即mvc模式的理论,以及mvc框架struts框架的理解

    struts2必须jar包

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    struts2学习文档

    Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    review.struts.zip

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    完美版(适合自学)struts2

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    Struts 2中文帮助文档

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    struts2建立流程

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    struts-2.3.1.2.zip

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    struts-2.3.16.1.zip

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。struts-2.3.16.1.zip就是struts2.3的一个版本...

    struts2 常用的五个jar包

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2和Struts 1有着太大的变化,...

    Struts2V3.0-(中文)参考手册

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    简单的struts实现非常适合初学者理解struts结构

    简单的struts实现 非常适合初学者理解struts结构

Global site tag (gtag.js) - Google Analytics