博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSH框架——走进Struts2
阅读量:4263 次
发布时间:2019-05-26

本文共 2588 字,大约阅读时间需要 8 分钟。

       今天我们来学习java中比较流行的框架SSH。

    所谓框架,其实就像我们盖房子一样,需要先搭建支架,然后再进行添砖加瓦,使之达到完美。而在软件开发中,框架也是一样的:就是将通用的代码进行封装,使我们可以重复利用,达到了高效开发的效果。当然既然已经搭建好的框架,用到我们的系统中,我们就需要学习它,怎么使我们自己独有的代码和框架进行完美的结合。因为大家都在用这些优秀的框架,所以框架的学习,其实就是框架规范的学习。有了规范,有个约束,有了统一,才能更加有利于合作的开发。
      那么SSH又是什么呢?

这里写图片描述

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

      当然,每个公司用到的框架可能都不太一样,但是他们的原理是相通的,我们只要学习会一套框架,然后能够举一反三,构建出自己的知识网,然后就会很快的适应新的知识了。

      首先,今天我们来一起学习一下Structs2。之后会继续介绍Hibernate和spring的学习。

一、概念

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

二、原理

这里写图片描述

一个请求在Struts2框架中的处理大概分为以下几个步骤

客户端初始化一个指向Servlet容器(例如Tomcat)的请求
这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
接着FilterDispatcher被调用, 它是控制器的核心,就是mvc中c控制层的核心,通过询问ActionMapper来决定这个请是否需要调用某个Action 。
如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 ,这里,我们一般是从struts.xml配置中读取。同时ActionProxy创建一个ActionInvocation的实例。ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper。

三、使用

1.导入六个lib包

commons-fileupload-1.2.1.jarcommons-logging-1.0.4.jarfreemarker-2.3.15.jarognl-2.7.3.jarstruts2-core-2.1.8.jarxwork-core-2.1.6.jar

2.配置web.xml

index.jsp
Struts2.1 Hello World
struts2
org.apache.struts2.dispatcher.FilterDispatcher
struts2
/*

3.在src下创建struts.xml,并配置

     
/success.jsp
/error.jsp

4.创建实体类model

实体类是一个普通的POJO类

5.创建dao包

创建dao.impl包

6.创建service包

7.创建action包

action类继承ActionSupport 默认重写execute()或者自定义实现方法

8.根据struts.xml配置文件内的result元素创建相应的JSP页面


四、比较

      struts2相对于struts1来说简单了很多,并且功能强大了很多,我们可以从几个方面来看:

  • 从体系结构来看

      struts2大量使用拦截器来出来请求,从而允许与业务逻辑控制器 与 servlet-api分离,避免了侵入性;而struts1.x在action中明显的侵入了servlet-api.

  • 从线程安全分析

      struts2.x是线程安全的,每一个对象产生一个实例,避免了线程安全问题;而struts1.x在action中属于单线程。

  • 性能方面

      struts2.x测试可以脱离web容器,而struts1.x依赖servlet-api,测试需要依赖web容器。

  • 请求参数封装对比

      struts2.x使用ModelDriven模式,这样我们 直接 封装model对象,无需要继承任何struts2的基类,避免了侵入性。

  • 标签的优势

      标签库几乎可以完全替代JSTL的标签库,并且 struts2.x支持强大的ognl表达式。


总结:

      一个比较优秀的框架可以帮着我们更高效,稳定的开发合格的产品,不过我们也不要依赖框架,我们只要知道了原理,理解了思想,我们就可以在这个基础上创造出属于我们自己的框架!让我们站在巨人身上,去发现,去创新。

你可能感兴趣的文章
boost多线程库之准备动作
查看>>
gcc和boost的升级步骤(非root权限)
查看>>
自己编写Python连接MySQL的支持
查看>>
掰开揉碎机器学习系列-决策树(1)-ID3决策树
查看>>
python的引用和浅拷贝和p深拷贝
查看>>
掰开揉碎机器学习系列-决策树(2)-CART决策树
查看>>
python2.7 安装multiprocessing的正确姿势
查看>>
manacher算法计算最长回文子串
查看>>
二叉查找树(BST)
查看>>
堆(二叉堆)
查看>>
AVL平衡二叉树
查看>>
字符串匹配的KMP算法
查看>>
字符串左右旋转问题
查看>>
字符串是否包含问题
查看>>
排序1:交换排序(冒泡排序+快速排序)
查看>>
排序2:选择排序(选择排序+堆排序)
查看>>
排序3:插入排序(普通插入排序 + 折半插入排序 + 链表插入排序 + 希尔排序)
查看>>
排序4:普通归并排序
查看>>
排序4:多路归并排序之预备:胜者树与败者树
查看>>
浮华背后与我的路-----关于华为裁员
查看>>