4
、分离业务逻辑
l
Action
应该只负责画面迁移的控制,而业务逻辑的具体细节应该封装到业务层,
Action
只要调用业务接口就行了
l
这里将
Action
中的业务逻辑移到业务类中,并使用
Spring
的
Bean
机制进行管理
(
1
)
创建业务接口和业务类
l
业务接口
public interface UserService {
public boolean isUserValid(String userid, String password);
}
l
业务类
public class UserServiceImpl implements UserService {
public boolean isUserValid(String userid, String password) {
return "123456".equals(password);
}
}
(
2
)
追加
Spring
能力
l
右击Samples工程,MyEclipse -> Add Spring Capabilities:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/chenyun2000/350126/o_4-1.jpg)
l
为了减少不需要的jar文件发布到工程中,这里指向BuildPath追加Spring2.0 Core Libraries,其他需要的jar文件手工追加:
Ø
spring-aop.jar
Ø
spring-dao.jar
Ø
spring-remoting.jar
Ø
spring-struts.jar
Ø
spring-support.jar
Ø
spring-web.jar
(3) 修改struts-config.xml
l
使用Spring的代理
RequestProcessor
替代Struts缺省的RequestProcessor:
<controller
processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
l
注册Spring的Struts Plugin,指定Bean配置文件路径:
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/classes/org/xqtu/samples/bean/samples-services.xml,
/WEB-INF/classes/org/xqtu/samples/bean/samples-actions.xml" />
</plug-in>
l
Spring
支持多Bean配置文件,这里按功能层次在不同Bean文件中定义
(4) 定义Bean文件
l
samples-services.xml
<bean id="userService"
class="org.xqtu.samples.service.impl.
UserServiceImpl
">
</bean>
l
samples-actions.xml
<bean name="
/login
"
class="org.xqtu.samples.web.action.LoginAction">
<property name="userService" ref="userService" />
</bean>
l
注意,
name
属性的值要和
struts-config.xml
中Action的path属性相同
(
5
)
Action
类注入
业务接口
private
UserService
userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
l
注意,这里定义是
UserService
接口,而Bean文件中定义的是实现类
UserServiceImpl
(6) 修改Action类,调用业务方法
if (
userService.isUserValid
(loginForm.getUserid(), loginForm
.getPassword())) {
request.setAttribute("userid", loginForm.getUserid());
return mapping.findForward("success");
}
(7) 显示Spring的Log信息
l
为了在控制台显示Spring的Log信息,可以在src目录下追加log4j.properties:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n
log4j.rootLogger=INFO, stdout
log4j.logger.org.springframework=DEBUG