【简介】

Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller〔MVC〕设计模式的应用框架〔Web Framework〕,是MVC经典设计模式中的一个经典产品。struts是一个基于javaee平台的mvc框架,他是属于一个表现层的开发框架,框架是一个模板,模板是一个半成品,自己本身是不能正常运行的。

Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages 、Servlet、标签库以及面向对象的技术水准。Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。这个框架之所以叫"Struts",是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至我们踩高跷时候的基础支撑。这也是一个解释Struts在开发Web应用程序中所扮演的角色的精彩描述。当建立一个物理建筑时,建筑工程师使用支柱为建筑的每一层提供支持。同样,软件工程师使用Struts为业务应用的每一层提供支持。它的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。我们仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。

Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用。和其他的java架构一样,Struts 也是面向对象设计,将MVC模式"分离显示逻辑和业务逻辑"的能力发挥得淋漓尽致。Structs 框架的核心是一个弹性的控制层,基于如 Java Servlets,JavaBeans,ResourceBundles与XML等标准技术,以及 Jakarta Commons 的一些类库。Struts由一组相互协作的类(组件)、Servlet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是一个传统 MVC设计模式的一种变化类型。

【框架】

struts是在jsp Model2的基础上实现的一个MVC框架,具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。struts可以清晰地区分控制,事务逻辑和外观,从而简化了开发应用程序的过程。

Struts对Model,View和Controller都提供了对应的组件。

模型:JavaBean,EJB组件。

视图:Jsp,struts客户化标签。

控制器:ActionServlet,Action。

流程:web客户端发出请求(request),ActionServlet系统核心(中央)控制器截取相关URL,通过struts-config.xml配置文件分发(dispatch)给不同的Action进行处理,Action调用model返回,将转向的信息转给ActionServlet,再转给视图(jsp)显示到客户端。

具体流程:

1、服务器启动,Web应用启动时就会加载web.xml初始化actionServlet和记载struts配置文件(struts-config.xml),读配置信息到内存中,供以后action调用
   2、用户通过客户端向服务器发出一个请求,http://localhost:8080/struts_login/login.do 
   3、tomcat会创建出HttpRequest和HttpResponse实例,并根据用户的Method请求方式,调用中央控制器的doGet或者doPost方法;
   我们已经在web.xml配置了所有符合某特定格式的请求都将由struts指定的Servlet来处理。比如:只要是以.do结尾的请求(*.do)都由 org.apache.struts.action.ActionServlet来对其进行处理.ActionServlet会拿到用户的请求,并且去分析这个URL,ActionServlet中央控制器会截下 /login. 截下来之后,它是为了去struts-config.xml这个配置文件里面找<action>标签path属性的值等于所截部分的那个 Action,将Action标签里面的信息放在ActionMapping里面。
   4、根据ActionMapping中的name名称查找ActionForm,如果配置了ActionForm,那么就到request或session中查找,如果在request或session中存在已经创建的ActionForm,那么将返回;如果不存在,那么会根据ActionForm的完成路径采用反射进行创建,再将创建好的ActionForm放到reqeust或session中
   5、首先执行ActionForm中的reset方法进行重置,然后得到表单中所有输入域的name名称,再调用request.getParameterValues(),根据name名称得到相应的值,最后将表单中的数据全部放到一个map中,map中的key为表单输入域的名称,map的value位表单输入域的值(字符串数组),接下来调用一个第三方组件BeanUtils,将Map中的值,根据ActionForm中的setter方法设置到ActionForm上。
   6、根据Action的完成类名称到Map中查找,如果存在就在返回Action对象,否则根据Action类的完整名称采用反射去创建,再将创建好的Action放到Map中。所以struts1的Action是单实例的,存在线程安全问题。找到对应的action之后,ActionServlet会把表单提交的数据给存放(生成对应调用 set/get方法)到struts-config中相应的action标签的name属性值指定的actionform类中(若有, [actionform的子类,并且在form-bean标签中配置了,若要进行数据验证可以在actionform中覆盖validate方法,推荐使用js,减轻服务器负担]).同时把actionform和当前HttpServletrequest 对象注入到代调用的action方法中.
   7、执行用户自定义的Action中的Execute方法,将ActionMapping,ActionForm,request,response传递过去,将ActionForward返回给ActionServlet。
   8、根据返回的ActionForward完成转向,ActionForward对象根据此action配置的<forward>匹配name进而调转到对应path的jsp页面上。

Model部分

由JavaBean组成,ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionForm里面的请求参数处理用户的请求。JavaBean则封装了底层的业务逻辑,包括数据库访问等。

View部分

该部分采用JSP实现,对应上图的JSP部分。Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。

Controller组件有两个部分组成——系统核心控制器(ActionServlet),业务逻辑控制器(Action)。

系统核心控制器,对应上图的ActionServlet。该控制器由Struts框架提供,继承HttpServlet类,因此可以配置成标注的Servlet。该控制器负责拦截所有的HTTP请求,然后根据用户请求决定是否要转给业务逻辑控制器。

业务逻辑控制器,对应上图的Action部分。负责处理用户请求,本身不具备处理能力,而是调用Model来完成处理。

【实现】

1、Struts只能应用于web项目,建立Web projcet项目

2、配置Struts

a.拷贝struts相关的jar到WEB-INF/lib下

b.在web.xml文件中配置ActionServlet

c.提供struts-config.xml(核心配置文件),需要放到WEB-INF下

具体配置过程:

a.找到相关jar,直接拷贝到WEB-INF/lib下即可。

