Struts2學(xué)習(xí)教程之入門小白的開(kāi)始基礎(chǔ)
Struts2 概述:
Struts2 是一個(gè)用來(lái)開(kāi)發(fā) MVC 應(yīng)用程序的框架,他提供了 Web 應(yīng)用程序開(kāi)發(fā)過(guò)程中的一些常見(jiàn)問(wèn)題的解決方案,比如對(duì)于用戶輸入信息合法性的驗(yàn)證,統(tǒng)一的布局,國(guó)際化等,既然有 Struts2 那么肯定有 Struts1,但是從本質(zhì)上講 Struts2 不是從 Struts1 擴(kuò)展而來(lái)的,更應(yīng)該說(shuō)是一種換了品牌標(biāo)簽的 WebWork 更合適。
struts1 VS struts2
- struts1 里使用 ActionServlet 作為控制器,Struts2 使用過(guò)濾器作為控制器
- Struts1 中每個(gè) HTML 表單都對(duì)應(yīng)一個(gè) ActionForm 實(shí)例,Struts2 中 HTML 表單將被直接映射到一個(gè) POJO
- Struts1 的驗(yàn)證邏輯編寫在 ActionForm 中,Struts2 中的驗(yàn)證邏輯編寫在 Action 中
- Struts1 中 Action 類必須繼承 org.apache.struts.action.Action 類,Struts2 中任何一個(gè) POJO 都可以是一個(gè) Action 類
- Struts2 在頁(yè)面里使用 OGNL 來(lái)顯示各種對(duì)象模型,可以不再使用 EL 和 JSTL
Struts2 環(huán)境搭建
新建 Model,并勾選 Struts2 ,之后選擇 Struts2 所要使用的 library,你可以直接在新建頁(yè)面中選擇 Download 進(jìn)行下載,也可以提前下載好 Struts2 所需要的 jar 包自己構(gòu)建(這里我選擇自己構(gòu)建的 library)
http://struts.apache.org/download.cgi#struts2516 在此頁(yè)面可以選擇自己所要使用 Struts2 版本,同樣大家也可以在腳本之家進(jìn)行本地下載:http://www.dhdzp.com/softs/539810.html

點(diǎn)擊下一步之后為自己的 struts2 項(xiàng)目命名(在命名的時(shí)候建議在第二欄 Content Root 的路徑后改名,若在第一欄中更改只是更改第一欄的,其余兩欄不會(huì)被更改)

點(diǎn)擊 Finish 完成 Struts2 項(xiàng)目的創(chuàng)建,所創(chuàng)建的項(xiàng)目如下

IDEA VS Eclipse
- 若我們使用 Eclipse 去創(chuàng)建 Struts2 項(xiàng)目則需要在下載的 Struts2 包中已有的項(xiàng)目中去拷貝 struts2 文件的格式和 web.xml 文件的配置;IDEA 會(huì)為我們自動(dòng)構(gòu)建好
- web.xml 文件在 struts2 包下的 struts\apps\struts2-blank1\WEB-INF\web.xml
- struts.xml 文件在 struts2 包下的 struts\apps\struts2-blank\WEB-INF\classes,將其創(chuàng)建于 src 目錄下
Struts2 HelloWorld
搭建好 Struts2 的開(kāi)發(fā)環(huán)境之后我們開(kāi)始第一個(gè) Struts2 程序的編寫,其要求為在一個(gè)表單中輸入用戶的基本信息點(diǎn)擊提交后跳轉(zhuǎn)到另一個(gè)頁(yè)面顯示用戶所輸入的信息,在沒(méi)有學(xué)習(xí) Struts2 之前這對(duì)于我們來(lái)說(shuō)非常簡(jiǎn)單,僅需要將頁(yè)面請(qǐng)求發(fā)送到 Servet 中響應(yīng)請(qǐng)求到另一個(gè)頁(yè)面,使用 EL 和 JSTL 將信息顯示即可。對(duì)于 Struts2 這當(dāng)然也算是一個(gè) HelloWorld,我們將借此實(shí)例開(kāi)始 Struts2 各方面的知識(shí)講解。

