鍍金池/ 教程/ Java/ Spring 集成
注釋
主題/模板
驗(yàn)證
有用的資源
Struts 2 注解類型
實(shí)例
攔截器
異常處理
表單標(biāo)簽
結(jié)果類型
值棧/OGNL
Spring 集成
數(shù)據(jù)標(biāo)簽
環(huán)境配置
配置
類型轉(zhuǎn)換
動(dòng)作
Hibernate 集成
本地化
發(fā)送郵件
Ajax 標(biāo)簽
數(shù)據(jù)庫(kù)訪問
體系結(jié)構(gòu)
文件上傳
Tiles 集成
概述
基本的 MVC 架構(gòu)
控制標(biāo)簽

Spring 集成

Spring 是一個(gè)流行的 web 框架,提供了與大量普通 web 任務(wù)的簡(jiǎn)單集成。所以問題是,當(dāng)我們已經(jīng)有了 Struts 2 時(shí),為什么還需要 Spring?好吧,Spring 不僅僅是一個(gè) MVC 框架——它還提供了許多在 Struts 中不可用的東西。例如:對(duì)任何框架都有用的依賴注入。在本章中,我們將通過一個(gè)簡(jiǎn)單的示例來展示如何集成 Spring 和 Struts 2。

首先,你需要將如下所示的文件添加到 Spring 安裝的項(xiàng)目的構(gòu)建路徑中。你可以從 http://www.springsource.org/download 下載并安裝最新的 Spring 框架版本。

  • org.springframework.asm-x.y.z.M(a).jar

  • org.springframework.beans-x.y.z.M(a).jar

  • org.springframework.context-x.y.z.M(a).jar

  • org.springframework.core-x.y.z.M(a).jar

  • org.springframework.expression-x.y.z.M(a).jar

  • org.springframework.web-x.y.z.M(a).jar

  • org.springframework.web.servlet-x.y.z.M(a).jar

最后,將 struts2-spring-plugin-x.y.z.jar 添加到你的 struts lib 目錄 WEB-INF/lib 中。如果你使用的是 Eclipse,那么你可能會(huì)面臨一個(gè)異常 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener。為了修復(fù)這個(gè)問題,進(jìn)入 Marker 標(biāo)簽,然后一個(gè)接一個(gè)的右鍵單擊類依賴,并且進(jìn)行快速修復(fù)來發(fā)布/導(dǎo)出所有的依賴。最后,確保在 marker 標(biāo)簽下沒有可用的依賴沖突。

http://wiki.jikexueyuan.com/project/struts-2/images/struts-spring1.gif" alt="" />

現(xiàn)在讓我們?yōu)?Struts-Spring 集成配置 web.xml 文件,如下所示:

<?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>

在這里需要注意的一個(gè)重要的點(diǎn)是我們已經(jīng)配置的監(jiān)聽器。加載 spring 上下文文件需要 ContextLoaderListener。Spring 的配置文件稱為 applicationContext.xml,且它必須要放置在和 web.xml 文件同級(jí)的位置。

讓我們創(chuàng)建一個(gè)簡(jiǎn)單的操作類,命名為 User.java,帶有兩個(gè)屬性——firstName 和 lastName。

package com.tutorialspoint.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;
   }
}

現(xiàn)在讓我們創(chuàng)建 applicationContext.xml spring 配置文件并實(shí)例化 User.java 類。正如先前提到的一樣,這個(gè)文件應(yīng)該在 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.tutorialspoint.struts2.User">
      <property name="firstName" value="Michael" />
      <property name="lastName" value="Jackson" />
   </bean>
</beans>

正如我們?cè)谏厦婵匆姷囊粯?,我們已?jīng)配置了 user bean 并且已經(jīng)將值 MichaelJackson 注入到 bean 中。我們還將這個(gè) bean 命名為 "userClass",這樣我們就可以在任何地方重用它。接下來,我們?cè)?WebContent 文件夾中創(chuàng)建 User.jsp

<%@ 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 文件非常簡(jiǎn)單。它只用于一個(gè)目的——顯示用戶對(duì)象的 firstname 和 lastname 的值。最后,讓我們將在 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>

需要注意的重要的一點(diǎn)是我們用 id userClass 來代表類。這意味著我們使用的是 spring 來為 User 類進(jìn)行依賴注入。

現(xiàn)在鼠標(biāo)右鍵單擊項(xiàng)目名,然后單擊 Export > WAR File 來創(chuàng)建一個(gè) War 文件。然后將這個(gè) WAR 文件部署到 Tomcat 的 web 應(yīng)用程序目錄中。最后,啟動(dòng) Tomcat 服務(wù)器并嘗試訪問 URL http://localhost:8080/HelloWorldStruts2/User.jsp. 這將呈現(xiàn)如下所示的畫面:

http://wiki.jikexueyuan.com/project/struts-2/images/struts-spring2.gif" alt="" />

現(xiàn)在我們已經(jīng)了解了如何將這兩個(gè)好的框架集成到一起。這包括 Struts - Spring 集成這一章。

上一篇:表單標(biāo)簽下一篇:發(fā)送郵件