Spring提供与Struts的无缝整合。Spring与Struts的整合大体上可分为以下两种策略:
0|D!:GLY<l
1. 让Spring Ioc容器管理Struts的Action,Struts采用ContextLoaderPlugin创建Spring的ApplicationContext实例。 G<S^h
2. 采用Spring的ActionSupport类的子类。 :r@|^+hyn
现把第二种总结如下: )Tz/.i@$
采用Spring的ActionSupport类的子类,该支持类具有getWebApplicationContext()方法,该方法可以访问Spring的ApplicationContext。 HzI +
Spring扩展Struts的标准Action类,Spring的Action在Struts的Action后加上Support,Spring的Action提供了如下4种: W%x9erm&
Spring的ActionSupport类及其子类 Struts的Action类及其子类 / qw,P$
1. ActionSupport Action(基本的Action,每次只能完成一个Action功能) n=q em]HS
2. DispatchActionSupport DispatchAction(能同时完成多个Action功能的Action) ]~B**f 2V
3. LookupDispatchActionSupport LookupDispatchAction(DispatchAction的子类,根据按钮的key,控制转发给action的方法) |5 ALJ6/
4. MappingDispatchActionSupport MappingDispatchAction(DispatchAction的子类,一个action可映射出多个Action地址) b, xP{5z
MJo*`7fPI
这四种Spring扩展的Action类,与struts的Action是一一对应的,只是多了一个方法getWebApplicationContext(),该方法用于获取一个spring容器。 ki Q!Z_
5YP,FYQ+
如下例子所示: aW&pM:2
y`%3ji%#P
//新的业务控制器,继承spring的ActionSupport 2=To_>U<
public class LoginAction extends ActionSupport <`CpO<&U[
{ 0$h(MNDG^
//必须重写该核心方法,该方法ActionForm将表单的请求参数封装成值对象 ~m!zP98bD
public ActionForward execute(ActionMapping mapping, Tr:O{@qZ
ActionForm form, J8E"KtdPF
javax.servlet.http.HttpServletRequest request, D9,|Yp~'
javax.servlet.http.HttpServletResponse response) N?*6mP PXM
throws Exception D}!rnaR
{ m/8b'nGO6
//form由ActionServlet转发请求时创建,包装了所有的请求参数 pg.{MD%9
UserForm userForm = (UserForm)form; *^t3;
//分别获取user和pass参数 dB]b)/%
String user = userForm.getUser(); @ [ss[
String pass = userForm.getPass(); `)z N(FLD
//获取ApplicationContext 实例 :-{7]ze
ApplicationContext ac = getWebApplicationContext(); EjVwR#
//获取业务逻辑组件us 4/k33d5n6
UserService us = (UserService)ac.getBean("userService"); #04gD
//调用us的userValidate方法验证用户名和密码,如果通过,则返回success |c^h!
if (us.userValidate(user, pass)) 5_Lz" m$}c
{ a99j57?
return mapping.findForward("success"); ;#'w-*CJ
} DZ}ovM!Wf
//否则返回failure ,2@/M}$b/
return mapping.findForward("failure"); 4+PW Avr
} ($u!}E; Y
} #>[_, M)"
1. 让Spring Ioc容器管理Struts的Action,Struts采用ContextLoaderPlugin创建Spring的ApplicationContext实例。 G<S^h
2. 采用Spring的ActionSupport类的子类。 :r@|^+hyn
现把第二种总结如下: )Tz/.i@$
采用Spring的ActionSupport类的子类,该支持类具有getWebApplicationContext()方法,该方法可以访问Spring的ApplicationContext。 HzI +
Spring扩展Struts的标准Action类,Spring的Action在Struts的Action后加上Support,Spring的Action提供了如下4种: W%x9erm&
Spring的ActionSupport类及其子类 Struts的Action类及其子类 / qw,P$
1. ActionSupport Action(基本的Action,每次只能完成一个Action功能) n=q em]HS
2. DispatchActionSupport DispatchAction(能同时完成多个Action功能的Action) ]~B**f 2V
3. LookupDispatchActionSupport LookupDispatchAction(DispatchAction的子类,根据按钮的key,控制转发给action的方法) |5 ALJ6/
4. MappingDispatchActionSupport MappingDispatchAction(DispatchAction的子类,一个action可映射出多个Action地址) b, xP{5z
MJo*`7fPI
这四种Spring扩展的Action类,与struts的Action是一一对应的,只是多了一个方法getWebApplicationContext(),该方法用于获取一个spring容器。 ki Q!Z_
5YP,FYQ+
如下例子所示: aW&pM:2
y`%3ji%#P
//新的业务控制器,继承spring的ActionSupport 2=To_>U<
public class LoginAction extends ActionSupport <`CpO<&U[
{ 0$h(MNDG^
//必须重写该核心方法,该方法ActionForm将表单的请求参数封装成值对象 ~m!zP98bD
public ActionForward execute(ActionMapping mapping, Tr:O{@qZ
ActionForm form, J8E"KtdPF
javax.servlet.http.HttpServletRequest request, D9,|Yp~'
javax.servlet.http.HttpServletResponse response) N?*6mP PXM
throws Exception D}!rnaR
{ m/8b'nGO6
//form由ActionServlet转发请求时创建,包装了所有的请求参数 pg.{MD%9
UserForm userForm = (UserForm)form; *^t3;
//分别获取user和pass参数 dB]b)/%
String user = userForm.getUser(); @ [ss[
String pass = userForm.getPass(); `)z N(FLD
//获取ApplicationContext 实例 :-{7]ze
ApplicationContext ac = getWebApplicationContext(); EjVwR#
//获取业务逻辑组件us 4/k33d5n6
UserService us = (UserService)ac.getBean("userService"); #04gD
//调用us的userValidate方法验证用户名和密码,如果通过,则返回success |c^h!
if (us.userValidate(user, pass)) 5_Lz" m$}c
{ a99j57?
return mapping.findForward("success"); ;#'w-*CJ
} DZ}ovM!Wf
//否则返回failure ,2@/M}$b/
return mapping.findForward("failure"); 4+PW Avr
} ($u!}E; Y
} #>[_, M)"