Struts2的result中各種type類型以及配置文件的一些細節


Struts2支持的不同類型的返回結果為:
Chain Result-->type="chain"用來處理Action鏈
Dispatcher Result -->type="dispatcher"用來轉向頁面,通常處理JSPFreeMarker
Result -->type="freemarker"處理FreeMarker模板HttpHeader 
Result -->type="httpheader"用來控制特殊的Http行為Redirect 
Result -->type="redirect"重定向到一個URLRedirect Action 
Result -->type="redirectAction"重定向到一個ActionStream 
Result -->type="stream"向瀏覽器發送InputSream對象,通常用來處理文件下載Velocity 
Result -->type="velocity"處理Velocity模板XLST Result -->type="xslt"處理XML/XLST模板PlainText 
Result -->type="plainText"顯示原始文件內容,例如文件源代碼另外第三方的result類型還包括JasperReports Plugin,專門用來處理JasperReport類型的報表輸出。

dispatcher:用於頁面轉發,頁面跳轉過程一直是同一個線程,Action中的數據一直保存在。


redirect:可用於返回一個頁面、一個action、鏈接到一個網址。
       缺點:redirect把一個http返回碼(SUCCESS)以及返回的頁面位置一起重新發給web服務器,容納后由web服務器產生一個新的HTTP請求,就會產生一個新的線程,保存在原來Action執行的線程中的數據就無法訪問。
所以,result需要包含Action的數據,那么redirect不是一個可行的辦法。因為新的HTTP請求時在Servlet容器的新的線程中處理的,ActionContext中的所有狀態都不會存在。


chain:功能與redirect的action轉發類似,不過與redirectaction轉發功能不同的是它可以將Action中的數據一直保存在同一個HTTP請求中。

關於struts2的其他事兒

 

===============
   <package>
===============

struts.xml 中的package的name可以隨意定義,只做繼承時使用。

===============
  <constent>
===============

struts.xml 中
用<constent name="" value=""/>
來改變default.proerties 中key對應的值

==============================================
覆蓋默認的資源文件 -- default.properties
==============================================

也可以在clasess(/src)下建立struts.properties的方式,覆蓋默認的配置文件default.proerties
內容如:
struts.i18n.encoding=gbk      設置字符集
struts.action.extension=do    設置請求后綴名
struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml     Struts2自動加載的配置文件


==============
    抽象包
==============
<package name="..." abstract="true">
表示該包中不能有action定義,只能通過包來繼承來定義

=============
  命名空間
=============
<package name="..." namespace="">
將不同的應用分割開
如果不配置,表示當前包在一個默認的命名空間里

namespace="/hello"
請求路徑就改變為 /hello/register

需要更改表單路徑 並且一定要手工加.action
<s:form action="/hello/register.action">

尋找方式,如果namespace為默認,而表單路徑為/hello/register.action
當struts沒有找到該命名空間是,自動到默認的命名空間找

=============================
   <include>  模塊化的配置 
=============================

<include file="struts_1.xml"></include>
<include file="struts_2.xml"></include>

struts_1.xml和struts_2.xml都是標准的strust的xml配置文件
include后,struts會在啟動后將struts_1.xml和struts_2.xml的配置信息一同加載到內存中。


===============
  Struts2 MVC
===============
FilterDispatcher ----- 核心控制器

每個action ------- 業務控制器 
--------- 調用業務邏輯組件 ---- 調用DAO ---- 數據庫交互

 

 

=================
    分模塊開發
=================

src下建立
struts1.xml
struts2.xml

不同的開發人員,只需要寫自己的xml配置文件
只需要加入到struts.xml中
<include file="struts1.xml"/>
<include file="struts2.xml"/>

----------------
struts1.xml
xml聲明,DTD信息...  結構與struts.xml相同
<struts>
 <package name="" ...>
  ...
 ...
...

----------------
struts2.xml
xml聲明,DTD信息...  結構與struts.xml相同
<struts>
 <package name="" ...>
  ...
 ...
...

 

================
   模型驅動
================

**屬性驅動**:表單的字段都作為Action的屬性存在

**模型驅動**:用一個JavaBean來裝載對象 類似於ActionForm


模型Bean
public class User {
 private String username;
 private String password;
 private String repassword;
 private int age;
 private Date date;

 // setter... getter...
}

### ValueStack ### --值棧

ModelDriven<T> 該接口使用的泛型,
  模型是什么類型那個的泛型就是什么類型
------ T getModel()

Action 需要實現 ModelDriven接口


public class RigesterAction extends ActionSupport 
 implements ModelDriven<User> {

 private User user = new User();
 public User getModel() {
  return user;
 }

 @Override
 public String execute() throws Exception {

  return SUCCESS;
 }
}

 

====================
   Preparable 接口
====================

Preparable接口中有一個void prepare() throws Exception方法,實現該接口的Action類,將在執行這個action所以方法之前執行prepare(),稱為action准備方法。

 

=========================
    顯示特定的出錯信息
=========================

<s:fielderror cssStyle="color:red">
 <s:param>username</s:param>
</s:fielderror>

去掉前面的“原點”
需要自己修改 fielderror.ftl模板
去掉前面的點代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM