Struts2是基於MVC設計模式的流行和成熟的Web應用程序框架。java
最新版本是Struts 2.5.5web
Struts2.x 部分jar文件說明apache
文件名稱 | 描述 |
---|---|
struts2-core | struts2框架核心庫包 |
xwork | 構建 Struts2 的 XWork 2 的庫 (2.0及以上版本)。 |
ognl | 對象圖導航語言(OGNL), 該表達式語言的使用遍佈框架的方方面面。 |
javassist | OGNL使用的Java字節碼操做庫。 |
freemarker | struts標籤模板庫文件。 |
commons-logging | 通用日誌, Struts 2 框架使用它來實現 JDK 1.4+ 和 log4J 之間的無縫透明支持。 |
commons-fileupload | 爲 Servlet 和 Web 應用添加穩定、高性能的文件上傳功能。 |
commons-io | 一個輔助開發 IO 功能的工具庫。 |
commons-lang3 | 用於簡化經常使用功能代碼的使用用法。該庫提供主要針對java.lang包中的類的經常使用工具方法,從而使代碼保持簡潔乾爽。 |
一、根據需求導入相關jar包設計模式
二、在web.xml文件中配置strus2過濾器app
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>TestStruts</display-name> <!-- 配置struts2核心Filter(其餘攔截器應該配置在struts2攔截器上方,不然失效) --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- 全部的Action類請求都會被struts2過濾器攔截 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> </web-app>
三、編寫Struts2配置文件struts.xml(位於src目錄)框架
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- package 定義一個包(一般一個業務模塊使用一個包) 做用:管理Action name 包名(用來區分不一樣包,不一樣package的name值不能重複) extends 當前包繼承的包(struts中有必定要繼承struts-default [struts-default包在 struts-default.xml定義],繼承struts-default包後,可使用struts-default包中定義攔截器和結果類型 ) abstract 表示當前包爲抽象包,值爲true/false(struts-default包的abstract值爲true)。 抽象包中不能有action,不然運行時會出錯 namespace 命名空間,默認爲"/" --> <package name="struts2" extends="struts-default" abstract="false"> <!-- 配置全局結果集,在此package裏每一個action共用的結果集 --> <global-results> <result name="success">/index.jsp</result> </global-results> <!-- action 配置請求路徑與Action類的映射關係 name 請求路徑名稱 class 請求處理的Action類全名,默認是com.opensymphony.xwork2.ActionSupport,在struts-default.xml中定義 method 配置調用的處理方法 沒有指定method屬性, 默認執行 Action類中 execute方法 --> <action name="helloworld" class="cn.iborder.action.HelloWorldAction"> <!-- result 根據Action類返回的值進行相應處理 name Action類返回的值 type 跳轉的結果類型(默認值dispatcher) 標籤體 指定跳轉的頁面 --> <result name="success">/index.jsp</result> </action> <action name="login" class="cn.iborder.action.UserAction" method="login"> <result name="login" type="redirect">/index.jsp</result> </action> </package> <!-- 引入其餘配置文件 config.xml內容: ====================================================================== <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="struts2" extends="struts-default" namespace="/"> <action name="hello" class="cn.iborder.action.HelloAction" method="hello"> <result name="hello">/hello.jsp</result> </action> </package> </struts> ====================================================================== --> <!-- 加載src路徑下的config.xml文件 --> <include file="/config.xml"></include> </struts>
struts2中配置啓動開發模式的好處:jsp
四、編寫Action類ide
HelloWorldAction.java工具
package cn.iborder.action; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport { @Override public String execute() throws Exception { // TODO Auto-generated method stub System.out.println("執行HelloWorldAction"); return "success"; } }
Action實現方式:普通pojo類、實現Action接口 、繼承ActionSupport性能
Struts2 中一般直接使用 Action 來封裝 HTTP 請求參數,所以,Action 類裏還應該包含與請求參數對應的屬性,而且爲屬性提供對應的 getter 和 setter 方法。
User.java
package cn.iborder.entity; public class User { private String userName; private String password; 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; } }
UserAction.java
package cn.iborder.action; import cn.iborder.entity.User; public class UserAction { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String login() { System.out.println("用戶:"+user.getUserName()); System.out.println("密碼:"+user.getPassword()); return "login"; } }
package cn.iborder.action; import com.opensymphony.xwork2.Action; import cn.iborder.entity.User; public class UserAction implements Action { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String login() { System.out.println("用戶:"+user.getUserName()); System.out.println("密碼:"+user.getPassword()); return "login"; } @Override public String execute() throws Exception { // TODO Auto-generated method stub return null; } }
須要使用struts2的數據校驗功能,必須繼承ActionSupport.
ActionSupport已經實現了Action接口,還實現了Validateable接口,提供了數據校驗功能。經過繼承該 ActionSupport 類,能夠簡化 Struts 2 的 Action 開發。
Actionsupport類在實現的Validateable接口中定義了一個 validate()方法,重寫該方法,自定義數據校驗功能,它會在execute()方法以前執行。在實現表單驗證功能的時候必定不要忘記了在 struts.xml 中相對應的 action 中配置 result="input",由於表單驗證失敗默認返回的字符串爲 input,若是沒有的話會報錯。
重寫父類的validate()方法,會對對全部業務邏輯都驗證,不推薦使用,建議自定義一個校驗類,繼承實現Validator接口的類,有ValidatorSupport或FieldValidatorSupport。
經過校驗配置文件可使用Struts2已有的校驗器
package cn.iborder.action; import com.opensymphony.xwork2.ActionSupport; import cn.iborder.entity.User; public class UserAction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String login() { System.out.println("用戶:"+user.getUserName()); System.out.println("密碼:"+user.getPassword()); return "login"; } }