b.在web.xml文件中配置ActionServlet

<welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><init-param><param-name>debug</param-name><param-value>2</param-value></init-param><init-param><param-name>detail</param-name><param-value>2</param-value></init-param><load-on-startup>2</load-on-startup></servlet><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.action</url-pattern></servlet-mapping>
</web-app>

c.提供struts-config.xml文件,放到WEB-INF下

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

3、新建jsp页面,设置页面信息

4、在src下建立包和相关类(要继承struts相关类)

a.ActionForm类:定义页面值,get,set方法(这个类需要继承struts.action)

注意: * 表单的属性必须和ActionForm中的get和set的属性一样
     b.建立一个action类(必须继承struts.action),需要重写(override)execute方法()

注意:Action中的代码:这些值如何在前台获取

前台jsp通过EL表达式可以获取后台数值

5、通过配置struts-config.xml文件将所有流程串起来

【小结】

Struts1、Struts2、SpringMVC都是对MVC模式的实现,下次要一起研究一下。Struts1的Action与SpringMVC的Controller一样,都是单例的,不是线程安全的。这就意味着,每个Request请求,系统都会用原有的instance去处理。这虽然减少了对象的创建和垃圾收集的时间,但是处理多线程调用时,Controller不是线程安全的,而Struts2是线程安全的。

Struts——开源MVC框架相关推荐

  1. ASP.NET开源MVC框架Vici MVC(三)HELLO WORD

    ASP.NET开源MVC框架Vici MVC 最大的特点是支持ASP.NET2.0  iis不需要额外的设置 官方实例下载地址http://viciproject.com/wiki/Projects/ ...

  2. 2022年最值得学习的5款开源Java框架 小白教程

    自从1996年首发,至今25年以来,Java凭借在后端.大数据.机器学习.Web.Android等领域的应用,使其仍然占据着统治地位,长期占据全球最受欢迎编程语言前三名. 在Python.JavaSc ...

  3. [MVC] 常用MVC框架及之间优缺点

    目录 常用MVC框架及之间优缺点 Spring与Spring MVC的区别 Spring与Struts2的区别 Spring MVC和Struts2的区别 Spring MVC和jFinal的区别 R ...

  4. 常见 MVC 框架比较

    常见的 开源 MVC 框架有一下几种 JSP+Servlet    |    struts1    |      Spring MVC    |    structs2+freemarker    | ...

  5. Struts和SpringMVC两种MVC框架比较

    基于Web的MVC framework在J2EE的世界内已是空前繁荣.TTS网站上几乎每隔一两个星期就会有新的MVC框架发布.目前比较好的MVC,老牌的有Struts.Webwork.新兴的MVC框架 ...

  6. JavaScript MVC 框架开源软件

    HTML的Web框架AngularJS Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持整个开发进程,提供web应用的架构,无需进 ...

  7. BrnShop开源网上商城第二讲:ASP.NET MVC框架

    BrnShop开源网上商城第二讲:ASP.NET MVC框架 原文:BrnShop开源网上商城第二讲:ASP.NET MVC框架 在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是 ...

  8. 开源:Taurus.MVC 框架 (已支持.NET Core)

    为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...

  9. Struts MVC 框架 (让你一步步成为高手)

    web应用的分层 交互层,表现数据,收集数据,也就是视图层,接受请求,通过处理层完成相应的响应.(V,C) 处理层,完成数据的处理,也就是业务层(M). MVC设计模式(应用观察者模式的框架模式) M ...

最新文章

  1. Android开发环境——Eclipse ADT相关内容汇总
  2. 汇编语言随笔(9)-实验11(用条件转移指令来编写子程序)
  3. 银行祖传系统重构实例:创立12年,只支持Python 2,跑着500多个应用程序
  4. Android7.0反射类找不到的问题
  5. [Css] 使用css如何拉伸字体?
  6. Django补充知识点——用户管理
  7. nuc8 黑苹果_萝莉的身材野兽的心——NUC8 MacOS黑苹果-Win10双系统体验
  8. 王思聪5亿投资神话破灭?旗下普思资本股权遭冻结,冻结期3年
  9. Android 设计的几处硬伤
  10. AT:配置/禁用PSM模式和设置T3324/T3412
  11. SQL Server触发器创建、删除、修改、查看
  12. jQuery(九):节点遍历
  13. 智课雅思词汇---二十二、-al即是名词性后缀又是形容词后缀
  14. iphone计算机怎么显示电话,苹果手机最近通话记录不显示怎么恢复
  15. EM算法在直线分类与灭点检测中的应用(关于一篇文章的读后感)
  16. Android 开发 打开手电筒
  17. 26道JavaScript烧脑面试题汇总与解析
  18. C语言不定参数的作用,分享:C语言的三种不定参数,省略号用法
  19. 企业要实现用计算机完成存货管理,《会计信息系统》习题含答案
  20. 西计算机科学和电子科学与技术的区别,“电子信息科学与技术”和“电子科学与技术”专业的区别...

热门文章

  1. MD5加密,16位加密,32位加密,Base64加密,解密
  2. etcd http API
  3. Windows 8.1 更新错误 0x80073712 解决办法
  4. MySQL—自定义函数
  5. Python培训课程怎么学
  6. 无人机倾斜影像建模哪个软件好
  7. Win10开启telnet功能
  8. 关于传递函数的双边线性Z变换+差分方程
  9. 金德的齐瓦,能否成为金德的温格?_原水_新浪博客
  10. 高级程序员之抽象能力模型