001--Struts2快速入門與使用IntelliJ IDEA創(chuàng)建第一個web項目

Struts2是一種基于MVC模式的輕量級web框架,自問世以來贺纲,就受到了廣大Web開發(fā)者的關(guān)注毛萌,并廣泛應(yīng)用于各種企業(yè)系統(tǒng)的開發(fā)中苟弛。

本系列將針對Struts2的簡介、特點阁将、安裝膏秫、執(zhí)行流程等內(nèi)容進行講解。

簡介

概念

Struts2是一個基于MVC設(shè)計模式的Web應(yīng)用框架做盅,它本質(zhì)上相當于一個servlet缤削,在MVC設(shè)計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數(shù)據(jù)交互吹榴。Struts 2是Struts的下一代產(chǎn)品亭敢,是在 struts 1和WebWork的技術(shù)基礎(chǔ)上進行了合并的全新的Struts 2框架。其全新的Struts 2的體系結(jié)構(gòu)與Struts 1的體系結(jié)構(gòu)差別巨大图筹。Struts 2以WebWork為核心帅刀,采用攔截器的機制來處理用戶的請求,這樣的設(shè)計也使得業(yè)務(wù)邏輯控制器能夠與ServletAPI完全脫離開婿斥,所以Struts 2可以理解為WebWork的更新產(chǎn)品劝篷。雖然從Struts 1到Struts 2有著太大的變化,但是相對于WebWork民宿,Struts 2的變化很小娇妓。

在介紹Struts2之前,先來認識一下Struts1活鹰。Struts1是最早的基于MVC模式的輕量級web框架哈恰,他能夠合理的劃分代碼結(jié)構(gòu)只估,并包含了驗證框架、國際化框架等多種實用工具框架着绷。但隨著技術(shù)的進步蛔钙,Struts1的局限性也越來越多的暴露出來。為了符合更加靈活荠医、高效的開發(fā)需求吁脱,Struts2框架應(yīng)用而生。

Struts2是Struts1的下一代產(chǎn)品彬向,是在Struts1和WebWork技術(shù)基礎(chǔ)上進行合并后的全新框架兼贡。雖然Struts1和Struts2名字類似,但其設(shè)計思想?yún)s有很大不同娃胆。實質(zhì)上遍希,Struts2是以WebWork為核心,采用攔截器機制來處理用戶的請求里烦。這樣的設(shè)計也使得業(yè)務(wù)邏輯控制器能夠與ServletAPI完全脫離開凿蒜,所以從另一方面可以理解為Struts2是WebWork的更新產(chǎn)品。

優(yōu)勢

  • 項目開源胁黑,使用及拓展方便
  • 提供Exception處理機制
  • Result方式的頁面導(dǎo)航废封,方便進行重定向和頁面跳轉(zhuǎn)
  • 通過簡單、集中的配置來調(diào)度業(yè)務(wù)類别厘,輕松進行配置和修改
  • 提供簡單統(tǒng)一的表達式語言來訪問所有可供訪問的數(shù)據(jù)
  • 提供了標準 強大的驗證框架和國際化框架
  • 提供了強大的標簽虱饿,有效減少頁面代碼
  • 對Ajax提供了支持
  • 擁有簡單的插件拥诡,只需要放入相應(yīng)的JAR包触趴,輕松擴展Struts2框架,比如自定義攔截器渴肉、自定義結(jié)果類型以及自定義標簽等
  • 擁有智能的默認配置

常見web框架

  • Struts2
  • Struts1
  • SpringMVC
  • WebWork

Web層框架都是基于前端控制器模式實現(xiàn)開發(fā)的冗懦。

前端控制器模式

在傳統(tǒng)開發(fā)方式中,一次請求就會對應(yīng)一個Servlet仇祭,這樣就會造成很多Servlet存在披蕉。

而在Struts2中,所有的請求都會經(jīng)過一個前端控制器乌奇,在前端控制器中實現(xiàn)框架的部分功能没讲,剩下的具體操作交給具體的Action中。

如果所有的請求都要經(jīng)過前端控制器礁苗,那么這個控制器該怎么實現(xiàn)呢爬凑?其實,過濾器就是最好的一個實現(xiàn)方式试伙,因為所有的請求都可以被過濾器攔截嘁信,然后再過濾器中實現(xiàn)部分功能于样。Struts2的前端控制器也是基于過濾器實現(xiàn)的。


這里寫圖片描述

Struts2開發(fā)包下載與介紹

下載安裝包

點我下載

這里寫圖片描述

  • all:包含官方提供的Struts2示例潘靖,以及docs文檔穿剖,lib庫,源碼等卦溢。
  • apps:官方提供的Struts2示例程序糊余。為war文件,可通過zip工具解壓縮
  • min-lib:最小集成lib包
  • lib:Struts2所有依賴庫
  • docs:官方提供的Struts2文檔单寂,包含快速入門啄刹、文檔以及api文檔等
  • src:Struts2的源代碼

Struts2中jar簡介

將上面下載的apps中struts2-blank.war(此項目為一個空工程,包含基本的開發(fā)包)凄贩,解壓縮誓军,并進入WEB-INF目錄下。


這里寫圖片描述

上面就是struts2的基本開發(fā)包了疲扎,那這些包各代表什么呢昵时?請看下圖:


這里寫圖片描述

從上圖中可以看出站刑,當前版本的Struts2項目依賴13個基礎(chǔ)jar瓤湘,不同的Struts2版本所依賴的基礎(chǔ)jar可能也不完全相同,不過基本變化不大默责。

