Struts(19)Struts集成

Struts2 MVC架構php

 

模型視圖控制器(Model View Controller)或MVC,MVC是俗稱。是一種軟件設計模式,用於開發Web應用程序。模型 - 視圖 - 控制器模式是由下面三個部分組成:html

  • Model - 模型是負責維護數據最低級別。java

  • View - 這是負責向用戶顯示的全部或部分數據。mysql

  • Controller - 軟件代碼。控制模型和視圖之間的相互做用。web

MVC是受歡迎的,因爲它從用戶界面層,應用邏輯隔離,並支持關注點分離。在這裏,控制器接收所有請求的應用和模型準備視圖所需要的不論什麼數據。ajax

查看,而後使用編制的數據由控制器生成終於像樣的迴應。spring

MVC抽象可以以圖形方式顯演示樣例如如下。sql

Struts MVC

模型

該模型是負責管理應用程序的數據。它響應視圖的請求,也響應從控制器的指示進行自我更新。數據庫

視圖

在一個特定格式的數據,一個演示控制器的決定,顯示數據所引起的。express

他們是基於腳本的模板系統,如JSP,ASP。PHP,並且很是easy整合AJAX技術。

控制器

該控制器負責響應用戶輸入和運行數據模型對象的相互做用。控制器接收輸入,驗證輸入。而後進行業務操做,改動數據模型的狀態。

 

 

Struts2與Spring集成

 

Spring是一個流行的Web框架,它提供易於集成與很是多常見的網絡任務。因此,問題是。爲何咱們需要Spring。當咱們有Struts2?Spring是超過一個MVC框架 - 它提供了不少其餘好用的東西,這是否是在Struts。

好比:依賴注入可以是實用的不論什麼框架。在本章中。咱們將經過一個簡單的樣例來看看怎樣集成Spring和Struts2一塊兒。

首先。需要加入下列文件到項目的構建路徑從Spring安裝。

您可以下載並安裝最新版本號的Spring框架從 http://www.springsource.org/download

  • 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在WEB-INF/lib從struts的lib文件夾。假設使用的是Eclipse,那麼可能會面臨一個異常的java.lang.ClassNotFoundException異常:org.springframework.web.context.ContextLoaderListener。

爲了解決問題,應該在一類依賴的標記標籤右上點擊高速修復公佈/導出所有的依賴關係。最後,確保不存在依賴衝突標記「選項卡下。

Struts and Sprint Integration

現在讓咱們來設置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.yiibai.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.yiibai.struts2.User">
      <property name="firstName" value="Michael" />
      <property name="lastName" value="Jackson" />
   </bean>
</beans>

正如上面看到的。咱們已經配置了用戶bean,咱們放值MichaelJackson到bean。咱們也給這個bean名稱「userClass」,這樣咱們就可以重用在其它地方。接下來,讓咱們在WebContent目錄中建立由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文件至關直接。

它僅僅有一個目的 - 顯示的名字和姓氏的用戶對象的值。最後,讓咱們把所有的實體一塊兒使用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文件。而後部署這個WAR在Tomcat的webapps文件夾下。

最後,啓動Tomcatserver和嘗試訪問URL http://localhost:8080/HelloWorldStruts2/User.jsp。這會給你下面畫面:

Struts and Spring Integration

現在咱們已經看到了怎樣將兩個偉大的框架 Struts - Spring集成。

 

Struts2和Hibernate集成

 

 

Hibernate是一個高性能的對象/關係持久性和查詢服務許可下的開源GNU通用公共許可證(LGPL),並免費下載。

在這一章中,咱們要學習怎樣實現Struts2與Hibernate集成。假設你不熟悉與Hibernate,那麼可以查看咱們的Hibernate教程

數據庫設置:

在本教程中,我會使用「struts2_tutorial」MySQL數據庫。

我鏈接到個人機器上使用這個數據庫的username「root」,並且沒有password。首先,你需要執行如下的腳本。此腳本建立稱爲student ,並建立一個新的表,此表中的記錄數:

