Пример интеграции Struts 2 + Spring
В этом уроке показана интеграция между Struts 2 и Spring.
1. Структура проекта
Вот структура папок проекта из этих уроков.

2. Struts 2 + Spring Plugin
Чтобы интегрировать Struts 2 и Spring, получите и включите библиотеку «struts2-spring-plugin-xxx.jar» в путь к классам вашего проекта.
pom.xml
org.apache.struts
struts2-core
2.1.8
org.springframework
spring
2.5.6
org.springframework
spring-web
2.5.6
org.apache.struts
struts2-spring-plugin
2.1.8
3. Spring Listener
Настройте прослушиватель Spring «org.springframework.web.context.ContextLoaderListener» в файлеweb.xml.
web.xml
Struts 2 Web Application struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* org.springframework.web.context.ContextLoaderListener
3. Зарегистрироваться Spring Bean
Зарегистрируйте все компоненты Spring в файлеapplicationContext.xml, слушатель Spring автоматически найдет этот XML-файл.
applicationContext.xml
UserBo.java
package com.example.user.bo;
public interface UserBo{
public void printUser();
}
UserBoImpl.java
package com.example.user.bo.impl;
import com.example.user.bo.UserBo;
public class UserBoImpl implements UserBo{
public void printUser(){
System.out.println("printUser() is executed...");
}
}
UserSpringAction.java
package com.example.user.action;
import com.example.user.bo.UserBo;
public class UserSpringAction{
//DI via Spring
UserBo userBo;
public UserBo getUserBo() {
return userBo;
}
public void setUserBo(UserBo userBo) {
this.userBo = userBo;
}
public String execute() throws Exception {
userBo.printUser();
return "success";
}
}
5. Struts.xml
Объявлены все отношения здесь.
pages/user.jsp pages/user.jsp
6. Demo
Теперь вся работа по интеграции Struts 2 и Spring завершена. Теперь рассмотрим следующий вариант использования для доступа к компоненту Spring «userBo».
-
Случай 1: заставить Spring действовать как класс действий Struts 2 и получить доступ к компоненту Spring.
-
Случай 2: доступ к компоненту Spring в классе действий Struts 2.
Случай 1
В этом примереuserSpringAction действует как класс действия Struts 2, и вы можете выполнить DI-компонент SpringuserBo обычным способом Spring.
//struts.xml//applicationContext.xml pages/user.jsp
Для доступа к этому действию используйте URL-адрес:http://localhost:8080/Struts2Example/userSpringAction
Дело 2
По умолчанию прослушиватель Spring включает «autowiring by matching the bean name». Таким образом, он автоматически передаст компонент Spring «userBo» в UserAction черезsetUserBo(). Смотри ниже Struts 2 Action:
Функция автоматического подключения Spring может измениться наname (по умолчанию),type,auto илиconstructor, возможно, вам потребуется проконсультироваться с этимStruts 2 Spring plugin documentation.
UserAction.java
package com.example.user.action;
import com.example.user.bo.UserBo;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
//DI via Spring
UserBo userBo;
public UserBo getUserBo() {
return userBo;
}
public void setUserBo(UserBo userBo) {
this.userBo = userBo;
}
public String execute() throws Exception {
userBo.printUser();
return SUCCESS;
}
}
Для доступа к этому действию используйте URL-адрес:http://localhost:8080/Struts2Example/userAction
WebApplicationContextUtils
В качестве альтернативы вы можете использовать общий класс SpringWebApplicationContextUtils, чтобы напрямую получить bean-компонент Spring.
package com.example.user.action;
import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.example.user.bo.UserBo;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
public String execute() throws Exception {
WebApplicationContext context =
WebApplicationContextUtils.getRequiredWebApplicationContext(
ServletActionContext.getServletContext()
);
UserBo userBo1 = (UserBo)context.getBean("userBo");
userBo1.printUser();
return SUCCESS;
}
}
Действительно длинная и утомительная статья, убедитесь, что вы загрузили полный исходный код проекта для практики.