Пример интеграции 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; } }
Действительно длинная и утомительная статья, убедитесь, что вы загрузили полный исходный код проекта для практики.