Struts2入門

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包中的類的經常使用工具方法,從而使代碼保持簡潔乾爽。

1、搭建Struts2項目步驟

一、根據需求導入相關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

  • 能夠輸出日誌記錄,便於程序設計
  • 修改struts.xml配置文件中後就不用從新部署項目,直接生效。
  • 打印出更詳細的錯誤信息

四、編寫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";
	}

}

2、Action實現方式

Action實現方式:普通pojo類、實現Action接口 、繼承ActionSupport性能

Struts2 中一般直接使用 Action 來封裝 HTTP 請求參數,所以,Action 類裏還應該包含與請求參數對應的屬性,而且爲屬性提供對應的 getter 和 setter 方法。

一、普通pojo類

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";
	}
}

二、實現Action接口

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;
	}
}

三、繼承ActionSupport

須要使用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";
	}
}
相關文章
相關標籤/搜索