Struts2(1)——总体概述

来源:互联网 发布:广州网络咨询医生招聘 编辑:程序博客网 时间:2024/05/21 17:41

所谓框架么,其实就像我们盖房子一样,需要先搭建支架,然后再进行添砖加瓦,使之达到完美。而在软件开发中,框架也是一样的:就是将通用的代码进行封装,使我们可以重复利用,达到了高效开发的效果。当然既然已经搭建好的框架,用到我们的系统中,我们就需要学习它,怎么使我们自己独有的代码和框架进行完美的结合。当今比较流行的开源框架:

  • 关注数据流程的MVC框架 (Struts2, Spring MVC, WebWork……)
  • 关注数据关系的容器框架 (Spring, GUICE……)
  • 关注数据操作的持久层框架(Hibernate,IBatis……)

当然了,各个公司可能也有在此基础上扩展开发的自己使用的框架,但是很多原理的东西都是类似的,所以学习会一套框架,然后能够举一反三。下面先总体价绍一下Struts2框架。
这里写图片描述

一,Struts2简介:


1.来由:

Struts(金属支架),在程序中表示起支撑作用的通用程序代码,Struts2是在Struts1框架的基础上融合了WebWork优秀框架升级得到的。

2.解释

:Struts2框架是一个轻量级的MVC流程框架,轻量级是指程序的代码不是很多,运行时占用的资源不是很多,MVC流程框架就是说它是支持分层开发,控制数据的流程,从哪里来,到那里去,怎么来,怎么去的这样一个框架;

3.升级的改善:

  • Struts1的缺点:

    (1)struts框架基于servlet进行开发的,所以servlet的问题在这个框架中都能体现出来

    (2)struts框架的流程是固定的,想要扩展业务流程非常的不方便。

    (3)只支持动态视图JSP展现数据,对于现在的SEO(搜索引擎优化)支持不好

  • Struts2框架改善的地方:

    (1)核心基于Filter
    (2)流程可以动态扩展
    (3)多例创建对象
    (4)支持多种视图展现技术(JSP,Freemarker,Volicity)

二,简单对Struts2了解后,看一下如何进行Strut2的搭建:


1,新建Web项目:进行必备Jar包的拷贝,放到lib目录以便项目的引用,这个我们通过apache官方网站下载后,可以参照里边的实例:
这里写图片描述
2,拷贝框架的核心配置文件Struts.xml,放到src目录下,保留一个基本配置即可,这里没网的话需要我们自己配置一下xml文件对应的DTD或者schema文件,方便我们后期的编写:

<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE struts PUBLIC      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"      "http://struts.apache.org/dtds/struts-2.0.dtd">  <struts>   </struts>  

3,然后在我们的web.xml文件中进行核心调度器的配置,这里我们一般过滤所有访问路径即可:

  <!-- 配置框架的核心调度器 -->  <filter>       <filter-name>struts2</filter-name>       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  </filter>  <filter-mapping>      <filter-name>struts2</filter-name>      <url-pattern>/*</url-pattern>  </filter-mapping>  

这样我们的Struts2框架就算搭建出来了,我们就可以使用框架进行开发了。

三,Struts2框架的源码分析


1,Tomcat等服务器启动时,框架做的事情:
——>然后创建了Dispatcher(核心调度器),
——>通过此对象,加载对象默认的配置文件(org/apache/struts2/default.properties),解析了默认的xml文件(struts-default.xml等),
——>并试图加载我们编写的xml文件或者属性文件,
——>并创建了我们需要用的PrepareOperations和ExecuteOperations对象。

2,当我们访问jsp页面时,这里会进行页面编码设置,反射创建我们的DefaultActionMapper对象,进行对URI的获取,解析,封装,由于是直接访问的jsp页面,也就是静态的,直接跳转,相对来说比较简单。

3,发送actin请求时,这里比较麻烦,
——>利用DefaultActionMapper,进行对URI的获取解析,例如访问那个类,那个方法,是不是动态访问(带有!号),有什么特殊处理(有.x .y结尾等)。进行相关信息的解析后,
——>Dispatcher(核心调度器)反射创建StrutsActionProxyFactory代理对象工厂,这里在反射创建我们要访问的类时,
——>模仿了动态代理,创建了代理对象StrutsActionProxy和扩展对象DefaultActionInvocation,
——>扩展对象又创建了我们的目标对象工厂,
——>然后反射创建了我们想要访问的目标对象action。
——>然后通过调用代理对象,执行扩展对象中的方法,
——>执行我们框架默认的18个拦截器,
——>反射调用访问action方法,
——>获取执行后的结果result,
——>最后进行相关界面或者action的指向。

重点掌握几个文件:
Struts-default.xml配置文件,
default.properties默认的属性文件,
dispatcher核心调度器,
还有就是模拟动态代理访问action的代理对象(StrutsActionProxy)和
扩展对象(DefaultActionInvocation),

1 0
原创粉丝点击