在咱們的開發中,有一個經典的框架,就是SSH,他們各自是:Struts,Spring,Hibernate,咱們隊他們神交已久,在曾經的博客中我介紹了Hibernate,今天咱們也逐步揭開Struts的神奇面紗,一塊兒來看看這個熟悉的老朋友!html
首先咱們仍是去維基百科上看看他的介紹:java
Struts是Apache軟件基金會(ASF)贊助的一個開源項目。它最初是Jakarta項目中的一個子項目,並在2004年3月成爲ASF的頂級項目。它經過採用JavaServlet/JSP技術,實現了基於Java EEWeb應用的Model-View-Controller(MVC)設計模式的應用框架,是MVC經典設計模式中的一個經典產品。web
不要被MVC嚇住,咱們當即去看看他是什麼?算法
MVC模式(Model-View-Controller)是軟件project中的一種軟件架構模式,把軟件系統分爲三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。數據庫
MVC模式最先由Trygve Reenskaug在1978年提出[1] ,是施樂帕羅奧多研究中心(XeroxPARC)在20世紀80年代爲程序語言Smalltalk發明的一種軟件設計模式。MVC模式的目的是實現一種動態的程序設計,使興許對程序的改動和擴展簡化,並且使程序某一部分的反覆利用成爲可能。除此以外,此模式經過對複雜度的簡化,使程序結構更加直觀。軟件系統經過對自身基本部分分離的同一時候也賦予了各個基本部分應有的功能。專業人員可以經過自身的專長分組:apache
(控制器Controller)- 負責轉發請求,對請求進行處理。編程
(視圖View) - 界面設計人員進行圖形界面設計。設計模式
(模型Model) - 程序猿編敲代碼應有的功能(實現算法等等)、數據庫專家進行數據管理和數據庫設計(可以實現詳細的功能)。session
如下讓咱們經過一個簡單的樣例認識他:架構
1.首先要下載struts的jar包,地址http://struts.apache.org/
2.解壓後將lib目錄裏的jar包都增長到項目中
3.在webapps目錄中解壓struts-blank.war,將當中的struts-config.xml複製到項目中
4.配置web.xml部署ActionServlet。這個格式是相對固定的,因此通常複製就能夠
<span style="font-size:18px;"><servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </span>
5.配置struts-config.xml部署Action、ActionForm。當中type均爲你項目中Action和ActionForm所在包的完整路徑;name可以隨便起,但是Action中的name必須與它用到的ActionForm的name相一致;再有就是action中要加入scope="request"這個屬性,因爲scope默認是session,這個可以依據實際狀況本身定。
<span style="font-size:18px;"><struts-config> <form-beans> <form-bean name="loginForm" type="com.wang.struts.LoginActionForm"></form-bean> <!-- 可以有多個ActionForm --> </form-beans> <action-mappings> <action path="/login" type="com.wang.struts.LoginAction" name="loginForm" scope="request"> <forward name="success" path="/login_success.jsp"></forward> <forward name="error" path="/login_error.jsp"></forward> </action> <!-- 可以有多個Action --> </action-mappings> </struts-config> </span>
<span style="font-size:18px;">package com.action; import java.util.Map; import com.entity.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class loginaction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { if("admin".equals(user.getUserName()) && "admin".equals(user.getPassWord()) ){ //System.out.println("you are success!"); Map<String, Object> session = (Map)ActionContext.getContext().get("session"); session.put("userName", user.getUserName()); return "success"; }else{ //System.out.println("your user name is wrong !"); return "error"; } //System.out.println("hello!"); //return super.execute(); } } </span>
7.編寫登錄頁面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>SS2_Test_Login</title> </head> <body> <form action="login"> User login <hr/> User Name: <input name="user.userName" type="text"><br/> User PassWord: <input name="user.PassWord" type="text"> <input id="Btn_Login" type="submit" value="OK"> </form> </body> </html>
咱們看看他是怎麼執行的:
這個詳細的執行,咱們纔剛剛接觸,暫且以爲,他就是一個三層的調用吧!
而這和MVC有什麼關係呢?聽聽百科的解釋:
MVC結構[編輯]
在Struts中,已經由一個名爲ActionServlet的Servlet充當控制器(Controller)的角色,依據描寫敘述模型、視圖、控制器相應關係的struts-config.xml的配置文件,轉發視圖(View)的請求,組裝響應數據模型(Model)。在MVC的模型(Model)部分,經常劃分爲兩個主要子系統(系統的內部數據狀態與改變數據狀態的邏輯動做),這兩個概念子系統分別詳細相應Struts裏的ActionForm與Action兩個需要繼承實現超類。在這裏,Struts可以與各類標準的數據訪問技術結合在一塊兒,包含EnterpriseJava Beans(EJB), JDBC與JNDI。在Struts的視圖(View)端,除了使用標準的JavaServerPages(JSP)之外,還提供了大量的標籤庫使用,同一時候也可以與其它表現層組件技術(產品)進行整合,比方VelocityTemplates,XSLT等。經過應用Struts的框架,終於用戶可以把大部分的關注點放在本身的業務邏輯(Action)與映射關係的配置文件(struts-config.xml)中。
寫完了這個測試,咱們發現,Struts給咱們帶來了很是大的方便,將後臺處理和前臺顯示經過xml配置文件實現了本身主動適配,本身主動處理!給咱們的編程帶來了很是大的優勢,這樣咱們寫的後臺處理和前臺處理代碼就會帶來很是大的複用性!
而經過這個實例,咱們對框架的理解也更深入一點,框架是一種另外意義上的抽象,框架提供的是公共服務,他是種對橫向上的抽象。經過這個樣例,咱們也更理解面向對象的設計了!
每一種技術的學習,事實上都不難,那麼難在哪呢?難在你以爲他「高大上」了,事實上撥開所有技術的臉皮,不仍是ascii碼的組合,面向對象技術,設計模式的應用嗎?這麼看來,這個世界,仍是簡單的!