1. 程式人生 > >框架總結之Struts2上

框架總結之Struts2上

ping 初始化 客戶 4.0 brush map 分組 head cat

一、Struts2的由來和介紹:

   傳統的Java Web應用程序是采用JSP+Servlet+Javabean來實現的,這種模式實現了最基本的MVC分層,使的程序結構分為幾層,有負責前臺展示的 JSP、負責流程邏輯控制的Servlet以及負責數據封裝的Javabean。但是這種結構仍然存在問題:如JSP頁面中需要使用符號嵌入很多的 Java代碼,造成頁面結構混亂,Servlet和Javabean負責了大量的跳轉和運算工作,耦合緊密,程序復用度低等等。

  因此產生了Struts框架來解決這個問題。

  什麽是Struts框架:

  Struts2框架中其實是把JSP+Servlet+Javabean這個簡易版的Mvc模式進行了升級。

  Struts 2框架由3個部分組成:StrutsPrepareAndExecuteFilter是核心控制器、業務控制器和用戶實現的業務邏輯組件。

Struts的MVC框架解讀:

M:負責封裝應用的狀態,並實現應用的功能。通常分為數據模型和業務邏輯模型,數據模型用來存放業務數據,比如訂單信息、用戶信息等;而業務邏輯模型包含應用的業務操作,比如訂單的添加或者修改等。

V:說白點就是把M的數據展示到頁面上給用戶看。

  C:表示控制層,在這個控制層中采用FilterDispatcher核心控制器來,該控制器作為一個Filter運行在Web應用中,它負責攔截所有的用戶請求,當 用戶請求到達時,該Filter會過濾用戶請求。如果用戶請求以action結尾,該請求將被轉入Struts 2框架處理。

  在Web.xml中配置控制器FilterDispatcher即可使用   

<filter>
<!-- 定義核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 定義核心Filter的實現類 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- StrutsPrepareAndExecuteFilter用來處理所有的HTTP請求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  

Struts2框架獲得了*.action請求後,將根據*.action請求的前面部分決定調用哪個業務邏輯組件,例如,對於login.action請求,Struts2調用名為login的Action來處理該請求。

  Struts2用於處理用戶請求的Action實例,並不是用戶實現的業務控制器,而是Action代理——因為用戶實現的業務控制器並沒有與Servlet API耦合,顯然無法處理用戶請求。而Struts2

架提供了系列攔截器,該系列攔截器負責將 HttpServletRequest請求中的請求參數解析出來,傳入到Action中,並回調Action的execute方法來處理用戶請求。

二.Struts2的工作流程 (原文:http://www.cnblogs.com/jy02444453/archive/2011/08/27/2155427.html)

技術分享

一個請求在Struts2框架中的處理大概分為以下幾個步驟
1 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
2 這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin)
3 接著FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action
4 如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy
5 ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類
6 ActionProxy創建一個ActionInvocation的實例。
7 ActionInvocation實例使用命名模式來調用,在調用Action的過程前後,涉及到相關攔截器(Intercepter)的調用。
8 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標簽。在這個過程中需要涉及到ActionMapper

在上述過程中所有的對象(Action,Results,Interceptors,等)都是通過ObjectFactory來創建的。

三.Hello,Struts2

技術分享

  Struts開發步驟:

  1. web項目,引入struts - jar

  2. web.xml中,引入struts的核心功能

  配置過濾器

  3. 開發action

  4. 配置action

  src/struts.xml

1. web項目struts2,引入struts2的jar包

 


包名 作用
commons-fileupload-x.y.z.jar 核心包:Struts的上傳和下載
commons-io-x.y.z.jar
commons-lang-x.y.jar 核心包:為java.lang包提供擴展
commons-logging-x.y.z.jar 核心包:Jakarta的通用日誌記錄包
commons-logging-api-x.y.jar 輔助包:Apache Commons包中的一個,包含了一些數據類型工具類,是java.lang.*的擴展。
freemarker-x.y.z.jar 核心包:FreeMarker是一個模板引擎,一個基於模板生成文本輸出的通用工具
javassist-.xy.z.GA
ognl-x.y.z.jar 核心包:支持ognl表達式
struts2-core-x.y.z.jar 核心包:struts的核心包
xwork-core.x.y.z.jar 核心包:xwork核心包

 2. web.xml中,引入struts的核心功能

  配置過濾器

     <filter>
	  <!-- 定義核心Filter的名字 -->
		<filter-name>struts2</filter-name>
		<!-- 定義核心Filter的實現類 -->
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<!-- StrutsPrepareAndExecuteFilter用來處理所有的HTTP請求 -->
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

  

3. 開發action

package huangrenchao.hellostruts2;

public class HelloStruts2Action {
    
	private String name;
	
	public String hello(){
		System.out.println("hello,struts");
		name = "黃仁超";
		return "success";
	}
}

  4. 在struts中配置action

<?xml version="1.0" encoding="GBK" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	
	<!-- 配置了一個包元素 -->
   	<package name="lee" extends="struts-default">
		<!-- 配置處理文件上傳的Action -->
		<action name="hello" class="huangrenchao.hellostruts2.HelloStruts2Action" method="hello">
			<result name="success" >/success.jsp</result>
		</action>
	</package>
</struts>

 5.寫一個success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

</head>

<body>
	hello.struts
</body>
</html>

  

 6.發布項目到tomcat中,然後在瀏覽器中運行

技術分享

框架總結之Struts2上