Struts2+spring注解配置简介
INF/fail.jsp") }) String
是
无
指定result对应的
public class HelloWorld extends ActionSuppoUrRt L{
pSutrbinligc Strin否g executed(is){praettcuhrenr "failure指";}定result的类型
public String method1() {...} @Action("url")
public String method2() { ...} @Action("/different/url")
public String method3() {... } } 通过 /other/hello-world!method1.action 访问method1 方法。 通过 /other/url!method2.action 访问method2 方法 通过 /different /url!method3.action 访问method3 方法 与@Action 注释不同的是,该注释覆盖了默认的namespace(这里 是’/’),此时再用hello!method1.action 已经不能访问method1 了.
类,
InterceptorRef s注解中
@InterceptorRefs 一组拦截器集合
类,action注 解中
Struts2中使用注解配置Action
@ParentPackage
ParentPackage注解的参数,如下:
参数 value
类型 String
是否必需 是
默认值 无
描述 指要继承的父包
Struts2中使用注解配置Action
与注解有关的参数
Result注解的参数如表所示:
参数
类型 是否
默认值
描述
必需name locati源自ntype@RSetrsinuglts({ 否 Actoin.SUCCESS 指定result的逻辑名, @Result(name="failure", location="/WEB即- 代码结果
params } String[] 否
{}
为result传递参数,
格式为
{key1,value1,key2,
public class HelloWorld extevnadluseA2}ctionSupport
{ 对应@Results和@Result可分@为Ac全tio局n的(v与alu本e地="的/other/bar",results={@Result(n
@vrAeacpslutuuie@lo@btstnlppRyiR(cuupveecbbeassl=llluuauiicc"lsletrt(sSS(e=nnd"ttHaarr/iiuimremnneslggeleceo==trmmAA"/"SRacvcveecteititttreietihhsionoiwwuooongnlsnddit“nseu321)[px}c“]((,))ut,ciern{{teen"..ts..s,ed..ls}}uors"clct,Aelsaopc=tcitt{ooiaonrtinR=o指指集S"en/ufv=定定合spi"=ep/a此{wvocia/tersitocwhtn{i/oo的swnh名中obwo称的jslstp.j"s,p"),
入@CRoens在uvle此t n插tio件n 中与包Co含d定如eb义下eh一ainn个ndore会tast出uilot现映ns启射:动异常)
类,Results 注解中
@Results
定义一组result映射
类,action注 解中
@Namespaces
指定一组action所属的名称空间
包,类
@InterceptorRef 一个拦截器
int}/e/如rc果ep要to调rR用efs上述的mInetethrcoedp1t(o)@r及R}Iem)nftsee[tr]hcoedp2to(指截)rR方定器e法f此(",mac可ytido以enf下用au对下ltS应面ta的UcR拦kI")
}//如p通果upeb过ax采mmlcria使ce用eempttS用hh此tsotoor@i种niddnM12A方gacm式ptipoe,intnh可g可osd以以//hh3E使(eeSE)xlltxll{r用cooci.n.ee!!.如mmg}pp[tt]ee下iiootthhn方nMoos式ddMa12p访a..paapi问ccnpttgiiinsoognns[提指]定供定a的的cti参异on数常的处名理称。
此注}解) 可以加在类,InterceptorRefs等上面 。 @DefaultInterceptorRef可
以合p定ub义li一c c个la默ss认H的el拦lo截W器or.ld extends ActionSupport {
1. 全局的(global)
ame = "error", location =
2. 本地的(local)
"",type="redirect")})
public String method1() {return "error";}
}
Struts2中使用注解配置Action
与注解有关的参数
Results注解的参数如表所示:
参数 类型
是否必需
value Result[]
是
默认值 描述 无 为action定义一组result映射
示例: @Results({
@Result(name=“input”,value=“/input.jsp”), @Result(name=“success” value=“/success.jsp”) })
注意:如果注解中只有一个名为value的参数,或者有其他参数,但其 他参数都有默认值,那么在为value参数设值时可以忽略value和等号 (=),例如:
@ParentPackage(value=“struts-default”)
@ParentPackage(“struts-default”) 这二种配置是一样的
} @Actions({
我们@调Ac用timone(th"/oddi1ff方er法en可t/u以rl通"),过两种方式:
1 /@heAllcot!imone(t"h/oando1.tahcetri/ounrl")
2 }/a) nother/url!method1.action
可p见ub,li两c S种tr方in式g 均m可eth对omd1e(t)ho{.d..1}方法进行调用,唯一的区别就是,
参数名
类型
描述
value
Action[] 用于包含一组@Action注解
比如pu:blic class HelloAction extends ActionSupport { @Action("/another/url")
publipcucblaliscsSHtreinllogAmcetitohnode1x(t)en{.d..s} ActionSupport {
s@truPtasr2e-nctoPnavceknatigoen-plu指gi定n-2继.1承.6的.ja包r, (从strustsru2)t名s2.1 版本开始,包C,o类nvention
P@luNgaimn e作sp为a替ce换替换 指Co定daecbteiohni所nd属P的lu名gin称来空实间现 Struts2包的,零类配置.同时导
Struts2中使用注解配置Action
当@Namespace与@Action配合使用注意事项
如果在@Action注解中包括”/”字符地,则意味着该注释覆盖了默认的 namespace(这里是’/’),此时访问action就有一些小的改动。如下例:
@Namespace("/other") public class HelloWorld extends ActionSupport {
//上例中定义了两个result映射。一个逻辑名是input,资源位置是 /input.jsp。另一个逻辑名是success,资源位置是/success.jsp
Struts2中使用注解配置Action
pub@licAcclatsisoHnelloAction extends ActionSupport {
两} 种调用的映射是不一样的,所以,想跳转到不同的界面,这是一
个/d非iff常ere好n的t/u选rl!择m。ethod1.action 或 /another/url!method1.action
来调用method1 方法。
一个方法被@Action或@Actions注释后,只是多了一种调用方式,而不 是说覆盖了原来的调用方式。
N也am就e是ps可pa以c通es过用发于起声:明/一cr组ud名/b称oo空k!间ad。d.参ac数tio如n下表所示:
二参个数uri 请求都能类访型问到/uAscet是iro/否需bno中必o的k!a方d默法d认.a值ction
描述
value Namespace
否
无 在里面定义一Namespace 的数组
Struts2中使用注解配置Action
@InterceptorRef及@InterceptorRefs
@I可nt以er使ce用pt@orIRnteefrsc({eptorRef来为一个action定义一个拦截器,注意此注
解只是@在Int此eraccetpiotonr上Re引f(用"m拦y截de器fa,ult此St拦ac截k"器) 需要在struts.xml中进行定义。
Struts2配置文件通配符的使用说明
Struts2配置文件中使用通配符收藏形式一:调用相同Action中的不同方法<action name="*Action" class="Jcuckoo.LoginRegistAction" method="{1}"><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result></action>其中表达式{1}的值name属性值中第一个*的值。
如果用户请求的URL为loginAction.action,则调用Jcuckoo.LoginRegistAction中的login方法;如果用户请求的URL为registerAction.action,则调用Jcuckoo.LoginRegistAction中的register方法;形式二:通过匹配,调用不同的Action的execute方法<action name="*Action" class="Jcuckoo.{1}Action"><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result></action>上面没有出现method属性,故默认调用对应的execute方法如果用户请求的URL为LoginAction.action,则调用Jcuckoo.LoginAction中的execute方法;如果用户请求的URL为RegisterAction.action,则调用Jcuckoo.RegisterAction中的execute方法;形式三:动态结果<action name="crud_*" class="Jcuckoo.CrudAction" method="{1}"><result name="input">/input.jsp</result><result>/{1}.jsp</result></action>当处理结果是input时,会转到/input.jsp页面当处理结果是success时,如果crud_create.action,则会执行Jcuckoo.CrudAction中的create方法,并且跳转到/create.jsp;如果crud_delete.action,则会执行Jcuckoo.CrudAction中的delete方法,并且跳转到/delete.jsp;。
struts2
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1》找到开发Struts2应用需要使用到的jar文件. 2》编写Struts2的配置文件 3》在web.xml中加入Struts2 MVC框架启动配置
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境--Struts2在web中的启动配置
在struts1.x中, struts框架是通过Servlet启动的.在struts2中, struts框架是通过Filter启动的.他在web.xml中的配置如下:
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
讲师: 讲师:黎活明
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架. 不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但 Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要 推出struts2.主要是因为struts2有以下优点:
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
第一个Struts2应用--HelloWorld
在默认的配置文件struts.xml 中加入如下配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <package name="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>
【SpringFramework】Spring入门教程(三)使用注解配置
【SpringFramework】Spring⼊门教程(三)使⽤注解配置本⽂主要介绍四个⽅⾯:(1) 注解版本IOC和DI(2) Spring纯注解(3) Spring测试(4) SpringJDBC - Spring对数据库的操作使⽤注解配置Spring⼊门说在前⾯学习基于注解的IoC配置,⼤家脑海⾥⾸先得有⼀个认知,即注解配置和xml配置要实现的功能都是⼀样的,都是要降低模块间的耦合度。
仅仅只是配置的形式不⼀样。
关于实际的开发中到底使⽤xml还是注解,每家公司有着不同的使⽤习惯。
所以这两种配置⽅式我们都需要掌握。
基于注解配置的⽅式也已经逐渐代替xml配置。
所以我们必须要掌握使⽤注解的⽅式配置Spring。
配置步骤注意:如果使⽤Eclipse需要先安装了STS插件,或者使⽤STS开发⼯具创建项⽬。
本⽂使⽤IDEA进⾏演⽰。
1.2.1. 第⼀步:拷贝必备jar包到⼯程的lib⽬录。
注意:在基于注解的配置中,我们还要多拷贝⼀个aop的jar包。
如下图:1.2.2. 第⼆步:在类的根路径下创建⼀个任意名称的xml⽂件(不能是中⽂)注意:基于注解整合时,Spring配置⽂件导⼊约束时需要多导⼊⼀个context命名空间下的约束。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"></beans>1.2.3. 第⼆步:创建⼀个服务类创建⼀个测试的服务类,并且加⼊使⽤@Component注解,声明该类允许注⼊到Spring容器package org.cjw.service;import ponent;/*使⽤注解配置时,需要将Spring框架启动就创建对象的类表⽰为组件类表⽰组件类使⽤@Component注解*/@Componentpublic class CustomerService {public void save() {System.out.println("-保存数据-");}}1.2.4. 第四步在spring的配置⽂件加⼊扫描注解<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"><!-- 声明扫描包及其⼦包的类,如果发现有组件注解的类,就创建对象并加⼊到容器中去 --><context:component-scan base-package="org.cjw" /></beans>1.2.5. 第五步:测试调⽤代码package org.cjw.test;import org.cjw.service.CustomerService;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class CustomerServiceTest {@Testpublic void testSave() {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");CustomerService customerService = context.getBean(CustomerService.class);customerService.save();}}--测试结果,如果可以调⽤服务⽅法,测试成功。
Struts2配置详解2 配置Action
配置ActionStruts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。
该方法如下:public String execute() throws ExceptionStruts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:public String xxx()在实际开发中,action类很少直接实现Action接口,通常都是从com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。
开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。
1.Action映射:action映射是Struts2框架中的基本”工作单元”,action映射就是将一个请求URL(即action的名字)映射到一个action类,当一个请求匹配某个action的名字时,框架就使用这个映射来确定如何处理请求。
action元素的完整属性表例如:<action name="user" class="erAction"><result name="success">/user.jsp</result></action>2. 使用method属性在配置action时,我们可以通过action元素的method属性来指定action调用的方法,所指定的方法,必须遵循与execute方法相同的格式。
Spring常用的一些注解说明
Spring常⽤的⼀些注解说明@Configuration从Spring3.0,@Configuration⽤于定义配置类,可替换xml配置⽂件,被注解的类内部包含有⼀个或多个被@Bean注解的⽅法。
这些⽅法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进⾏扫描,并⽤于构建bean定义。
@Bean@Bean注解⽤于告诉⽅法,产⽣⼀个Bean对象,然后这个Bean对象交给Spring管理。
产⽣这个Bean对象的⽅法Spring只会调⽤⼀次,随后这个Spring将会将这个Bean对象放在⾃⼰的IOC容器中。
SpringIOC 容器管理⼀个或者多个bean,这些bean都需要在@Configuration注解下进⾏创建,在⼀个⽅法上使⽤@Bean注解就表明这个⽅法需要交给Spring进⾏管理。
@Autowired、@Resource@Resource和@Autowired注解都是⽤来实现依赖注⼊的。
只是@AutoWried按by type⾃动注⼊,⽽@Resource默认按byName⾃动注⼊。
♣ @Autowired@Autowired具有强契约特征,其所标注的属性或参数必须是可装配的。
如果没有Bean可以装配到@Autowired所标注的属性或参数中,⾃动装配就会失败,抛出NoSuchBeanDefinitionException.@Autowired可以对类成员变量、⽅法及构造函数进⾏标注,让 spring 完成 bean ⾃动装配的⼯作。
@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。
♣ @Resource@Resource是JDK提供的注解,有两个重要属性,分别是name和type。
@Resource依赖注⼊时查找bean的规则既不指定name属性,也不指定type属性,则⾃动按byName⽅式进⾏查找。
Struts2+Spring3+Hibernate3 集成方法
Struts2+Spring3+Hibernate3 集成 目 录 1.Struts2集成 ..................................................... 11.1. 把Struts提供的jar包拷贝到/WEB-INF/lib/目录下 (1)1.2. 在web.xml中配置Struts的过滤器 (2)2.Struts2开发 ..................................................... 22.1 编写Struts Action程序,需要继承ActionSupport (2)2.2 创建struts.xml的Action映射文件 (3)3.Struts2+Spring集成 .............................................. 33.1 按第1步“Struts2集成”方法集成Struts2 (3)3.2 再把Struts的Spring插件把拷贝到/WEB-INF/lib/目录下 (3)3.3 把Spring提供的jar拷贝到/WEB-INF/lib/目录下 (3)3.4 web.xml配置Spring的过滤器 (3)3.5 创建applicationContext.xml配置文件 (4)4.Struts2+Spring+Hibernate集成 ..................................... 54.1 先按照“Struts2+Spring集成”方法执行 (5)4.2 导入Apache Commons几个jar包 (5)4.3 导入Hibernate几个jar包 (5)4.4 数据库的JDBC驱动 (5)4.5 在applicationContext.xml中加入如下的配置 (5)4.6 创建hibernate.cfg.xml文件 (6)5.Struts2+Spring+Hibernate开发 ..................................... 65.1 编写Model类 (6)5.2 编写Model类的HBM映射文件 (7)5.3 在applicationContext.xml中指定HBM映射文件路径 (8)5.4 编写DAO接口和实现类程序,并继承HibernateDaoSupport (8)5.5 在applicationContext.xml中配置DAO Bean (10)6.注意事项 ....................................................... 101. Struts2集成1.1.把Struts提供的jar包拷贝到/WEB-INF/lib/目录下Struts需要如下几个包:解压:struts-2.2.3.1-lib.zip需要:struts2-core-2.2.3.1.jarxwork-core-2.2.3.1.jarognl-3.0.1.jarfreemarker-2.3.16.jarjavassist-3.11.0.GA.jar和所有以“commons-”开头的包。
struts2框架下aop日志管理部分方法
在struts2框架下,使用AOP(面向切面编程)实现日志管理是一个常见的需求。
在实际开发中,我们经常需要对一些方法进行日志记录,以便在出现问题时进行排查和分析。
本文将从以下几个方面介绍在struts2框架下使用AOP实现日志管理部分方法的方法。
一、AOP概述AOP是一种编程范式,它通过预编译方式和运行期动态代理实现系统功能的增强。
在struts2框架中,我们可以使用AOP来实现日志管理、事务管理、安全检查等功能。
通过AOP,我们可以将这些功能与业务逻辑解耦,提高系统的可维护性和复用性。
二、使用Log4j记录日志在struts2框架下,我们通常使用Log4j来记录日志。
Log4j是一个功能强大的日志框架,它可以对日志信息进行灵活的配置和管理。
我们可以通过在方法中插入Log4j的日志记录代码,来实现对方法的日志管理。
三、编写Aspect类在struts2框架中,我们可以通过编写Aspect类来实现AOP。
Aspect类是一个Java类,其中包含了我们希望在方法执行前、执行后或出现异常时执行的代码。
在Aspect类中,我们可以通过注解或XML配置的方式来定义切点和通知。
切点用于指定哪些方法需要被增强,通知用于定义增强逻辑。
四、定义切点和通知通过在Aspect类中定义切点和通知,我们可以精确地控制增强的范围和逻辑。
切点可以使用通配符、正则表达式等方式来指定目标方法,通知可以分为前置通知、后置通知、环绕通知和异常通知。
通过合理地定义切点和通知,我们可以实现对特定方法的日志管理。
五、配置Spring AOP在struts2框架中,我们可以通过配置Spring AOP来实现AOP。
Spring AOP是基于代理的AOP框架,它可以与struts2框架无缝集成。
我们可以通过在Spring配置文件中定义Aspect类和切点,来实现对方法的日志管理。
六、示例代码以下是一个在struts2框架下使用AOP实现日志管理的示例代码:```java//Aspect类public class LogAspect {@Before("execution(*.example.service.*.*(..))")public void beforeLog(JoinPoint joinPoint){String methodName = joinPoint.getSignature().getName(); String className =joinPoint.getTarget().getClass().getName();System.out.println(className + "的" + methodName + "方法开始执行");}@After("execution(*.example.service.*.*(..))")public void afterLog(JoinPoint joinPoint){String methodName = joinPoint.getSignature().getName(); String className =joinPoint.getTarget().getClass().getName();System.out.println(className + "的" + methodName + "方法执行结束");}}``````xml<!--Spring配置文件--><bean id="logAspect" class=.example.aspect.LogAspect"/><bean id="logInterceptor"class="org.springframework.aop.framework.autoproxy.BeanNa meAutoProxyCreator"><property name="proxyTargetClass" value="true"/><property name="beanNames"><list><value>*Service</value></list></property><property name="interceptorNames"><list><value>logAspect</value></list></property></bean>```七、总结在struts2框架下使用AOP实现日志管理是一个非常有用的功能。
struts2入门教程一(环境搭建,基本案例实现)CSDN
Struts2入门初步需掌握1.struts2概述2.struts2环境搭建(第一个struts2的应用程序)3.struts.xml文件配置详解4.struts2请求的URL的搜索路径的顺序概述5.struts2工作原理概述6.struts2指定多个配置文件7.struts2动态方法调用8.使用通配符定义action一:简介Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
二:环境搭建搭建Struts2环境时,我们一般需要做以下几个步骤的工作:1.找到开发Struts2应用需要使用到的jar文件.下载官网:/download.cgi#struts221解压后:开始学习使用依赖的最基本的jar 包2:编写Struts2的配置文件解压其中一个案例在此目录下找到struts.xml 文件先拷贝到项目的src 下。
再对起进行修改。
删除剩余如下代码:[html]01.<?xml version ="1.0"encoding ="UTF-8" ?> 02.<!DOCTYPE struts PUBLIC 03."-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN" 04."/dtds/struts-2.3.dtd"> 05.06.<struts> 07.08. </struts>无法加载插件。
struts2
struts2.Struts2课件1Mvc与servlet1.1 Servlet的优点1、是mvc的基础,其他的框架⽐如struts1,struts2,webwork都是从servlet基础上发展过来的。
所以掌握servlet是掌握mvc的关键。
2、Servlet把最底层的api暴漏给程序员,使程序员更能清楚的了解mvc的各个特点。
3、程序员可以对servlet进⾏封装。
Struts2就是从servlet中封装以后得到的结果。
4、市场上任何⼀个mvc的框架都是servlet发展过来的,所以要想学好struts2这个框架,了解servlet的运⾏机制很关键。
1.2 Servlet的缺点1、每写⼀个servlet在web.xml中都要做相应的配置。
如果有多很servlet,会导致web.xml内容过于繁多。
2、这样的结构不利于分组开发。
3、在servlet中,doGet⽅法和doPost⽅法有HttpServletRequest和HttpServletResponse参数。
这两个参数与容器相关,如果想在servlet中作单元测试,则必须初始化这两个参数。
4、如果⼀个servlet中有很多个⽅法,则必须采⽤传递参数的形式,分解到每⼀个⽅法中。
2重构servlet针对servlet以上的特点,我们可以对servlet进⾏重构,使其开发起来更简单。
更容易,更适合团队协作。
重构的⽬标:1、只写⼀个serlvet或者过滤器,我们这⾥选择过滤器。
2、不⽤再写任何的servlet,这样在web.xml中写的代码就很少了。
3、原来需要写serlvet,现在改写action。
4、在action中把HttpServletRequest参数和HttpServletResponse参数传递过去。
5、在过滤器中通过java的反射机制调⽤action。
6、详细过程参照cn.itcast.action包中的内容3Struts2介绍1、struts2是apache组织发明的开源框架。
第一章Struts2系统架构
第一章Struts2系统架构本章主要介绍的Struts2的系统架构,让学员对Struts2框架在结构上有一个整体概念为我们以后更加详细的学习Struts2打下一个良好的基础。
第一节Struts2的系统架构及处理的主要流程1.Struts1简介Struts1的历史比较久远,Struts1是世界上第一个发布的MVC框架,目前市场率最高的框架。
下面将简单讲解Struts1的基本架构。
图1-1显示了Struts1的数据流图。
图1-1 Struts1数据流图Struts1框架以ActionServlet为核心控制器,ActionServlet获得客户端请求。
然后ActionServlet根据请求信息调用匹配的业务逻辑控制器(Action)处理用户请求。
请求处理完成后,业务逻辑处理器调用相应的JSP显示处理结果。
Struts1框架实现了MVC模式,下面我们了解一下Struts1是怎样实现MVC模式的。
Struts1框架中并没有提供Model层的实现。
在实际的企业应用中,通过一个JavaBean 实现一个业务逻辑,在功能比较复杂的应用中也采用EJB或WebService服务实现业务逻辑。
Struts1框架的View层采用JSP实现。
Struts1提供了大量丰富的标签库。
这些标签库与Struts的组件兼容的特别好,可以很容易的输出控制器的处理结果。
Struts1框架中,控制器是它的核心,Struts1的控制器由两部分组成:核心控制器(ActionServlet)和业务逻辑控制器(Action),核心控制器由Struts1框架提供。
业务逻辑控制器需要由用户自己继承Struts1框架提供的Action类实现。
在Struts1框架中,JSP/Servlet耦合非常紧密。
这种紧密关系促使Struts1存在各种缺陷。
下面我们分析一下Struts1中存在的缺陷。
●支持的表现层技术单一●耦合性强,不便于单元测试●代码依赖于Struts1 API,侵入性强2.WebWork简介WebWork出自于开源组织opensymphony,实际的创始人是Java领域的名人Rickard Oberg(JBoss和XDoclet的作者)。