CREATE TABLE IF NOT EXISTS `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(40) NOT NULL,
  `last_name` varchar(40) NOT NULL,
  `marks` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);

--
-- Dumping data for table `student`
--

INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`) 
  VALUES(1, 'George', 'Kane', 20);
INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`) 
  VALUES(2, 'Melissa', 'Michael', 91);
INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`) 
  VALUES(3, 'Jessica', 'Drake', 21);

Hibernate的配置:

接下來讓咱們建立這是Hibernate的配置文件hibernate.cfg.xml中。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
   <property name="hibernate.connection.driver_class">c
      om.mysql.jdbc.Driver
   </property>
   <property name="hibernate.connection.url">
      jdbc:mysql://www.yiibai.com/struts_tutorial
   </property>
   <property name="hibernate.connection.username">root</property>
   <property name="hibernate.connection.password"></property>
   <property name="hibernate.connection.pool_size">10</property>
   <property name="show_sql">true</property>
   <property name="dialect">
      org.hibernate.dialect.MySQLDialect
   </property>
   <property name="hibernate.hbm2ddl.auto">update</property>
   <mapping class="com.yiibai.hibernate.Student" />
</session-factory>
</hibernate-configuration> 

讓咱們經過hibernate的配置文件。首先,咱們正在使用的MySQL驅動程序。而後,咱們聲明 JDBC URL鏈接到數據庫。

而後,聲明鏈接的username,password以及池的大小。咱們也表示,咱們但願「show_sql」轉向真正看到SQL的日誌文件裏。請通過Hibernate教程。瞭解這些屬性是什麼意思。最後,咱們設置了的映射類com.yiibai.hibernate.Student。咱們將本章中建立。

環境設置:

接下來。這個項目需要一大堆的jar文件。附所需的JAR文件的完整列表的截圖:

Struts and Hibernate Jars

大部分的JAR文件可以做爲Struts的分佈的一部分。

假設有一個如GlassFish應用server,WebSphere或JBoss安裝。那麼可以獲得的大部分jar文件從應用server的lib目錄。假設沒有,可以單獨下載的文件:

其他的文件,應該能夠從struts2的分發獲得。

Hibernate 類:

現在讓咱們來建立Hibernate集成所需的Java類。下面內容Student.java:

package com.yiibai.hibernate;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="student")
public class Student {
	
   @Id
   @GeneratedValue
   private int id;
   @Column(name="last_name")
   private String lastName;
   @Column(name="first_name")
   private String firstName;
   private int marks;
   public int getId() {
    return id;
   }
   public void setId(int id) {
    this.id = id;
   }
   public String getLastName() {
      return lastName;
   }
   public void setLastName(String lastName) {
      this.lastName = lastName;
   }
   public String getFirstName() {
      return firstName;
   }
   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }
   public int getMarks() {
      return marks;
   }
   public void setMarks(int marks) {
      this.marks = marks;
   }
}

這是一個POJO類,Hibernate的規範表。它擁有屬性id。firstName和lastName學生表中的列名相應。接下來讓咱們建立StudentDAO.java文件例如如下:

package com.yiibai.hibernate;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.googlecode.s2hibernate.struts2.plugin.\
                     annotations.SessionTarget;
import com.googlecode.s2hibernate.struts2.plugin.\
                     annotations.TransactionTarget;

public class StudentDAO {
	
   @SessionTarget
   Session session;

   @TransactionTarget
   Transaction transaction;

   @SuppressWarnings("unchecked")
   public List<Student> getStudents()
   {
      List<Student> students = new ArrayList<Student>();
      try
      {
         students = session.createQuery("from Student").list();
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }
      return students;
   }

   public void addStudent(Student student)
   {
      session.save(student);
   }
}

StudentDAO類。學生類是數據訪問層。它有一些方法來列出所有學生,而後保存一個新的學生記錄。

動做類:

下面文件AddStudentAction.java定義咱們的動做類。咱們這裏有兩個動做方法 - execute() 和 listStudents()。

