Struts入門(一)

 Jakarta Struts Framework 是一個開放源代碼的 Apache 項目,由 Craig R. McClanahan 於 2000 年建立,並捐贈給了 Apache 基金會,已經成爲基於 Java Servlet 和 Java Server Page (JSP)技術構建 Web 應用程序的最流行的框架包。 Craig 編寫了 Tomcat4 實現的大部份內容,同時他仍是 JCP 的資深成員,負責 Servlet 和 JSP 規範的制定。html

     Struts 是一個基於模型 (Model) -視圖 (View) -控制器 (Controller)(MVC) 模式的應用架構的開源框架。若是您開發過大型 Web 應用程序,您就理解變化這個詞的含義。「模型 - 視圖 - 控制器」 (MVC) 就是用來幫助您控制變化的一種設計模式。 MVC 減弱了業務邏輯接口和數據接口之間的耦合。java

     JSP 頁面中能夠很是容易地結合業務邏輯 (jsp:useBean) 、服務端處理過程( jsp:scriplet )和 HTML(<html>) ,在 JSP 頁面中同時實現顯示,業務邏輯和流程控制,從而能夠快速地完成應用開發。如今不少的 Web 應用就是由一組 JSP 頁面構成的。這種以 JSP 爲中心的開發模型咱們能夠稱之爲 Model 1 。固然這種開發模式在進行快速和小規模的應用開發時,是有很是大的優點,可是從工程化的角度考慮,它也有一些不足之處,主要在於不方便應用擴展,以及不利 於應用系統業務的重用和改動。考慮到這些問題在開發大型的 Web 應用時必須採用不一樣的設計模式——這就是 Model2 。web

     Model 2 表示的是基於 MVC 模式的框架。 "Model" 表明的是應用的業務邏輯(經過 JavaBean , EJB 組件實現), "View" 是應用的表示面(由 JSP 頁面產生), "Controller" 是提供應用的處理過程控制(通常是一個 Servlet ),經過這種設計模型把應用邏輯,處理過程和顯示邏輯分紅不一樣的組件實現,這些組件能夠進行交互和重用。 Model 2 具備組件化的優勢從而更易於實現對大規模系統的開發和管理。apache

     Struts 是一組相互協做的類、 Servlet 和 JSP 標記,它們組成一個可重用的 MVC 2 設計。這個定義表示 Struts 是一個框架,而不是一個庫,但 Struts 也包含了豐富的標記庫和獨立於該框架工做的實用程序類庫。 Struts 利用 taglib 得到可重用代碼和抽象 Java 代碼,利用 ActionServlet 配合 Struts-config.xml 實現對整個系統導航。加強了開發人員對系統的總體把握,提升了系統的可維護性和可擴充性。後端

     Struts 是一個 Web Framework ,常見的 B/S Web Framework 以下:設計模式

     Struts :主要關注於 Controller 流程,基於 JSP與 Taglib 實現的 View 。架構

     Cocoon :用於處理 XML 的框架,將 XML 做爲 View 並能夠良好結合 XSLT 。app

     Spring :這是一個服務於全部層面的 Application Framework ,提供了 bean 的配置基礎, AOP 的支持, JDBC 的提框架

              取框架,抽象事務支持等。它有一個很是顯著的特色:在某個層面上若是你不須要 Spring 的支持,你就能夠jsp

              不使用 String 的 class ,只使用它的某一部分的功能。

     JSF :JavaServerFaces ,嚴格意義上講,它並不算是 Framework ,但 JSF 一樣提供了一種不一樣的 View 生成方式。

                它能夠和多種 Framework 整合。在 J2EE1.4 中, JSP2.0 規範就包含了 JSF 標準。

     Framework 有不少種, Struts 並非咱們惟一的選擇。咱們能夠根據具體的項目來選擇不一樣的 Framework 。 Struts 之因此如此流行,其主要緣由是它推出時間比較早,版本較穩定,而且是 MVC 及 core J2EE patterns 的標準實現。

     Struts 師出名門,擁有諸多優勢,其中最關鍵的一點就是簡單易用,這也是正他迅速普及,愈來愈流行的根本緣由。與其同時代的 Tubine 、 Cocoon 等,均可以做爲 Web 框架,功能也很強大,但使用起來過於複雜,一直難以流行。做爲一名普通的 Java 開發者,只要稍具 JSP 開發水平,均可以在一週左右的時間內,基本學會 Struts 。

     Struts 還提供了豐富的 Taglib ,熟練用之,將節省大量的開發時間。

     Struts 具備良好的頁面導航功能,開發者能夠經過一個名爲 struts-config.xml 的文件,把握整個系統各部分之間的聯繫,這對於後期維護有着莫大的幫助,尤爲是當另外一批開發者接手該項目時,這種優點體現得更加明顯。

     固然, Struts 也有一些不足之處。對於很大的項目,當 struts-config.xml 愈來愈龐大時,維護也就變得愈來愈複雜,甚至須要專人負責(對於這種維護狀況,建議採用專門的維護工具,如 Struts Console )。另外, Struts 框架主要是針對表示層設計的,對於後端的邏輯層支持不是很強。

     未來的發展趨勢,頗有多是 JSF+Struts+Spring+Hibernate/JDO 的開發模式,建議你從 Struts 入手。 

