http://blog.csdn.net/ctojxzsycztao/article/details/2471013
前几天刚搞过 struts2.0 ,但该程序用的是 struts2.0 + hibernate 3.1 开发的,代码相当烦杂,所以就考滤把spring 加到项目中做个中间件,就象以前开发用 struts1.x + spring2.0 + hibernate3.x 一样,因struts 2.0 是基于webwork框架的,与struts1.x 完全是二种框架,所以在整合时也出现了一些问题,现在解决了写在上面须望能帮到需要帮助的同行
我们都知道当我们用struts2的时候需要在src 目录下建立一个struts.xml文件,这个文件在容器启动时struts2就会加载它,一个完整的struts.xml文件内容如下:
<! DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
< struts >
< package name ="userManager" namespace ="" extends ="struts-default" >
< action name ="login" class ="action.LoginAction" method ="login" >
< result name ="success" > /success.jsp </ result >
< result name ="error" > /error.jsp </ result >
</ action >
</ package >
</ struts >
其中action 就是指定其中某个struts2的action 属性name是客户端提交的地址,class 则指明当用户提交该地址时调用那个 action , method是指明要调用action中的那个方法,可不写,不写默认调用 execute 方法,方法如下
return null;
}
要调用默认的方法action 需要继承 ActionSupport 才可.也就是下面这样.
... {
private String userName;
private String SUCCESS = "success":
private String ERROR = "error";
public String getUserName()...{
return userName;
}
public void setUserName(String userName)...{
this.userName = userName;
}
public String execute() throws Exception...{
if(userName.equals("chen"))...{
return SUCCESS;
}
return ERROR:
}
}
我们看到在struts.xml文件中的action下有个元素result ,其中name指定用户返回的字符串 value则是指定当返回该字符串时需转发的页面,也就是说当userName等于 chen时返回SUCCESS 则转发到 success.jsp,当返回ERROR时到error.jsp, 不说太多了下面讲讲与spring怎样整合吧!
当我们在struts.xml文件中加入 <constant name="struts.objectFactory" value="spring" /> 指struts.objectFactory为spring,struts2框架就会将Bean转交给Spring来创建,装配,注入。但是Bean创建完成之后,其生命周期还是由struts2容器来管理。
还有一种方式就是在src下建立一个struts.properties文件,写入: struts.objectFactory=spring 这是另一种方式,如果是这样子创建就不用在struts.xml文件中指定,struts.xml也不用更改,如常一样,如果在Action中有依赖于其它的Bean,也会被自动注入.这个时候,Action实例是以prototype方式创建的,Spring会为每个请求创建一个action的实例。
在某些时候,你可能希望不仅仅让spring创建和装配Action对象,还希望让spring完全管理这些对象,如希望使用aop或者希望使用acegi时。这时候,只需要在spring的配置文件中定义这些action 即可。如在applicationContext.xml文件中: <bean id="user" class="action.LoginAction"/>
然后在struts.xml文件中的action元素,class="user"即可。如下:
< result name ="success" > /success.jsp </ result >
< result name ="error" > /error.jsp </ result >
</ action >
需要注意的一个地方:Spring中的缺省作用域是单例。而往往Action属于有状态的Bean,应该使用prototype作用域。 < bean id="user" class="action.LoginAction" singleton="false"/> 如果忽略了这个细节,在我们实用SET,GET 方法注入关系的时候可能会有线程安全上的风险。请注意!
学习的朋友如果有好奇心可以试试,也欢迎大家加我QQ 543997732 一起讨论,