execute()方法是用來加入新的學生記錄。

使用DAO的save()方法來實現這一目標。還有一種方法。listStudents()用來列出學生。

咱們使用DAO的的列表方法獲得所有學生的名單。 

package com.yiibai.struts2;

import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.yiibai.hibernate.Student;
import com.yiibai.hibernate.StudentDAO;

public class AddStudentAction extends ActionSupport 
            implements ModelDriven<Student>{

   Student student  = new Student();
   List<Student> students = new ArrayList<Student>();
   StudentDAO dao = new StudentDAO();
   @Override
   public Student getModel() {
      return student;
   }

   public String execute()
   {
      dao.addStudent(student);
      return "success";
   }

   public String listStudents()
   {
      students = dao.getStudents();
      return "success";
   }

   public Student getStudent() {
      return student;
   }

   public void setStudent(Student student) {
      this.student = student;
   }

   public List<Student> getStudents() {
      return students;
   }

   public void setStudents(List<Student> students) {
      this.students = students;
   }
	
}

實現ModelDriven接口你會注意到,這是用來當你的操做類處理一個詳細的模型類(如學生),而不是我的屬性(如名字,姓氏)。

的ModelAware接口需要實現的方法。以返回到模型。

在咱們的樣例中,咱們返回「學生」對象。

建立視圖文件:

現在讓咱們建立student.jsp視圖文件包括下面內容:

 

 

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World</title>
<s:head />
</head>
<body>
   <s:form action="addStudent">
   <s:textfield name="firstName" label="First Name"/>
   <s:textfield name="lastName" label="Last Name"/>
   <s:textfield name="marks" label="Marks"/>
   <s:submit/>
   <hr/>
   <table>
      <tr>
         <td>First Name</td>
         <td>Last Name</td>
         <td>Marks</td>
      </tr>
      <s:iterator value="students">	
         <tr>
            <td><s:property value="firstName"/></td>
            <td><s:property value="lastName"/></td>
            <td><s:property value="marks"/></td>
           </tr>
      </s:iterator>	
   </table>
   </s:form>
</body>
</html>

很easystudent.jsp。在上面的部分,咱們有一個形式提交到「addStudent.action」。這需要在名字,姓氏和備註。因爲addStudent 動做,本身主動綁到ModelAware的「AddSudentAction」,將建立一個學生bean的名字,姓氏和標記本身主動填充的值。

在底部,咱們去經過的學生名單(見AddStudentAction.java)。咱們遍歷列表和顯示的值在表中的姓氏,名稱和備註。

Struts 配置:

讓咱們把它放在一塊兒使用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="myhibernate" extends="hibernate-default"> <action name="addStudent" method="execute" class="com.yiibai.struts2.AddStudentAction"> <result name="success" type="redirect"> listStudents </result> </action> <action name="listStudents" method="listStudents" class="com.yiibai.struts2.AddStudentAction"> <result name="success">/students.jsp</result> </action> </package> </struts>

這裏要注意的最重要的事情是,咱們包函「myhibernate」擴展Struts2默認包稱爲「hibernate-default」。而後咱們聲明兩個動做 - addStudent和listStudents。

addStudent調用execute()上AddStudentAction類,而後,它調用listStudents操做方法successs。

listStudent動做方法調用listStudents()上AddStudentAction類做爲視圖,並使用student.jsp

現在右擊項目名稱。並單擊Export > WAR 文件建立一個WAR文件。而後部署這個WAR在Tomcat的webapps文件夾下。

最後,啓動Tomcatserver和嘗試訪問URL http://localhost:8080/HelloWorldStruts2/student.jsp。這會給你下面畫面: 

Struts and Hibernate Result

在上面的部分,咱們獲得的一種形式,進入一個新的學生記錄和底部列出了學生在數據庫中的值。繼續並加入一個新的學生記錄。按提交。屏幕將刷新並顯示您的更新列表。

相關文章
相關標籤/搜索