首先介绍一下Spring和Struts的整合。在传统的Struts应用中,Struts DispatchAction负责将不同的请求分发给对应的Action进行处理。而在整合了Spring之后,Spring的IoC容器能够负责管理Struts的Action类,将这些Action类作为Spring的Bean进行管理,从而赋予了Struts更强大的扩展能力和灵活性。以下是整合Spring和Struts的完整攻略。
1. 引入相关依赖
首先需要在项目中引入Spring和Struts的相关依赖。以Maven项目为例:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts-core</artifactId>
<version>1.3.10</version>
</dependency>
2. 配置Spring
在Spring中配置需要由Spring管理的Bean,例如我们要让Spring管理一个名为"userService"的UserService类,配置如下:
<bean id="userService" class="com.example.UserService" />
3. 配置Struts
在Struts的配置文件中,通过配置action的class属性为Spring管理的Bean的名称,将控制权交给Spring,示例配置如下:
<action path="/user" type="org.springframework.web.struts.DelegatingActionProxy">
<parameter name="actionName">user</parameter>
<forward name="success" path="/pages/user.jsp" />
</action>
此处的"org.springframework.web.struts.DelegatingActionProxy"是Struts提供的Action实现类,用于将请求处理委托给Spring管理的Bean。
4. 在代码中使用Spring管理的Bean
在控制器中,通过@Autowired注解引用Spring管理的Bean,例如:
public class UserController extends Action {
@Autowired
private UserService userService;
public ActionForward execute(...) {
// 使用userService进行相关操作
...
}
}
以上是基本的整合过程,下面给出两个示例来演示如何使用Spring管理控制器来操作。
示例一:使用Spring管理的Service进行数据库操作
以查询用户信息为例,假设我们有一个UserService类,里面有findById方法用于根据id查询用户信息:
public class UserService {
public User findById(long id) {
// 执行数据库查询等相关操作
...
}
}
我们在UserController中使用@Autowired注解引用UserService,然后在execute方法中调用UserService的findById方法来查询用户信息:
public class UserController extends Action {
@Autowired
private UserService userService;
public ActionForward execute(...) {
long id = ...; // 获取用户id参数
User user = userService.findById(id);
request.setAttribute("user", user);
return mapping.findForward("success");
}
}
在视图中可以直接使用EL表达式来显示查询到的用户信息:
${user.name}
${user.age}
示例二:使用Spring管理的事务进行数据库操作
在UserServiceImpl类中,我们添加一个addUser方法,用于向数据库中添加用户信息:
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Transactional
public void addUser(User user) {
// 执行数据库插入等相关操作
...
}
}
这里使用了@Transactional注解来开启事务,保证在执行addUser方法时,所有数据库操作都在同一事务内进行。
在UserController中使用@Autowired注解引用UserService,然后在execute方法中调用UserService的addUser方法来添加用户信息:
public class UserController extends Action {
@Autowired
private UserService userService;
public ActionForward execute(...) {
// 获取用户信息
User user = new User();
user.setName(...);
user.setAge(...);
// 添加用户信息
userService.addUser(user);
return mapping.findForward("success");
}
}
以上是两个比较常见的使用示例,具体使用方式可以根据业务需求来进行调整。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring与Struts整合之让Spring管理控制器操作示例 - Python技术站