struts

struts是开源框架。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个不错的选择。

Struts 是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

流程

编辑

服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存

struts流程

以登录为例:第一次进login.jsp会先实例化Form、把默认值(String默认为空字符串,整型默认为0)赋给表单元素。

输入用户名密码提交表单、提交到action属性的login.action,通过ActionServlet读struts-config.xml文件找到 action下的path属性找到.action,通过name属性找form-beans中的form-bean的name属性得到ActionForm的包名类名,先实例化form,把表单的值填充给form,调用form的validate方法验证、ActionErrors返回null表示验证通过,否则失败返回input指定的页面.验证通过会实例化Action,执行Action的execute方法。

优点

编辑

Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点,使开发者能更深入的了解其内部实现机制。

除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活运用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。

关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,

struts

使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。

框架

编辑

struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。

struts可以清晰地区分控制,事务逻辑和外观,从而简化了开发应用程序的过程。struts提供的类使得开发工作更加简单,这些类包括:

  1. 控制程序流程的类
  2. 实现和执行程序事务逻辑的类
  3. 自定义的标记库使得创建和验证HTML表单更加容易

压缩包内容 

文件夹jakarta-struts-1.0.2包含两个目录,lib和webapps。在lib目录中有使用struts创建应用程序是所需的文件。

1 jdbc2_0-stdext.jar 包含JDBC2.0 Optional Package API类。如果我们要使用struts提供的数据资源,就需要将这个文件拷贝到WEB-INF\lib下

2 Struts.jar 包含struts中所有的java类。同样也需要拷贝到WEB-INF\lib下

3 *.tld 标记库描述器文件,描述了多个struts标记库中的自定义标记。同样要拷贝到WEB-INF\lib下

在webapps目录下有如下文件:

1 Struts-blank.war 一个简单的web应用程序

2 Struts-documentation.war 包含struts站点上所有struts文档

3 Struts-example.war Struts很多特性的示范

4 Struts-exercisetaglib.war 主要用于对自定义标签库进行增加而使用的测试页,但也可以示范如何使用struts标记

5 Struts-template.war 包含struts模板标记的介绍和范例

6 Struts-upload.war 一个简单的例子,示范如何使用struts框架上传文件

体系结构

让我们从MVC角度观察struts框架中的组件,框架中三个部分:模型,视窗和控制器。

◆模型

在struts框架中,模型分为两个部分:

  1. 系统的内部状态
  2. 可以改变状态的操作(事务逻辑)

内部状态通常由一组ActionForm JavaBean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。

大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。

小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。

建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。

◆视窗

由JSP建立,struts包含扩展自定义标签库,可以简化创建完全国际化用户界面的过程。

◆控制器

struts中,基本的控制器组件是ActionServlet类中的实例servlet,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。

框架中的组件 

(由于ROSE工具还未能下载,只能找来这幅图,它说明了一定问题,特别是ActionErrors,但它并没有将ActionMapping,JSP和Tag Library包含进来,有时间作完替换)

框架中所使用的组件:

ActionServlet 控制器

ActionClass 包含事务逻辑

ActionForm 显示模块数据

ActionMapping 帮助控制器将请求映射到操作

ActionForward 用来指示操作转移的对象

ActionError 用来存储和回收错误

Struts标记库 可以减轻开发显示层次的工作

下面我们看看各自在框架中所扮演的角色和责任。

框架结构图

编辑

综述

相应框架结构如图:

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

在上图中,ActionServlet,这个类是Struts的核心控制器,负责拦截来自用户的请求。

Action,这个类通常由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。

Model部分

由JavaBean组成,ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionForm里面的请求参数处理用户的请求。

JavaBean则封装了底层的业务逻辑,包括数据库访问等。

View部分

该部分采用JSP实现。

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

Controller组件

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

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

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

OGNL

编辑

Struts2 ognl中的#、%和$符号用法说明

#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。在这里笔者简单介绍它们的相应用途。

1.#符号的用途一般有三种。

1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(”msg”)。

2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

3)用来构造Map,例如示例中的#{‘foo1‘:‘bar1‘,‘foo2‘:‘bar2‘}。

2.%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。如下面的代码所示:构造Map<s:set name="foobar" value="#{‘foo1‘:‘bar‘,‘foo2‘:‘bar2‘}" />

<p>;不使用%:<s:url value="#foobar[‘foo1‘]" /></p>

<p>;使用%:<s:url value="%{#foobar[‘foo1‘]}" /></p>

3.$符号$符号主要有两个方面的用途。

在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

在Struts 2框架的配置文件中引用OGNL表达式,例如下面的代码片断所示:<validators> <field name=”intb”> <field-validator type=”int”> <param name=”min”>10</param> <param name=”max”>100</param> <message>BAction-test校验:数字必须为${min}为${max}之间!</message> </field-validator> </field></validators>