在 index.jsp 中編寫頁(yè)面代碼,供用戶輸入基本信息,如下:
依據(jù)表單 name 屬性編寫實(shí)體類,并創(chuàng)建 getXxx 和 setXxx 方法,Customer.java
在 struts.xml 文件中編寫代碼處理 struts2 請(qǐng)求
返回顯示頁(yè)面 show.jsp
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> <package name="helloWorld" extends="struts-default"> <action name="input" class="com.struts2.hello.test.Customer" method="print"> <result name="print">/show.jsp</result> </action> </package> </struts>
Customer.java
package com.struts2.hello.test;
/**
* Created by shkstart on 2018/03/24.
*/
public class Customer {
private String userName;
private String email;
private String address;
/*
* getXxx() setXxx() 方法
**/
public String print() {
System.out.println(new Customer());
return "print";
}
@Override
public String toString() {
return "Customer{" +
"userName='" + userName + '\'' +
", email='" + email + '\'' +
", address='" + address + '\'' +
'}';
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Input</title> </head> <body> <table> <form action="input.action" method="post"> <tr> <td>UserName</td> <td><input type="text" name="userName"></td> </tr> <tr> <td>Email</td> <td><input type="text" name="email"></td> </tr> <tr> <td>Address</td> <td><input type="text" name="address"></td> </tr> <tr> <td><input type="submit" value="Submit"></td> </tr> </form> </table> </body> </html>
show.jsp(只展示 Body 標(biāo)簽內(nèi)容)
UserName: ${userName}<br>
Email: ${email}<br>
Address: ${address}<br>
代碼詳解

Customer.java 中成員變量和 index.jsp 中的屬性一一對(duì)應(yīng),不忽略大小寫;
show.jsp 中用于顯示的和 Customer.java 中的成員變量一致,否則無(wú)法顯示
index.jsp 中的 form 表單 action 值應(yīng)該設(shè)置為struts.xml 文件中的 action 的name 屬性
struts.xml 文件中的 action 節(jié)點(diǎn)的 method 屬性應(yīng) Custome.java 中的 String print() 方法,result 節(jié)點(diǎn)的 name 屬性為
String print() 方法的返回值
result 節(jié)點(diǎn)的值為處理了該 struts2 請(qǐng)求后所響應(yīng)的頁(yè)面
對(duì)于 show.jsp 頁(yè)面的顯示我們?cè)诤竺鏁?huì)詳細(xì)講解有關(guān)知識(shí),至此我們 Struts2 的 HelloWorld 就到這里,我相信和我一樣的小白跟著做下去應(yīng)該不會(huì)出什么大的差錯(cuò)??!
struts.xml 文件節(jié)點(diǎn)
package 屬性 --- struts2 使用 package 來(lái)組織模塊
- name 屬性為必須的,用于其他包應(yīng)用當(dāng)前包;
- extends 表示當(dāng)前包所繼承的包,即可以繼承其中所有的配置,通常為 struts-default;
- nameSpace默認(rèn)值為 /,當(dāng)設(shè)置此屬性的時(shí)候應(yīng)在 URL中的 servletPath 前加上所設(shè)置的值
action 屬性 --- 一個(gè) struts2 請(qǐng)求就是一個(gè) action
- result (action 的子標(biāo)簽)標(biāo)簽體表示響應(yīng)結(jié)果
- name 對(duì)應(yīng) struts2 請(qǐng)求的名字,不包含擴(kuò)展名(擴(kuò)展民默認(rèn)為 .action);
- class 為該 struts2 請(qǐng)求將要去的類的全類名;
- method 為所要去執(zhí)行的該類的方法,該方法返回值必須為 String,且需要和 result 節(jié)點(diǎn)的 name 屬性一致
- result 的 name 屬性值默認(rèn)為 SUCCESS,class 默認(rèn)屬性為 ActionSupport,method 默認(rèn)值為 execute
一個(gè) action 可以有多個(gè) result 子節(jié)點(diǎn),多個(gè) result 子節(jié)點(diǎn)使用 name 屬性區(qū)分
result 節(jié)點(diǎn)的 type 屬性默認(rèn)為 dispatcher(轉(zhuǎn)發(fā)),表示結(jié)果的響應(yīng)類型
Action VS action
- 在此案例中 Customer.java 就是 struts2 中所說(shuō)的 Action 類,index.jsp 發(fā)送的請(qǐng)求為一個(gè) action 請(qǐng)求;
- action 代表一個(gè) struts2 請(qǐng)求,Action 類代表能夠處理該 struts2 請(qǐng)求的類
- Action 類的成員變量必須遵循與 JavaBean 屬性名相同的命名規(guī)則,屬性的類型可以是任意類型,需與表單的 name 屬性相同
- 至少有一個(gè)供 struts2 執(zhí)行這個(gè) action 請(qǐng)求時(shí)所要調(diào)用的方法
- 同一個(gè) Action 也可以包含多個(gè) action 方法
- Action 類必須有一個(gè)無(wú)參的構(gòu)造器,因?yàn)闀?huì)用到反射賦值
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Java http請(qǐng)求封裝工具類代碼實(shí)例
這篇文章主要介紹了Java http請(qǐng)求封裝工具類代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java工程mybatis實(shí)現(xiàn)多表查詢過(guò)程詳解
這篇文章主要介紹了Java工程mybatis實(shí)現(xiàn)多表查詢過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
SpringBoot 集成MQTT實(shí)現(xiàn)消息訂閱的詳細(xì)代碼
本文介紹了如何在SpringBoot中集成MQTT并實(shí)現(xiàn)消息訂閱,主要步驟包括添加依賴、配置文件設(shè)置、啟動(dòng)類注解、MQTT配置類、消息處理器配置、主題緩存、動(dòng)態(tài)數(shù)據(jù)庫(kù)主題配置以及消息處理服務(wù),感興趣的朋友跟隨小編一起看看吧2024-11-11
Java動(dòng)態(tài)替換properties文件中鍵值方式
這篇文章主要介紹了Java動(dòng)態(tài)替換properties文件中鍵值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
關(guān)于fastjson的常見(jiàn)API詳解
這篇文章主要介紹了關(guān)于fastjson的常見(jiàn)API詳解,Fastjson是一個(gè)Java庫(kù),可用于將Java對(duì)象轉(zhuǎn)換為其JSON表示,它還可用于將JSON字符串轉(zhuǎn)換為等效的Java對(duì)象,Fastjson可以處理任意Java對(duì)象,包括您沒(méi)有源代碼的預(yù)先存在的對(duì)象,需要的朋友可以參考下2023-07-07
如何基于Autowired對(duì)構(gòu)造函數(shù)進(jìn)行注釋
這篇文章主要介紹了如何基于Autowired對(duì)構(gòu)造函數(shù)進(jìn)行注釋,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
SpringBoot集成redis實(shí)現(xiàn)共享存儲(chǔ)session
這篇文章主要介紹了SpringBoot集成redis實(shí)現(xiàn)共享存儲(chǔ)session的流程步驟,文中通過(guò)代碼示例介紹的非常詳細(xì),并總結(jié)了一些常見(jiàn)的錯(cuò)誤及解決方法,需要的朋友可以參考下2024-03-03

