Struts2 入門

struts2

概念:Struts2是一個基于MVC設計模式的Web應用框架猫缭,它本質(zhì)上相當于一個servlet误续,在MVC設計模式中闪金,Struts2作為控制器(Controller)來建立模型與視圖的數(shù)據(jù)交互羡滑。

開發(fā)環(huán)境搭建

1潘拨、拷jar包绩衷, 在apps包下蹦魔,blank>WEB-INF>lib
2、拷配置文件咳燕, 在apps包下勿决,blank>WEB-INF>src>java>struts.xml
3、拷過濾器配置招盲, 在apps包下低缩, blank>WEB-INF>web.xml
4、將自己新建的action類配置到struts.xml中

public String execute(){
        return "tohello";
    }

 <package name="default" namespace="/" extends="struts-default">
<!-- package的namespace與action的name組成 瀏覽器訪問路徑 class是自己新建action的全類名 -->
<action name="hello"  class="com.hemi.action.ActionTest">
    <!-- name自己新建action類return的字符串  /hello.jsp跳轉(zhuǎn)的目標jsp -->
    <result name="tohello">/hello.jsp</result>
    </action>
</package>

struts2 核心類:StrutsPrepareAndExecuteFilter

struts2 執(zhí)行順序

1.jpg

配置文件

  • constant 標簽:

    • name="struts.devMode" value="true" 設置配置文件更改不會自動重新加載
    • name="struts.i18n.encoding" value="UTF-8" 設置框架的編碼格式,默認UTF-8
    • name="struts.action.extension" value="do,," 設置頁面訪問時后綴名 默認action,, ,,表示加或者不加后綴都能訪問
  • package 標簽:

    • name:用來區(qū)分不同的action
    • extends:必須默認繼承 struts-default
  • action 標簽: 配置action處理類路徑 和映射路徑

    • method:指明要調(diào)用action中的哪個方法咆繁,不寫默認執(zhí)行execute方法
  • result 標簽: 配置結(jié)果頁面

    • name:邏輯視圖名讳推,是action類返回的邏輯視圖名
    • 文本內(nèi)容:物理視圖名(jsp文件)
  • include 標簽:用來引入其他配置文件,適合團隊分模塊開發(fā)

action編寫方式

1玩般、自定義類银觅,編寫execute方法

2、實現(xiàn)Action接口

3坏为、繼承ActionSupport類

action方法訪問方式

1究驴、傳統(tǒng)訪問,通過method屬性指明

2匀伏、通配符訪問 *

<!-- {表示第幾個*號是方法名}   根據(jù)*輸入的方法名 并根據(jù)該方法返回的字符串與resultname比對進行相應的跳轉(zhuǎn)-->
<action name="user_*" class="........."  method="{1}">
    <result name="ok"></result>
    <result name="fail"></result>
</action>

3洒忧、動態(tài)方法調(diào)用 ! action名够颠!方法名.后綴 放開動態(tài)調(diào)用的常量是:struts.enable.DynamicMethodInvocation 為true 開啟

跳轉(zhuǎn)方式

  • result 標簽:type 屬性來控制頁面的跳轉(zhuǎn)方式
    • jsp頁面跳轉(zhuǎn)(默認)轉(zhuǎn)發(fā) dispatcher 重定向 redirect
    • Action之間跳轉(zhuǎn) : 轉(zhuǎn)發(fā) chain 重定向redirectAction
        <!-- 默認轉(zhuǎn)發(fā) dispatcher -->
        <result name="login">/login.jsp</result>
        <result name="register">/register.jsp</result>
        <!-- jsp頁面的重定向 -->
        <result name="menu" type="redirect">/menu.jsp</result>
        <!-- action之間的重定向 -->
        <result name="fail" type="redirectAction">user_register</result>

注意不同papackage標簽的Action之間的跳轉(zhuǎn) 需要注入
通過兩個param標簽(放在result標簽內(nèi)) 注入 name="actionName" 和 name="nameSpace"

    <result name="success" type="redirectAction">
        <!-- 另一個package中action的name -->
        <param name="actionName">hello</param>
        <!-- 另一個package的namespace -->
        <param name="nameSpace">/</param>
    </result>

動態(tài)結(jié)果頁面配置

1熙侍、在action類中定義一個字符串變量,并提供get方法 在每個方法內(nèi)設置該字符串來決定物理視圖名履磨,指定要跳轉(zhuǎn)的目標頁面

public class MyAction {
    private String view;
    public String getView() {
        return view;
    }
    public void setView(String view) {
        this.view = view;
    }
    public String test1(){
        setView("test1.jsp");
        return "ok";
    }
    public String test2(){
        setView("test2.jsp");
        return "ok";
    }
    public String test3(){
        setView("test3.jsp");
        return "ok";
    }
}

