ch21struts1.x概述
- 格式:ppt
- 大小:3.36 MB
- 文档页数:51
struts1.x——第一章框架技术概述1struts框架简介1.1经典MVC设计模式Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages 、Servlet、标签库以及面向对象的技术水准。
Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。
这个框架之所以叫"Struts",是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至我们踩高跷时候的基础支撑。
这也是一个解释Struts在开发Web应用程序中所扮演的角色的精彩描述。
当建立一个物理建筑时,建筑工程师使用支柱为建筑的每一层提供支持。
同样,软件工程师使用Struts为业务应用的每一层提供支持。
它的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。
我们仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。
如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。
Struts对Model,View和Controller都提供了对应的组件。
ActionServlet,这个类是Struts的核心控制器,负责拦截来自用户的请求。
Action,这个类通常由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。
Model部分由JavaBean组成,ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionFrom里面的请求参数处理用户的请求。
JavaBean则封装了底层的业务逻辑,包括数据库访问等。
View部分该部分采用JSP实现。
Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。
struts1.x一、开发struts1应用的基本步骤1)首先导入struts1的所有jar包;2)在WEB-INF下创建struts-config.xml这个核心配置文件;3)在web.xml文件中配置struts的主控器ActionServlet;注:以上三步可以通过MyEclipse插件自动完成4)创建一个ActionForm类,继承ActionForm(可选),在这个类中提供属性和getter/setter方法来获得客户端提交的参数值;5)创建一个Action类,继承Action。
在execute方法中编写处理请求的代码,处理完成后返回一个ActionForward对象给主控器。
注:ActionForword实际上是一个包含了视图路径和转发请求方式的一个对象,这个对象可以有两种创建方式:1.直接new一个,在创建的时候,通过构造器传入视图路径和转发请求方式等信息。
2.通过ActionMapping对象的findForward方法创建,这种方式实际上是在配置文件中配置转发请求的一些信息,然后根据这些信息创建一个ActionForward对象。
6)在struts-config.xml文件中配置Action;7)在jsp页面上指定发送请求的路径,必须以.do结尾。
二、Struts的工作流程***装载并实例化ActionServlet***当Web Server启动装载Web应用(基于Struts)时,容器先将ActionServlet装载进虚拟机并实例化,接着调用init()方法,在init()中ActionServlet去解析struts-config.xml文件,将其中的元素信息封装到相应的对象中,对象被存放到Struts框架维护的集合中。
例如:<form-bean>元素 --> ActionFormBean对象<action>元素 --> ActionMapping对象元素中的属性 --> 对象中的属性注: ActionFormBean和ActionMapping对象被存放在Struts框架维护的HashMap 中HashMap formbeans(name,ActionFormBean对象引用)HashMap actionconfigs(path,ActionMapping对象引用)init()方法调用完毕后,ActionServlet处于service状态,可以接受客户端的请求。
本系列教程将详细介绍Struts 1.x的基本原理和使用方法,读者可以参阅《Struts 2系列教程》来比较Struts 1.x和Struts 2.x的相同点和不同点。
在这篇文章中将以一个简单的例子(mystruts)来演示如何使用MyEclipse来开发、运行Struts程序,并给出了解决ActionForm出现乱码问题的方法。
读者可以从本文中了解开发Struts 1.x程序的基本过程。
一、本文给出的程序要实现什么功能mystruts是一个录入和查询产品信息的程序。
为了方便起见,本例中的产品信息表只包括了产品ID、产品名称和产品价格三个字段。
mystruts的主要功能如下:1. 接受用户输入的产品ID、产品名称和产品价格。
2. 验证这些字段的合法性。
如果某些字段的输入不合法(如未输入产品ID),程序会forward到一个信息显示页,并显示出错原因。
3. 如果用户输入了正确的字段值,程序会将这些字段值保存到数据库中,并显示“保存成功”信息。
4. 用户输入产品名称,并根据产品名称进行模糊查询。
如果存在符合要求的产品信息。
程序会以表格形式显示这些产品的信息,同时显示记录数。
如果未查到任何记录,会显示“没有符合要求的记录!”信息。
二、编写程序前的准备工作1. 建立数据库在编写程序之前,需要建立一个数据库(struts)和一个表(t_products),建立数据库和表的SQL脚本如下所示:# 建立数据库strutsCREATE DATABASE IF NOT EXISTS struts DEFAULT CHARACT ER SET GBK;# 建立表t_productsCREATE TABLE IF NOT EXISTS struts.t_products (product_id varchar(4) NOT NULL,product_name varchar(50) NOT NULL,price float NOT NULL,PRIMARY KEY (product_id)) ENGINE=InnoDB DEFAULT CHARSET=gbk;2 建立一个支持struts1.x的samples工程用MyEclipse建立一个samples工程(Web工程),现在这个samples 工程还不支持Struts1.x(没有引入相应的Struts jar包、struts-config.xml 文件以及其他和Struts相关的配置)。
Struts1原理当用户发送一个HTTP请求时,该请求被ActionServlet(核心控制器)拦截,ActionServlet将该请求转发给对应的业务逻辑控制器,业务逻辑控制器调用模型来处理用户请求;如果用户请求只是希望得到某个URL资源,则由ActionServlet将被请求的资源转发给用户。
如果需要调用业务逻辑控制器处理用户请求,则调用业务处理器将处理结果通过JSP呈现给用户。
Struts 1.x的组件Model部分Struts 1.x的Model部分主要由底层的业务逻辑组件充当,这些业务逻辑组件封装了底层数据库访问、业务逻辑方法实现。
对于一个成熟的企业应用而言,Model部分也不是一个简单的JavaBean所能完成的,它可能是一个或多个EJB组件,可能是一个WebService服务。
Model部分封装了整个应用的所有业务逻辑,但整个部分并不是由Struts 1.x提供的,Struts 1.x除了对ActionForm提供自动赋值之外,没有为实现Model组件提供其他支持。
View部分Struts 1.x的View部分采用JSP实现。
Struts 1.x提供了丰富的标签库,通过这些标签库可以最大限度地减少脚本的使用。
这些自定义的标签库可以输出控制器的处理结果。
虽然Struts 1.x提供了与Tiles框架的整合,但Struts 1.x所支持的表现层技术非常单一:既不支持FreeMarker、Velocity等模板技术,也不支持JasperReports等报表技术。
Controller部分Struts 1.x的Controller由两个部分组成。
系统核心控制器:由Struts 1.x框架提供,就是系统中的ActionServlet。
业务逻辑控制器:由Struts 1.x框架提供,就是用户自己实现的Action实例。
Struts 1.x的缺陷(Struts1的缺陷是相对于Struts2来说的)(1)与Servlet API严重耦合,难于测试因为Struts 1.x框架是在Model 2的基础上发展起来的,因此它完全是基于Servlet API 的,所以在Struts 1.x的业务逻辑控制器内,充满了大量的Servlet API。
struts1工作原理
Struts 1是一个基于模型-视图-控制器(Model-View-Controller,MVC)架构的Web应用程序框架。
它的工作原理如下:
1. 请求分发:当用户发送一个HTTP请求时,Struts的控制器
组件(ActionServlet)接收并拦截这个请求。
2. 配置查找:ActionServlet查找配置文件struts-config.xml,该
文件定义了请求路径与对应的控制器以及其他配置信息。
3. 控制器执行:根据请求路径,ActionServlet实例化并执行对
应的控制器(Action)组件。
控制器处理请求参数和业务逻辑,并根据需要访问模型(Model)组件来获取、修改数据。
4. 视图生成:控制器完成处理后,将结果数据传递给视图(JSP页面)组件,用于生成动态的HTML响应。
5. 响应发送:视图生成完毕后,ActionServlet将响应返回给客
户端浏览器,完成整个请求-响应周期。
在这个工作过程中,Struts 1还提供了其他重要的组件和功能,如表单验证、国际化支持、异常处理等,以及许多预定义的标签库和工具类,帮助开发者更方便地构建和管理Web应用程序。
Struts1原理及配置讲解附源码最近要看公司网站源码,源码都是用struts1写的,我们平时用的都是struts2,所以的对struts1不是很熟悉。
我也就是刚开始接触struts的时候对struts1有个简单的学习(搭建一个简单的项目,然后连接数据库做一些增删改查的操作还可以,但是具体的原理让我说我也说不上来),因此今天抽一部分时间把struts1的概念了解下和自己动手搭建一个项目使用struts1(就是一个简单的用户登录,居然可以跑起来,瞬间感觉对用struts1做一些简单功能还是可以做成的)。
废话不说了....首先介绍下struts1工作原理:1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。
(面向对象思想)2.发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器。
3.form填充:struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中。
4.派发请求:控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给这个Action中的excute()方法。
5.处理业务:Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。
服务器通过ActionForward对象进行转发工作。
6.返回响应:Action将业务处理的不同结果返回一个目标响应对象给总控制器。
7.查找响应:总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面。
Struts1简介和入门1. 框架框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。
也就是说框架是一个半成品的应用程序。
我们所面对的应用程序一般都是分为两部分,一部分是业务相关的组件部分,另一部分是和业务无关的组件部分。
而我们知道和业务相关的组件部分的重用性是非常低的,这也是显而易见的事情;而和业务无关的组件部分,如验证、异常、程序流程控制等等服务组件的复用性是非常高的。
所以当人们在不同的应用程序中抽出共性的组件,构成一个半成品应用程序,这时候框架就应运而生了。
2. Struts1框架什么是struts1框架?解答这个问题,就不得不看先前的三篇中的mvc设计模式实例,因为struts1框架是一个基于mvc的框架(如果弄懂那个实例,这里理解struts1框架是非常轻松的)。
Struts1框架结构如图:上面图展示了struts1框架的结构,从左到右,分别是V,C,M。
表示层主要由JSP和标签库组成。
所有通过struts1框架的请求都经过ActionServlet接受(这个类struts1框架已经给我封装好了),根据接收的请求参数和Struts配置(struts-config.xml)中ActionMapping,将请求送给合适的Action去处理,解决由谁做的问题,它们共同构成Struts的控制器。
Action则是Struts应用中真正干活的组件,开发人员一般都要在这里耗费大量的时间,它解决的是做什么的问题,它通过调用需要的业务组件(模型)来完成应用的业务,业务组件解决的是如何做的问题,并将执行的结果返回一个代表所需的描绘响应的JSP(或Action)的ActionForward对象给ActionServlet以将响应呈现给客户。
虽然现在还没有实现一个struts1框架实例,但是我们有了先前mvc设计模式实例的基础,我们来看struts框架,我们发现我们先前的实例中的testservlet做了struts中的Actionservlet的事情;AddUserAction、DelUserAction、ModifyUserAction、QueryUserAciton做了struts中的Action事情,ActionForm做了struts中actionform的事情;actionmapping做了struts中actionmapping的事情;action_config.xml做了struts-config.xml的事情。
struts1与struts2的区别Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用。
作为最成功的Web框架,Struts自然拥有众多的优点:MVC 2模型的使用、功能齐全的标签库(Tag Library)、开放源代码。
但是,正所谓“没有最好,只有更好”,Struts1.x自身也有不少的缺点:需要编写的代码过多,容易引起“类爆炸”、单元测试困难。
这些缺点随着Web的发展越来越明显。
这就促生了Struts 2,它的诞生能很好的解决上述问题。
在本文中,笔者将对Struts2和Struts1.x这两种框架进行详细的比较。
比较将涉及到这两种框架的Action、验证、类型转换及如何开发等方面的内容。
希望通过这样的比较,让读者了解这两种框架各自的特点,以便于在自己的项目中,根据实际情况,尽快的过渡到Struts2的时代。
本文的内容基于Struts2.0.6。
一、引言Struts的第一个版本是在2001年5月份发布的。
它的最初设想是通过结合JSP和Servlet,使Web应用的视图和业务/应用逻辑得以清晰地分离开来。
在Struts之前,最常见的做法是在JSP中加入业务和应用逻辑,或者在Servlet中通过println()来生成视图。
自从第一版发布以来,Struts实际上已成为业界公认的Web应用标准。
它的炙手可热也为自己带来了改进和变更,所以不但要跟上对Web应用框架不断变化的需求,而且要与日渐增多竞争激烈的众多框架的特性相融合。
到最后,产生了几个下一代Struts的解决方案。
其中两个最受瞩目的方案是Shale和Struts Ti。
Shale是一个基于构件的框架,并在最近成为Apache的顶级项目。
而Struts Ti则是在Struts的成功经验基础上继续坚持对前端控制器(Front Controller)和MVC(model-view-controller)模式进行改进。
struts框架详细介绍Struts是一个开源的Java Web应用程序开发框架,可以帮助开发者构建可扩展的、高性能的Web应用程序。
它遵循了Model-View-Controller(MVC)设计模式,通过将业务逻辑、表示逻辑和用户交互进行分离,使得应用程序更易于开发、测试和维护。
下面是关于Struts框架的详细介绍。
1.MVC设计模式:Struts采用了MVC设计模式,将应用程序的不同组成部分进行分离。
- Model层负责处理数据和业务逻辑。
在Struts中,开发者可以使用JavaBean、EJB、Hibernate等技术作为Model层的实现。
- View层负责展示数据和用户界面。
Struts提供了JSP(JavaServer Pages)作为主要的View技术,也可以使用Velocity、Freemarker等模板引擎。
- Controller层负责接收用户请求、处理业务逻辑以及将结果返回给View层。
Struts的Controller层使用ActionServlet来处理请求,它根据配置文件中的映射规则将请求转发给合适的Action类进行处理。
2.核心组件:Struts由以下几个核心组件组成:- ActionServlet:负责接收和处理来自客户端的请求,并根据配置文件中的映射规则将请求转发给合适的Action类进行处理。
- Action类:实现了业务逻辑的处理,接收请求和返回结果。
开发者需要继承Action类,并覆写其中的execute(方法来实现自定义的业务逻辑。
- ActionForm:用于封装请求参数并传递给Action类进行处理。
ActionForm可以与表单元素进行绑定,从而方便地获取和验证用户输入。
- ActionMapping:配置文件中的一项规则,用于将请求URL映射到具体的Action类和方法。
- ActionForward:配置文件中的一项规则,用于指定请求处理完成后需要跳转到的页面。
Struts串讲一、struts概述1、Struts实现MVC设计模式(1)Struts实质上就是在JSPModel2的基础山实现一个MVC框架。
1)模型:由业务实现业务逻辑的JavaBean或EJB组件构成2)控制器:由ActionServlet和Action来实现3)视图:由一组JSP文件构成(2)2、Struts的工作流程(1)Web应用启动时加载并初始化ActionServlet,ActionServlet从struts-config.xml 中读取配置信息,把它们存放到各种配置对象中。
(2)当ActionServlet接收到一个客户请求时,检索和用户请求匹配的ActionMapping 实例,如果不存在,就返回用户请求路径无效的信息。
(3)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
(4)根据配置信息决定是否需要表单验证。
如果需要验证,就调用ActionForm的validate()。
(5)ActionForm的validate()方法1)如果返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。
2)如果返回一个包含一个或多个ActionMessage的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含用户提交表单的JSP组件。
在这种情况下,不会再创建Action对象并调用Action的execute()方法。
(6)ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。
如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。
(7)Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。
Struts1、Struts2、Hibernate、Spring框架工作原理介绍Struts1工作原理Struts1工作原理图1、初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。
(面向对象思想)2、发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器。
3、form填充:struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中。
4、派发请求:控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给这个Action中的excute()方法。
5、处理业务:Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。
服务器通过ActionForward对象进行转发工作。
6、返回响应:Action将业务处理的不同结果返回一个目标响应对象给总控制器。
7、查找响应:总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面。
8、响应用户:目标响应对象将结果传递给资源对象,将结果展现给用户。
Struts1优缺点(为什么要用strust1)1.优点:①开源的框架,结构清晰②是MVC的经典实现(MVC是一种思想,而不是一种技术)③处理异常机制,实现国际化④具有强大的标签库⑤解决了JSP页面存在大量的JAVA代码,维护起来方便⑥在formBean中会自动提交,不会去使用传统的get、set方法得到值、取值2.缺点:①配置复杂②测试不方便③依赖web容器④action是一个单例模式,必须设置为线程安全Struts2工作原理struts2工作原理图1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类6 ActionProxy创建一个ActionInvocation的实例。
struts的工作原理Struts是一个基于Java的开源MVC框架,用于构建Web应用程序。
它提供了一种将业务逻辑、数据访问和用户界面分离的方式,以提高应用程序的可维护性和可扩展性。
在本文中,我们将详细介绍Struts的工作原理,包括其核心组件、请求处理流程和数据流动。
一、核心组件1. 控制器(Controller):Struts的控制器是一个Servlet,它充当了整个框架的核心。
当用户发起请求时,控制器负责接收请求并将其路由到相应的处理程序。
2. 动作(Action):动作是一个Java类,用于处理具体的业务逻辑。
每个动作都实现了Action接口,并重写了execute()方法。
控制器通过配置文件将请求映射到相应的动作。
3. 表单(Form):表单用于封装用户提交的数据。
每个表单都是一个JavaBean,它包含了与用户界面相关的属性和验证规则。
表单的数据由控制器传递给相应的动作进行处理。
4. 视图(View):视图负责展示数据给用户。
在Struts中,通常使用JSP作为视图技术。
动作处理完数据后,将数据存储在请求的属性中,并将请求转发给相应的JSP页面进行展示。
5. 拦截器(Interceptor):拦截器用于在请求处理的不同阶段执行一些共享的任务,如身份验证、日志记录等。
拦截器可以在控制器和动作之间进行配置,以实现特定的功能。
二、请求处理流程1. 用户发起请求:用户在浏览器中输入URL或点击链接,向服务器发送请求。
2. 控制器接收请求:服务器接收到请求后,将其交给Struts的控制器。
3. 控制器路由请求:控制器根据配置文件将请求路由到相应的动作。
4. 动作处理请求:动作接收到请求后,根据业务逻辑进行处理。
它可以从请求中获取表单数据,并执行相应的操作。
5. 动作返回结果:动作处理完请求后,将结果存储在请求的属性中,并将请求转发给相应的JSP页面。
6. 视图展示数据:JSP页面接收到请求后,从请求的属性中获取数据,并将其展示给用户。