Struts 和 Spring 集成



  • 简述

    Spring 是一种流行的 Web 框架,它提供了与许多常见 Web 任务的轻松集成。那么问题来了,为什么我们有了 Struts2 还需要 Spring?嗯,Spring 不仅仅是一个 MVC 框架 - 它提供了许多其他在 Struts 中不可用的东西。
    例如:对任何框架都有用的依赖注入。在本章中,我们将通过一个简单的示例来了解如何将 Spring 和 Struts2 集成在一起。
    首先,您需要将以下文件添加到 Spring 安装的项目构建路径中。您可以从https://www.springsource.org/download下载并安装最新版本的 Spring 框架
    • org.springframework.asm-xyzM(a).jar
    • org.springframework.beans-xyzM(a).jar
    • org.springframework.context-xyzM(a).jar
    • org.springframework.core-xyzM(a).jar
    • org.springframework.expression-xyzM(a).jar
    • org.springframework.web-xyzM(a).jar
    • org.springframework.web.servlet-xyzM(a).jar
    最后添加 struts2-spring-plugin-x.y.z.jar 在你的 WEB-INF/lib来自您的 struts lib 目录。如果您使用 Eclipse,那么您可能会遇到异常java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    要解决这个问题,你应该进入 Marker选项卡并右键单击类依赖项并执行快速修复以发布/导出所有依赖项。最后确保标记选项卡下没有可用的依赖冲突。
    Struts 和 Sprint 集成
    现在让我们设置 web.xml 对于 Struts-Spring 集成如下 -
    
    <?xml version = "1.0" Encoding = "UTF-8"?>
    <web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xmlns = "http://java.sun.com/xml/ns/javaee" 
       xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
       id = "WebApp_ID" version = "3.0">
        
       <display-name>Struts 2</display-name>
       
       <welcome-file-list>
          <welcome-file>index.jsp</welcome-file>
       </welcome-file-list>
       <listener>
          <listener-class>
             org.springframework.web.context.ContextLoaderListener
          </listener-class>
       </listener>
       <filter>
          <filter-name>struts2</filter-name>
          <filter-class>
             org.apache.struts2.dispatcher.FilterDispatcher
          </filter-class>
       </filter>
       <filter-mapping>
          <filter-name>struts2</filter-name>
          <url-pattern>/*</url-pattern>
       </filter-mapping>
    </web-app>
    
    
    这里需要注意的重要一点是我们配置的监听器。这ContextLoaderListener需要加载 spring 上下文文件。Spring的配置文件被调用applicationContext.xml 文件,它必须与 web.xml 文件
    让我们创建一个简单的动作类,称为 User.java 有两个属性 - firstName 和 lastName。
    
    package com.jc2182.struts2;
    public class User {
       private String firstName;
       private String lastName;
       public String execute() {
          return "success";
       }
       public String getFirstName() {
          return firstName;
       }
       public void setFirstName(String firstName) {
          this.firstName = firstName;
       }
       public String getLastName() {
          return lastName;
       }
       public void setLastName(String lastName) {
          this.lastName = lastName;
       }
    }
    
    
    现在让我们创建 applicationContext.xml spring配置文件并实例化 User.java班级。如前所述,此文件应位于 WEB-INF 文件夹下 -
    
    <?xml version = "1.0" Encoding = "UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
    "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
       <bean id = "userClass" class = "com.jc2182.struts2.User">
          <property name = "firstName" value = "Michael" />
          <property name = "lastName" value = "Jackson" />
       </bean>
    </beans>
    
    
    如上所示,我们已经配置了用户 bean 并注入了值 MichaelJackson入豆。我们还给这个 bean 起了一个名字“userClass”,这样我们就可以在别处重用它。接下来让我们创建User.jsp 在 WebContent 文件夹中 -
    
    <%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
       pageEncoding = "ISO-8859-1"%>
    <%@ taglib prefix = "s" uri = "/struts-tags"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
       "http://www.w3.org/TR/html4/loose.dtd">
    <html>
       <head>
          <title>Hello World</title>
       </head>
       
       <body>
          <h1>Hello World From Struts2 - Spring integration</h1>
          <s:form>
             <s:textfield name = "firstName" label = "First Name"/><br/>
             <s:textfield name = "lastName" label = "Last Name"/><br/>
          </s:form>
          
       </body>
    </html>
    
    
    User.jsp文件非常简单。它仅用于一个目的 - 显示用户对象的名字和姓氏的值。最后,让我们使用struts.xml 文件。
    
    <?xml version = "1.0" Encoding = "UTF-8"?>
    <!DOCTYPE struts PUBLIC
       "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
       "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
       <constant name = "struts.devMode" value = "true" />
       <package name = "helloworld" extends = "struts-default">
          <action name = "user" class="userClass" 
             method = "execute">
             <result name = "success">/User.jsp</result>
          </action>
       </package>
    </struts>
    
    
    需要注意的重要一点是我们正在使用 id userClass参考类。这意味着我们正在使用 spring 为 User 类进行依赖注入。
    现在右键单击项目名称并单击 Export > WAR File创建一个战争文件。然后将此 WAR 部署到 Tomcat 的 webapps 目录中。最后,启动Tomcat服务器并尝试访问URLhttp://localhost:8080/HelloWorldStruts2/User.jsp. 这将产生以下屏幕 -
    Struts 和 Spring 集成
    我们现在已经看到了如何将两个伟大的框架结合在一起。Struts - Spring 集成一章到此结束。