2蛉抓、在result 的文本配置成獲取物理視圖屬性 通過${action中的字符串變量名}

<action name="test_*" class="com.hemi.action.MyAction" method="{1}">
    <result name="ok">/${view}</result>
</action>

Servlet API的操作,也就是獲取參數(shù)

1蹬耘、耦合方式 ServletActionContext.getRequest()

//耦合方式
        HttpServletRequest req = ServletActionContext.getRequest();
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        System.out.println(password);
        if ("admin".equals(username) && "123".equals(password)) {
            req.setAttribute("username", username);
            req.setAttribute("password", password);
            setView("success.jsp");
            return "ok";
        }
        setView("login.jsp");
        return "fail";

2芝雪、解耦方式 ActionContext.getContext()

        //解耦方式
        ActionContext context = ActionContext.getContext();
        Map<String, Object> map = context.getParameters();
        
        String[] username = (String[]) map.get("username");
        setView("test3.jsp");
        return "ok";

3、ioc注入 實現(xiàn)ServletRequestAware接口在類里聲明HttpServletRequest
并重寫setServletRequest方法 在里面寫this.request=req;(給類中的全局變量賦值)

public class MyAction implements ServletRequestAware {
    private String view;
private HttpServletRequest request;
//ioc注入
public String test2() {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println(username);
        System.out.println(password);
        if ("admin".equals(username) && "123".equals(password)) {
            request.setAttribute("username", username);
            request.setAttribute("password", password);
            setView("success.jsp");
            return "ok";
        }
        setView("login.jsp");
        return "fail";
    }

    @Override
    public void setServletRequest(HttpServletRequest req) {
        this.request=req;
    }
    }

數(shù)據(jù)校驗

1综苔、首先繼承ActionSupport

2惩系、校驗全部方法 重寫 validate方法

3、校驗指定方法 自定義方法 validate+校驗的方法名(注意:方法首字母大寫)

4如筛、添加校驗錯誤信息 addFieldError

        //System.out.println("校驗test1方法");
        String username = request.getParameter("username");
        if (username.length()==0) {
            addFieldError("username", "用戶名不能為空");
        }

5堡牡、配置文件中加一個result name為input

<result name="input" type="redirect">/login.jsp</result>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市杨刨,隨后出現(xiàn)的幾起案子晤柄,更是在濱河造成了極大的恐慌,老刑警劉巖妖胀,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芥颈,死亡現(xiàn)場離奇詭異,居然都是意外死亡赚抡,警方通過查閱死者的電腦和手機爬坑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涂臣,“玉大人盾计,你說我怎么就攤上這事。” “怎么了署辉?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵族铆,是天一觀的道長。 經(jīng)常有香客問我哭尝,道長哥攘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任刚夺,我火速辦了婚禮献丑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侠姑。我一直安慰自己,他們只是感情好箩做,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布莽红。 她就那樣靜靜地躺著,像睡著了一般邦邦。 火紅的嫁衣襯著肌膚如雪安吁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天燃辖,我揣著相機與錄音鬼店,去河邊找鬼。 笑死黔龟,一個胖子當著我的面吹牛妇智,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氏身,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼巍棱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛋欣?” 一聲冷哼從身側(cè)響起航徙,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陷虎,沒想到半個月后到踏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡尚猿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年窝稿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谊路。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡讹躯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情潮梯,我是刑警寧澤骗灶,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站秉馏,受9級特大地震影響耙旦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萝究,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一免都、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帆竹,春花似錦绕娘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秒紧,卻和暖如春绢陌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熔恢。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工脐湾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叙淌。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓秤掌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凿菩。 傳聞我的和親對象是個殘疾皇子机杜,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

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

  • 本文包括: 1、Struts 2 概述2衅谷、Struts 2 快速入門3椒拗、Struts 2 的執(zhí)行流程4、配置 st...
    廖少少閱讀 2,965評論 3 13
  • [TOC] struts2 概念:Struts2是一個基于MVC設計模式的Web應用框架获黔,它本質(zhì)上相當于一個ser...
    呦後閱讀 386評論 0 0
  • 概述 什么是Struts2的框架Struts2是Struts1的下一代產(chǎn)品蚀苛,是在 struts1和WebWork的...
    inke閱讀 2,263評論 0 50
  • 詳談 Struts2 的核心概念 本文將深入探討Struts2 的核心概念,首先介紹的是Struts2 的體系結(jié)構(gòu)...
    可愛傻妞是我的愛閱讀 1,129評論 0 2
  • 標簽 如果要配置的標簽玷氏,那么必須要先配置標簽堵未,代表的包的概念。 包含的屬性 name包的名稱盏触,要求是唯一的渗蟹,管理a...
    偷偷得路過閱讀 1,352評論 0 0