Struts 2開發基本流程

Struts 2工做流程

Struts2是一個基於MVC設計模式的Web開發框架, 正如官網上介紹的那樣:html

ApacheStruts 2 is an elegant, extensible framework for creating enterprise-ready Javaweb applications. The framework is designed to streamline the full developmentcycle, from building, to deploying, to maintaining applications over time.java

Struts2是由Struts和Webwork這兩個優秀的框架演化而來,它的出現解決了表現層和業務邏輯層緊耦合的問題。web


爲了支持Struts 2,一般咱們須要添加如下類庫:apache

  • commons-fileupload.jar            文件上傳
  • commons-io.jar        I/O類庫
  • commons-lang-2.4.jar     Java.lang包
  • commons-lang3-3.1.jar   Java lang包擴展
  • commons-logging.jar       日誌
  • freemarker-2.3.19.jar      表現層框架
  • javassist-3.9.0.GA.jar      代碼生成工具Hibernate用它在運行時擴展java類和實現,同cglib包
  • ognl-3.0.6.jar            對象圖導航語言
  • struts2-core-2.3.14.2.jar                   Struts2核心組件
  • struts2-json-plugin-2.3.14.2.jar       Struts2對Json數據格式支持(非必須)
  • xwork-core-2.3.14.2.jar            webwork核心類庫

接下來編輯Web應用中的web.xml,配置Struts2的核心類庫,下面是配置文件的代碼片斷,在web.xml文件中,定義了框架的攔截器FilterDispatcher,Servlet初始化Struts框架而且處理全部請求。「/*」表示對於全部的請求都容許。json

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<filter>
		<!-- 定義Struts2的核心Filter -->
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
		<init-param>
			<param-name>actionPackages</param-name>
			<param-value>com.mycompany.myapp.actions</param-value>
		</init-param>
	</filter>
	<!-- 讓struts2的核心Filter攔截全部的請求 -->
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- web應用的默認首頁 -->
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

Jsp頁面(welcome.jsp和error.jsp省略):login.jsp設計模式

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<body>
<s:form action="login.action">
			<s:textfield name="username" key="user"></s:textfield>
			<s:textfield name="password" key="pass"></s:textfield>
<s:submit key="login"></s:submit>
</s:form>
</body>

Action類:

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class Demo extends ActionSupport {
	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;
	}

	public String execute() throws Exception {
		if (getUsername().equals("Beta")) {
			ActionContext.getContext().getSession().put("user", getUsername());
			System.out.print(getUsername());
			return SUCCESS;
		} else {
			return ERROR;
		}

	}

}

接下來須要配置stuts.xml文件,該文件的最大做用就是配置Action和請求之間的對應關係,並配置邏輯視圖名和物理視圖資源之間的關係。app

<?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>
	<!-- 指定全局國際化資源文件 -->
	<constant name="struts.custom.i18n.resources" value="mess" />
	<!-- 指定國際化編碼字符集 -->
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<package name="no-default" extends="struts-default">
	<action name="login" class="ntci.cloud.openstack.action.Demo">
<!—定義了三個邏輯視圖和物理視圖之間的映射 -->
		<result name="input">/login.jsp</result>
		<result name="error">/error.jsp</result>
		<result name="success">/welcome.jsp</result>
	</action>
	</package>

它的整個業務流程以下圖所描述的:框架

1.        在web.xml中定義核心的Filter來攔截用戶的請求;jsp

2.        在struts.xml中查找匹配的Action實例,並調用該Action的業務邏輯方法,上圖中若是用戶請求url爲login.action,則使用ntci.cloud.openstack.action.Demo來處理;工具

3.        當Action處理用戶請求完畢後,一般會返回一個處理結果,一般咱們稱之爲邏輯視圖名,這個邏輯視圖和物理視圖進行關係映射;

4.        Action將數據傳給視圖資源。




Struts 2常量配置

Struts2中有一些常量配置:

struts.i18n.encoding:指定web應用的指定編碼集。該常量的默認配置是UTF-8,對於獲取中文請求參數,應該將常量設置爲GBK或者GBK2312

struts.devMode:該常量設置Struts2應用是否使用開發模式

Struts 2默認會加載類加載路徑下的struts.xml、struts-default.xml、struts-plugin.xml三類文件,其中struts.xml是開發者定義的默認配置文件,struts-default.xml是struts 2框架自帶的配置文件,而struts-plugin.xml則是Struts     2插件的默認配置文件。除了以上三個文件,咱們也能夠在struts.properties、web.xml文件中配置struts常量。在struts.xml文件中,在根目錄下添加:

<constantname="struts.i18n.encoding" value="UTF-8" />

在web.xml文件filter目錄下,添加

<init-param>
         <param-name> struts.i18n.encoding</param-name>
         <param-value> UTF-8</param-value>
</init-param>

爲了不struts.xml過於龐大,咱們能夠將一個struts.xml配置文件分解爲多個配置文件,而後在struts.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>
	<!—經過include元素導入其它配置文件-->
	<include file=」struts-part1.xml」/>
</struts>

Action類

Action類中的屬性,不只能夠用於封裝請求參數,也能夠封裝處理結果,Action類並不會對此進行區分。若是請求參數中包含了username屬性,則系統會調用Action類中username的setter方法,經過這種方法,username參數就能夠傳給Action實例。

Struts 2提供了一個Action接口,這個接口提供了Struts2的Action類應該事先的規範,下面是Action接口的代碼:

public interface Action{
public static final java.lang.String SUCCESS = "success"; 
public static final java.lang.String NONE = "none"; 
public static final java.lang.String ERROR = "error"; 
public static final java.lang.String INPUT = "input"; 
public static final java.lang.String LOGIN = "login"; 
public abstract java.lang.String execute() throws Exception;
}

Struts 2爲Action接口提供了一個實現類ActionSupport,爲了方便開發,該類裏面提供了不少默認方法,包括數據校驗的方法、國際化信息的方法等。

相關文章
相關標籤/搜索