当学习或工作时,有些同学会谈到熟悉struts、hibernate、spring等等框架,貌似熟悉这些框架是精通java的表现,但是我们应该首先弄明白为什么要学框架?是为了学习而学习?还是为了工作而学习?

就拿struts框架举例子,为什么要学习struts框架?

要了解struts框架,首先必须理解mvc是怎么回事?mvc又是如何冒出来的呢?

开始写程序的主要的目的是为了实现功能,至于如何设计不管。也就是过程不重要,结果重要。所以当时的设计思路就是Model1,什么是Model1?jsp直接调用后台。

结构图如下:

这种情况:把页面和业务逻辑代码都写到一块,写在jsp文件中,也就是在文件表头有一大部分java代码。

但是这种设计模式,随着业务发生的改变,jsp文件需要大批量的改动。缺点是耦合度太强。

紧接着,为了减少jsp与后台业务逻辑的关联度,逐渐地把jsp文件中的大部分java代码提取出来,放到一个类中,这样就形成了Model2。其中提取java代码放到类就是Servlet。

Model2的结构图如下:

这种情况:jsp的职责减轻,只用来显示界面。而接受界面的参数转化的操作则放到Servlet中。

其实Model2就是典型的MVC。

Model2中优点是每层职责明确清晰,使界面和数据分离。

缺点是:若是完全实现MVC,则增加了编写的复杂度。

比如:开始我们遇到转向问题,Servlet转到jsp中,我们都已经写死了,比如程序中:

request.getRequestDispatcher("/flowcard/flow_card_maint.jsp").forward(request, response);

若是修改jsp文件名称时,还需要修改Servlet。

并且表单上的获取的数据都是字符串,我们必须根据需要将字符串手动转化。

而这些问题,使用struts框架一扫而光,至于表单数据类型的转化,错误的处理,表单的转向,struts做了很好的封装。

struts框架很好地实现了MVC模式,封装了很多东西,不需要我们程序员手动封装操作。因此,struts为了帮助减少我们用mvc设计开发的时间。

那无论我们用model1或这model2,或者struts,我们在设计时需要什么呢?

第一:页面;用来展示给客户的载体。

第二:数据:页面展示需要的内容来源。

第三:处理数据的场合:如何处理页面所需的数据呢?

其实这三点就是我们所说的MVC。

页面--V;数据--M;处理数据的场合--C

struts是web层的进一步划分。层内容的划分。那struts的中的m、v、c又代表什么呢?

其中的v就是单纯的界面;

而其中c就是struts中的核心控制类;

而m表现了两个方面:

  • 系统的状态
  • 系统状态改变的操作。

那struts中mvc对应的组件:

  • v:由jsp展现。其中可以使用struts中标签库。
  • c:struts中的核心控制类:ActionServlet
  • m:与表单上数据对应的ActionForm以及对ActionForm的操作Action。

那struts中是如何实现MVC呢?

ActionServlet是struts中的核心类,用户需要完成的Action以及ActionForm。并且在配置文件中进行配置以便struts识别。struts根据配置文件中的配置进行调用。

struts的由来的更多相关文章

  1. 【SSH 基础】SSH框架--struts深入具体解释(一)

    学习了struts,可是对于它的由来,以及为什么使用action和struts.xml的方式而不採用曾经的servlet方式.有些疑问,究竟之前的方式有什么弊端,struts又给我们带来了什么便利? ...

  2. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  3. Struts的拦截器

    Struts的拦截器 1.什么是拦截器 Struts的拦截器和Servlet过滤器类似,在执行Action的execute方法之前,Struts会首先执行Struts.xml中引用的拦截器,在执行完所 ...

  4. Struts框架的核心业务

    Struts的核心业务 Struts核心业务有很多,这里主要介绍了比较简单一些的: 请求数据的处理,和数据自动封装,类型自动转换 1.Struts中数据处理 1.1.方式1:直接过去servletap ...

  5. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  6. 配置hibernate,Struts。文件

    hibernate文件配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernat ...

  7. hibernate与Struts框架结合编写简单针对修改练习

    失败页面fail.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  8. 3. 解析 struts.xml 文件

    1. struts.xml 文件基本配置: 主要放在资源路径下,配置 sturts2相关的 Action , 拦截器等配置 <struts> <!-- 设置常量 --> < ...

  9. Struts+Spring+Hibernate项目的启动线程

    在Java Web项目中,经常要在项目开始运行时启动一个线程,每隔一定的时间就运行一定的代码,比如扫描数据库的变化等等.要实现这个功能,可以现在web.xml文件中定义一个Listener,然后在这个 ...

随机推荐

  1. VC中实现带有背景位图的树型控件

    当前许多应用程序都在使用树型控件时为其添加了背景位图,增强的控件的魅力,然而对于Visual C++编程爱好者来说,使用Visual C++MFC提供的树型控件(CTreeCtrl)本身就是一个难点, ...

  2. Day4_代码重用与函数

    知识点速记: 重用代码的方法:脚本包含require().include(); 全局配置文件php.ini(auto_prepend_file/auto_append_file); 目录配置文件.ht ...

  3. Android_Intent意图详解

    本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/11863857 1.Intent作用 Intent是一个将要执行的动作 ...

  4. 视频日志之android的总结与思考

    四月份开始学android,并着手做这个项目,腾讯面试实习忙了半个月没有再做最终铩羽而归.做到5月30日,做了一个交差版,停下了差不多一个月,这两天再捡起完善一点. 项目是做一个视频保存和分享的网站, ...

  5. 编程之美之数独求解器的C++实现方法

    编程之美的第一章的第15节.讲的是构造数独.一開始拿到这个问题的确没有思路, 只是看了书中的介绍之后, 发现原来这个的求解思路和N皇后问题是一致的. 可是不知道为啥,反正一開始确实没有想到这个回溯法. ...

  6. 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)

    前言 本章将实现非常实用的功能——下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...

  7. ToolStripMenuItem控件实现DatagridView行的上下移

    /*--------------行上移------------------*/ 1 private void 上移ToolStripMenuItem_Click(object sender, Even ...

  8. SQL练习之求解填字游戏

    SELECT * FROM dbo.spt_values

  9. C和C++运算符 (转)

    这里是C和C++语言的运算符列表.所有列出的运算符皆含纳于C++:第三个栏目里的内容也使用C来描述.应当注意的是C不支持运算符重载. 下列运算符在两个语言中都是顺序点(运算符未重载时): && ...

  10. JavaScript之转义字符

    <html lang="en"> <head>   <meta charset="UTF-8">   <meta na ...