傳統的Java web: Struts主要是代替Servlet寫後臺的,用於處理客戶端請求。 Struts框架抽象出後臺處理的通用步驟,封裝為一個框架,簡化了後臺編程。 與Servlet相比,Struts具有先進的架構、編程思想。 Struts的功能 自動封裝參數 參數校驗 結果處理(轉發、重定向) ...
傳統的Java web:
Struts主要是代替Servlet寫後臺的,用於處理客戶端請求。
Struts框架抽象出後臺處理的通用步驟,封裝為一個框架,簡化了後臺編程。
與Servlet相比,Struts具有先進的架構、編程思想。
Struts的功能
- 自動封裝參數
- 參數校驗
- 結果處理(轉發、重定向)
- 國際化
- 顯示等待頁面
- 防止表單重覆提交
Struts1、2的區別
- Struts1、2技術上關係並不大
- Struts1基於Servlet,而Servlet是線程不安全的,所以Struts1線程不安全
- Struts2基於Filter,前身是WebWork
IDEA下使用Struts2示例
1、創建項目
需要先配好jdk、tomcat。
把struts2核心的8個jar包添加進來,並不推薦Download,可能會出問題。
2、打開項目結構,修複問題
3、打開web.xml
隨著Struts的版本更替,Struts核心過濾器類的位置也在變化,需要手動修複。
刪掉,輸入StrutsPrepare就出來了
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
4、編寫前端頁面,用Action處理請求,在struts.xml中配置Struts(主要是action)。
比如我們在index.jsp中寫一個表單:
1 <form> 2 請選擇登錄角色:<br /> 3 <input type="radio" name="role" value="student">學生 4 <input type="radio" name="role" value="teacher">教師<br /> 5 <button type="submit" >登錄</button> 6 </form>
src下新建包action,包下新建類LoginAction:
1 public class LoginAction extends ActionSupport { 2 private String role; 3 4 public void setRole(String role) { 5 this.role = role; 6 } 7 8 public String getRole() { 9 return role; 10 } 11 12 @Override 13 public String execute() throws Exception { 14 if (role.equals("teacher")) 15 return "teacher"; 16 else if (role.equals("student")) 17 return "student"; 18 else 19 return "error"; 20 } 21 }
需要繼承ActionSupport類,重寫execute()方法。當請求提交到這個action時,會自動調用execute()來處理。
將要處理的欄位寫成成員變數,並設置對應的setter、getter方法,成員變數名需要和請求傳過來的參數名相同。上面的表單會傳遞一個參數role,這個action接受到請求時,會調用setter方法把請求參數賦給相應的成員變數。我們可直接使用某個欄位,使用時會自動調用getter方法獲取對應的值。
execute()需要返回一個String類型的值,可以自己寫,也可以使用Struts預定義的常量,比如SUCCESS即"success"。
在struts.xml中配置action:
1 <struts> 2 <package name="test" namespace="/" extends="struts-default"> 3 <action name="login" class="action.LoginAction"> 4 <result name="teacher">/teacher.jsp</result> 5 <result name="student">/student.jsp</result> 6 <result name="error">/error.jsp</result> 7 </action> 8 </package> 9 </struts>
<package>配置一個包,name即包名,namespace、extends都是固定的值。
<action>配置一個action,name指定action名稱,一般使用action類名的Action之前部分的camel寫法,class指定action所在的類。
<result>設置視圖。action相當於控制器servlet,處理請求,並調用相應的視圖來顯示結果。
設置表單的action屬性:
action="login.action"
用指定的action來處理表單。
如果首頁不是index,還需要在web.xml中配置首頁:
<welcome-file-list> <welcome-file></welcome-file> </welcome-file-list>
ok。