話很少說開始入門


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>StrutsDemo</display-name>
  
  <!-- struts2框架的核心控制器,用戶對本程序的全部請求都先交給 StrutsPrepareAndExecuteFilter核心控制器進行處理
  		核心控制器就是根據struts.xml的文件來決定具體使用什麼業務邏輯控制器處理本次請求
  -->
  	<filter>
  		<filter-name>struts</filter-name>
  		<filter-class>
  		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  		</filter-class>
  	</filter>
  	
  	<filter-mapping>
  		<filter-name>struts</filter-name>
  		<!-- 表示接收全部請求 -->
  		<url-pattern>/*</url-pattern>
  	</filter-mapping>
  
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
</web-app>

這個是struts的模塊配置,他被struts.xml   include放進模塊 hr-user.xml,不少公司都是模塊式開發,因此我也用模塊是開發

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="hr" extends="struts-default" namespace="/">
		<action name="user" class="org.heinrich.action.UserAction">
			<result name="success">/success.jsp</result>
		</action>
	</package>
</struts>

這個是struts的全局配置,在這個xml中的全部配置,在其餘的模塊中均可以用至關於定義了全局變量,在其餘模塊中的就是局部變量

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<!-- 在struts.xml文件中一般是配置一下模塊的引入配置和公共配置 
		 公共的常量配置能夠參考struts2-core-2.3.15.1.jar中的default.properties文件中配置
	-->
	<!-- 配置本項目容許的請求後綴 -->
	<constant name="struts.action.extension" value="action,do,,"/>
	<!-- 配置本工程是開發模式(會熱部署) -->
	<constant name="struts.devMode" value="true"/>
	<!-- 開啓動態方法調用,默認是開啓狀態 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
	 
	<!-- 爲了方便團隊分模塊開發,一般建議將不一樣的模塊的包(package)對應的單獨的文件中
		而後使用include 標籤導入的struts.xml文件中
	 -->
	<include file="hr-user.xml"/>
</struts>

UserAction  的配置

package org.heinrich.action;

import org.heinrich.dao.UserDao;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

	private static final long serialVersionUID = 6161139006224338587L;
	private String key;
	private String value;

	public String add() {

		System.out.println("I am reading Book about Linux");

		UserDao userDao = new UserDao();
		userDao.add(key, value);
		return "success";
	}

	public String delete() {

		System.out.println("I am reading Book about Linux");

		UserDao userDao = new UserDao();
		userDao.delete(key);
		return "success";
	}

	public String update() {

		System.out.println("I am reading Book about Linux");

		UserDao userDao = new UserDao();
		userDao.update(key, value);
		return "success";
	}

	public String get() {

		System.out.println("I am reading Book about Linux");

		UserDao userDao = new UserDao();
		String name = userDao.get(key);
		System.out.println(name);
		return "success";
	}

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

}

定義了CURD四個方法,全部方法都採用

http://localhost:8080/Struts/user!add?key="color"&value="bule"

http://localhost:8080/Struts/user!delete?key="null"

http://localhost:8080/Struts/user!update?key="color"&value="red"

http://localhost:8080/Struts/user!update?key="color"

這種模式進行訪問,這樣能夠省去不少代碼,固然你也能夠有其餘的方式,好比動態方法調用,那樣須要修改局部的hr-user.xml的代碼

如今我配置給你們看
http://localhost:8080/Struts/user_add?key="color"&value="bule"
http://localhost:8080/Struts/user_delete?key="null"
http://localhost:8080/Struts/user_update?key="color"&value="red"
http://localhost:8080/Struts/user_update?key="color"

hr-user.xml的配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="hr" extends="struts-default" namespace="/">
<action name="user_*" class="org.heinrich.action.UserAction" method="{1}">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>

其實還有不少中配置方式,最簡單的方式就是

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="hr" extends="struts-default" namespace="/">
		
		<action name="add" class="org.heinrich.action.UserAction" method="add">
			<result name="success">/success.jsp</result>
		</action>
		<action name="delete" class="org.heinrich.action.UserAction" method="delete">
			<result name="success">/success.jsp</result>
		</action>
		<action name="update" class="org.heinrich.action.UserAction" method="update">
			<result name="success">/success.jsp</result>
		</action>
		<action name="get" class="org.heinrich.action.UserAction" method="get">
			<result name="success">/success.jsp</result>
		</action>
	</package>
</struts>

請求URL是

http://localhost:8080/Struts/add?key="color"&value="bule"
http://localhost:8080/Struts/delete?key="null"
http://localhost:8080/Struts/update?key="color"&value="red"
http://localhost:8080/Struts/update?key="color"


這個看起來是否是不少,可是他是最簡單的,每一個方法對應一個action,因此說公司不少都是用第一種或者第二種

下次我會寫關於Struts2怎麼接收請求參數,和獲取Request的幾個方式,和Struts2底層運行的狀況,帶你們Review一次源代碼,

求關注,求轉發

相關文章
相關標籤/搜索