需要注意一點壶熏,通常是由Struts2的web項目并不需要用到Struts2的全部jar句柠,因此沒有必要一次將Struts2的lib目標下所有jar都添加到項目中,根據(jù)需要來就好了棒假。

使用IntelliJ IDEA創(chuàng)建第一個Struts2項目

新建項目

打開InrelliJ IDEA溯职,選擇新建項目,如下帽哑,選擇Struts2 WebApplication谜酒,并把Libraries設(shè)置為Set up library later,如下:

這里寫圖片描述

下一步妻枕,輸入項目名及項目目錄僻族,點擊finish

這里寫圖片描述

進入項目目錄后,在web/WEB-INF下新建lib文件夾屡谐,同時將在上一節(jié)整理的struts2開發(fā)包拷入lib文件述么,之后,右鍵lib目錄愕掏,選擇Add as library選項度秘,將開發(fā)包配置好。如下:

這里寫圖片描述

配置web.xml核心過濾器

打開web/WEB-INF中的web.xml亭珍,配置filter敷钾,這個就是之前提到過的前端控制器枝哄。如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

編寫Action

在項目目錄src下新建包com.happy.demo,新建HelloAction.java阻荒,代碼如下:

public class HelloAction {
    public String sayHi() {
        System.out.println("hello world");
        return "success";
    }
}

配置struts.xml

打開項目目錄下的struts.xml挠锥,將剛編寫的HelloAction進行配置,如下:

<struts>
    <package name="hello" namespace="/hello" extends="struts-default">
        <action name="sayHi" class="com.happ.demo.HelloAction" method="sayHi">
            <result name="success">sayHi.jsp</result>
        </action>
    </package>
</struts>

暫時先無視這些字段代表的含義侨赡,后續(xù)會詳細講解配置文件蓖租。

新建sayHi.jsp

在上面xml配置中,通過result標簽配置了當success時跳轉(zhuǎn)的頁面sayHi.jsp羊壹,下面我們就來新建這個頁面蓖宦。
又因為在上面配置的namespace=hello,頁面跳轉(zhuǎn)時尋找規(guī)則為web/namespace/xxx.jsp油猫,所以稠茂,在web目錄下,新建hello文件夾情妖,并新建sayHi.jsp文件睬关。詳細如下:

這里寫圖片描述

sayHi.jsp內(nèi)容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>SayHi</h1>
</body>
</html>

配置全局Tomcat

  1. Tomcat下載
    點我去下載

  2. 打開Edit Configurations,如下:

    這里寫圖片描述

  3. 在彈窗中毡证,選擇Defaults电爹,找到Tomcat ServerLocal,如下:

    這里寫圖片描述

  4. 配置介紹

    這里寫圖片描述

    點擊Configure料睛,在彈出的框中配置本機Tomcat地址丐箩,如下:
    這里寫圖片描述

    選擇OK即可。

  5. 進入項目Project Structure恤煞,進行配置屎勘,如下:

    這里寫圖片描述

    點擊右上角Fix,選擇add lib to artifacts:
    這里寫圖片描述

配置項目Tomcat

  1. 為工程配置Tomcat阱州,步驟如下:


    這里寫圖片描述
  2. 命名及根據(jù)需要修改自定義配置挑秉,如端口號等


    這里寫圖片描述
  3. 配置Deployment

    這里寫圖片描述

  4. 點擊下方applyok完成配置

啟動并訪問項目

  1. 啟動項目


    這里寫圖片描述
  2. 訪問項目
    通過瀏覽器訪問http://localhost:8080/hello/sayHi苔货,可控制臺會打印HelloAction中的hello world,同時頁面會跳轉(zhuǎn)到struts.xml中配置的sayHi.jsp頁面立哑,頁面顯示之前寫的SayHi文字夜惭。

好了,到此铛绰,第一個Struts2項目跑起來了诈茧,下一篇會對Struts2的執(zhí)行流程、各種配置以及Action的創(chuàng)建訪問配置方式進行講解捂掰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敢会,一起剝皮案震驚了整個濱河市曾沈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸥昏,老刑警劉巖塞俱,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吏垮,居然都是意外死亡障涯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門膳汪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唯蝶,“玉大人,你說我怎么就攤上這事遗嗽≌澄遥” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵痹换,是天一觀的道長涂滴。 經(jīng)常有香客問我,道長晴音,這世上最難降的妖魔是什么柔纵? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮锤躁,結(jié)果婚禮上搁料,老公的妹妹穿的比我還像新娘。我一直安慰自己系羞,他們只是感情好郭计,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著椒振,像睡著了一般昭伸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澎迎,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天庐杨,我揣著相機與錄音,去河邊找鬼夹供。 笑死灵份,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的哮洽。 我是一名探鬼主播填渠,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氛什?” 一聲冷哼從身側(cè)響起莺葫,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枪眉,沒想到半個月后捺檬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡瑰谜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年欺冀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萨脑。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡隐轩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渤早,到底是詐尸還是另有隱情职车,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布鹊杖,位于F島的核電站悴灵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏骂蓖。R本人自食惡果不足惜积瞒,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望登下。 院中可真熱鬧茫孔,春花似錦、人聲如沸被芳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畔濒。三九已至剩晴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侵状,已是汗流浹背赞弥。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留壹将,地道東北人嗤攻。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像诽俯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容