Struts——开源MVC框架
【简介】
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框架相关推荐
- ASP.NET开源MVC框架Vici MVC(三)HELLO WORD
ASP.NET开源MVC框架Vici MVC 最大的特点是支持ASP.NET2.0 iis不需要额外的设置 官方实例下载地址http://viciproject.com/wiki/Projects/ ...
- 2022年最值得学习的5款开源Java框架 小白教程
自从1996年首发,至今25年以来,Java凭借在后端.大数据.机器学习.Web.Android等领域的应用,使其仍然占据着统治地位,长期占据全球最受欢迎编程语言前三名. 在Python.JavaSc ...
- [MVC] 常用MVC框架及之间优缺点
目录 常用MVC框架及之间优缺点 Spring与Spring MVC的区别 Spring与Struts2的区别 Spring MVC和Struts2的区别 Spring MVC和jFinal的区别 R ...
- 常见 MVC 框架比较
常见的 开源 MVC 框架有一下几种 JSP+Servlet | struts1 | Spring MVC | structs2+freemarker | ...
- Struts和SpringMVC两种MVC框架比较
基于Web的MVC framework在J2EE的世界内已是空前繁荣.TTS网站上几乎每隔一两个星期就会有新的MVC框架发布.目前比较好的MVC,老牌的有Struts.Webwork.新兴的MVC框架 ...
- JavaScript MVC 框架开源软件
HTML的Web框架AngularJS Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持整个开发进程,提供web应用的架构,无需进 ...
- BrnShop开源网上商城第二讲:ASP.NET MVC框架
BrnShop开源网上商城第二讲:ASP.NET MVC框架 原文:BrnShop开源网上商城第二讲:ASP.NET MVC框架 在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是 ...
- 开源:Taurus.MVC 框架 (已支持.NET Core)
为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...
- Struts MVC 框架 (让你一步步成为高手)
web应用的分层 交互层,表现数据,收集数据,也就是视图层,接受请求,通过处理层完成相应的响应.(V,C) 处理层,完成数据的处理,也就是业务层(M). MVC设计模式(应用观察者模式的框架模式) M ...
最新文章
- Android开发环境——Eclipse ADT相关内容汇总
- 汇编语言随笔(9)-实验11(用条件转移指令来编写子程序)
- 银行祖传系统重构实例:创立12年,只支持Python 2,跑着500多个应用程序
- Android7.0反射类找不到的问题
- [Css] 使用css如何拉伸字体?
- Django补充知识点——用户管理
- nuc8 黑苹果_萝莉的身材野兽的心——NUC8 MacOS黑苹果-Win10双系统体验
- 王思聪5亿投资神话破灭?旗下普思资本股权遭冻结,冻结期3年
- Android 设计的几处硬伤
- AT:配置/禁用PSM模式和设置T3324/T3412
- SQL Server触发器创建、删除、修改、查看
- jQuery(九):节点遍历
- 智课雅思词汇---二十二、-al即是名词性后缀又是形容词后缀
- iphone计算机怎么显示电话,苹果手机最近通话记录不显示怎么恢复
- EM算法在直线分类与灭点检测中的应用(关于一篇文章的读后感)
- Android 开发 打开手电筒
- 26道JavaScript烧脑面试题汇总与解析
- C语言不定参数的作用,分享:C语言的三种不定参数,省略号用法
- 企业要实现用计算机完成存货管理,《会计信息系统》习题含答案
- 西计算机科学和电子科学与技术的区别,“电子信息科学与技术”和“电子科学与技术”专业的区别...