Struts2 框架入門及結合Intellj idea完成登陸demo測試 ...
1. Struts2 框架入門及結合Intellj idea完成登陸demo測試
1.1 本章目錄:
- 框架入門
- Struts2簡介
- Struts2入門案例
- Struts2執行流程分析
2. 具體內容
2.1 框架入門
2.1.1 Struts2簡介
(1). Struts2是一種基於MVC模式的的輕量級Web開發框架。
MVC模式:MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。
- Model(模型):是應用程式中用於處理應用程式數據邏輯的部,通常模型對象負責在資料庫中存取數據;
- View(視圖):是應用程式中處理數據顯示的部分,通常視圖是依據模型數據創建的;
- Controller(控制器):是應用程式中處理用戶交互的部分,通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。
(2). Struts2是以WebWork為核心的,它採用攔截器的機制來處理用戶的請求。這樣的設計也會使得業務邏輯控制器能夠與Servlet API完全脫離開,所以Struts2可以理解為webwork的產品。
(3). 區別Struts2和Struts1:
在技術方面,Stuts1有個核心控制器,但是只提供了一個介面,也就是execute,還要配置actionform之類的,所以依賴性比較強;而Struts2是基於webwork,針對攔截器開發的,也就是所謂的AOP思想,可以配置多個action,用起來比較方便,但是因為請求之前的攔截器有一些註入的操作,速度相對Struts1來說慢一點。
(4). Struts2的優點:
- 項目開源,使用及拓展方便
- 提供Exception處理機制
- Result方式的頁面導航,通過Result標簽很方便地實現重定向和頁面跳轉
- 提供強大的、可以減少頁面代碼的標簽
- 提供良好的Ajax支持
2.1.2 Struts2入門案例
筆者利用Intellj idea寫了個簡單的案例。希望通過這個簡單的案例,能夠幫助初步認識struts2的運行流程。當然,還有IntelliJ idea的相關配置操作。筆者使用的是ubuntu的系統,不再講述idea的安裝以及JDK配置,tomcat的配置等等問題,相關教程很多,自己動手找找就好啦。
(1)到官網上面,下載Struts2的最新版本,推薦下載Struts-xxx-min-lib.zip。下載完成之後,lib目錄下應該有如下所示的jar包:
(2)打開IntellJ idea,創建項目create new Project
(2)選擇Java Enterprises--->Web Application(...)--->Struts2(...)--->Use Library
(3)選擇use library,不要選擇Download,因為idea配置的Struts2版本不一定一致,我們直接選擇自己下好的Struts2中的jar;選擇Create-->(找到步驟(1)中的jar包路徑)用Ctrl全部選中加進來。
(4)接著next---->命名(我這裡命名是Struts2_TestDemo_Project)完成後,項目欄如下所示:
(5)完成的項目中,包括了Struts.xml, web.xml, index.jsp。接下來進行簡單的配置工作;
- 打開File--->Project Structure--->Problem--->如果有問題提示,則單擊fix,選擇add Struts2 to the artifact--->OK;
- 修改web.xml的filter-class中內容為org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- 將滑鼠點到StrutsPrepareAndExecuteFilter上面出現如下所示提示:
(這個時候直接刪掉該行中的"ng."即可,完成後不再有提示)
(6)基本的配置到這裡也就完成了,接下來寫一個登陸Demo;
- 後端部分,在src中建一個java包(test_login)---->包中建一個java類(LoginAction)代碼如下:
LoginAction:
package test_login; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private String username; private String password; @Override public String execute() throws Exception { if (username.equals("admin") && password.equals("123")) { return SUCCESS; } else { return LOGIN; } } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
- Struts.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <action name="Login" class="test_login.LoginAction"> <result name="success">/success.jsp</result> <result name="login">/index.jsp</result> </action> </package> </struts>
- 登錄界面index.jsp
<%-- Created by IntelliJ IDEA. User: mairr Date: 17-11-17 Time: 下午6:41 To change this template use File | Settings | File Templates. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>用戶登陸界面</title> </head> <body> <h1>這是一個用戶登陸的地方</h1> <form action="Login.action" method="post"> <table> <tr> <td>用戶名:</td> <td><input type="text" name="username"></td> </tr> <tr> <td>密碼:</td> <td><input type="password" name="password"></td> </tr> <tr> <td colspan="2" style="text-align: center"><input type="submit" value="登錄"></td> </tr> </table> </form> </body> </html>
- 登陸成功跳轉頁面success.jsp
<%-- Created by IntelliJ IDEA. User: mairr Date: 17-11-17 Time: 下午7:00 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登陸成功</title> </head> <body> <h1>恭喜你,登陸成功啦~~~</h1> </body> </html>
- 完成之後,進行項目的發佈,File--->Project Structure--->Artifacts--->將struts2項目加到OutputLayer--->OK---->最後Run--->index.jsp,打開google瀏覽器(http://localhost:8080/index.jsp),登陸登陸界面如下:
- 輸入用戶名:admin,密碼:123;登陸成功後瀏覽器界面如下:
2.1.1 Struts2執行流程分析
Struts2的執行流程圖如下所示:
(1)客戶端瀏覽器發送一個請求,(HttpServletRequest);
(2)程式會調用StrutsPrepareAndExecuteFilter,然後詢問ActionMapper這個請求是否需要調用某個Action;
(3)如果ActionMapper決定需要調用某個Action,StrutsPrepareAndExecuteFilter會把這個請求處理給ActionProxy(Action代理);
(4)ActionProxy通過配置管理器(Configuration Manager)從配置文件(Struts.xml)中,讀取框架配置信息,從而找到需要調用的Action類;
(5)ActionProxy會創建一個ActionInvocation的實例;
(6)ActionInvocation使用命名模式來調用Action,在調用Action前,會依次調用所有配置的攔截器(Intercepter1、Intercepter2、Intercepter3..);
(7)一旦Action執行完成,返回結果字元串,ActionInvocation就會負責查找結果字元串對應的Result,然後執行這個Result。通常情況下Result會調用一些模板(JSP等)來呈現頁面。
(8)產生的Result信息返回ActionInvocation,此過程中攔截器會被再次執行(順序與Action執行之前相反);
(9)產生一個HttpServletResponse的響應行為,通過StructsPrepareAndExecuteFilter反饋給客戶端;
參考書籍:《SSH框架整合教程》
參考文章:http://blog.csdn.net/rcnjtech/article/details/77914381