时间: 2024-08-05 08:03:39

struts的相关文章

struts(IDEA)的应用

目标 任务,完成以上功能. 第一步:模拟组长建project 1.建立一个空白工程(里面是没有文件的) 2.到此,我们见到新建的工程,目录里面没有其他文件,只有.idea目录 (这个是相关配置信息,可以不管它) 3.点击托管项目到码云 4. 输入账号和密码 注意:这里是直接创建远程仓库(在码云的服务器创建,不是本地) 作用:把本地的代码,统统托管到服务器上 5. 提示提交文件,但是没有文件可以提交,因为本项目本来就是空. 6.右下角,提示创建仓库成功. 同时,仓库里面,什么代码代码都没有 8.按

Struts初探(二)

总是找不到对应的action,但别的没用到动态方法调用的都没有问题. 报异常:java.lang.reflect.InvocationTargetException - Class: com.opensymphony.xwork2.inject.ContainerImpl$Me 实在是搞不清楚,我还以为全半角有问题,尚学堂的现有的工程,进去操作了一下是没有问题的,struts2-core-2.1.6.jar,我这里是2.3.31了,想一下只能是这个问题了吧. 在Struts2的action配置中

深入理解struts的运行机制

在此申明本博文并非原创,原文:http://blog.csdn.net/lenotang/article/details/3336623,本文章是在此文章基础上进行优化.也谈不上优化,只是加上了点自己的想法 jar包准备 为什么会用到这两个jar包呢,因为我需要通过这个jar来解析xml配置文件. 新建项目 流程梳理 struts配置文件 <?xml version="1.0" encoding="UTF-8"?> <struts> <

struts文件上传

如果在表单中上传文件,表单的enctype属性为multipart/form-data struts默认上传文件大小为2M,如果需要修改,在配置文件中设置 <constant name="struts.multipart.maxSize" value="31457280"/> jsp页面 <input type="file" name="file"/> action中属性 private File fi

Hibernate+struts+JqueryAjax+jSON实现无刷新三级联动

看网上JqueryAjax三级联动的例子讲不是很全,代码也给的不是很全,给初学者带来一定的难度.小弟自己写了一个,可能有些地方不是很好,希望大家能够提出建议. 用的是Hibernate+struts2写的.http://blog.csdn.net/luckey_zh/article/details/22995389 以代码来说话吧. 首先是index1.jsp页面 [html] view plaincopy <%@ page language="java" import=&quo

SSH—Struts(三)—执行器(Action)

前面已经介绍了Struts的基本原理和控制器ActionServlet,按照一个请求的流程经过了ActionServlet之后就要到达Action类中做具体的处理了.ActionServlet通过ActionMapping获取映射的Action对象,通过Action来完成请求的处理,最后Action返回一个ActionForward对象. Action的创建 当请求经过ActionServlet时,ActionServlet会根据请求中截取的地址搜索对应名字的ActionMapping,即Str

struts的学习

在开发工具上进行struts的配置 1)新建项目,为项目添加Struts开发支持 2)为项目添加Struts开发支持,在项目点击右键,myeclipse->Add Struts Capabilities.选择支持的struts版本 3)在项目下的WebRoot下新建一个jsp文件.在Template to use下选在2中选择的struts版本 配置hello.jsp <%@ page language="java" pageEncoding="GBK"

struts 1.x 原理

Struts 当我接触到这个框架的时候,我就在想为什么是struts,而不是什么CraigFramework.结构.支撑,这样来理解也不难怪了. 为什么需要struts? 在struts in action这本书里,struts的开发者也讲到.在有了MVC后依然需要这样一个框架来支撑开发的工作,因为有了jsp和model和ejb来处理这一套流程还需要什么? 原理 首先需要在tomcat服务器启动,而tomcat启动后.部署在tomcat中的项目启动,相应在根据项目下的web.xml文件来实例化s

struts入门实例

创建maven web项目 配置pom.xml 加入struts的依赖包 <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.13</version> </dependency> 下面是pom.xml的全部配置 <project xmlns="ht

Struts2 + Spring 学习(一)搭建struts开发环境

·为Web应用增加Struts2支持 1. 登陆struts2官网下载struts2的最新版,本文所用的是Struts 2.3.16.2 我们所下载的压缩包内内容应给如下 其中,apps包含了struts2的实例应用,docs包含了struts2的相关文档,lib包含了Struts2框架的核心类库以及struts2的第三方插件类库,src包含了struc包含了struts2框架的全部源码. 2. 在Eclipse新建Web工程,将是所用到的类库放到WEB-INF/路径下 3. 编辑Web应用的w