∪∩deniable Design

          個(gè)人JAVA版GAE(google app engine),struts2+jpa+jQuery開(kāi)發(fā),互相交流 http://iunbug.appspot.com/
          Struts 2.0 筆記
          2008 08 21

          一.標(biāo)準(zhǔn)Action的編寫(xiě)
              1.將action描述為ActionSupport的子類(lèi),用于實(shí)現(xiàn)execut的缺省方法
              2.自定義Action的返回值(默認(rèn)仍使用的返回值是:SUCCESS,ERROR,INPUT,LOGIN,NONE),
                  (1)重新編寫(xiě)映射路徑
                  (2)以http訪(fǎng)問(wèn)地址的區(qū)別Action的使用方法
          二.Action獲取頁(yè)面提交信息(兩種方法)
              1.將頁(yè)面的提交信息直接封裝在A(yíng)ction的控制器中
              2.便用標(biāo)準(zhǔn)的POJO類(lèi)進(jìn)行頁(yè)面數(shù)據(jù)的封裝.(必須有無(wú)參的構(gòu)造方法,否則無(wú)法生成action實(shí)例)[推薦]
          三.獲取Servlet API中的一些對(duì)象
              1.非IoC方式
              (1)HttpServletRequest request = ServletActionContext.getRequest();
              (2)Http response = ServletActionContext.getResponse();
              (3)HttpSession session = ServletActionContext.getSession()
              2.IoC方法(使用ActionContext對(duì)象獲取Servlet API對(duì)象)
                  使用接口:
                  (1)SessionAware
                  (2)ServletRequestAware
                  (3)ServletResponseAware

          src/struts.xml
           1<?xml version="1.0" encoding="GBK"?>
           2<!DOCTYPE struts PUBLIC
           3         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
           4         "http://struts.apache.org/dtds/struts-2.0.dtd">
           5<struts>
           6    <include file="struts-default.xml" /><!-- 使用缺省的struts的配置文件 -->
           7
           8    <!-- 包空間 ActionDemo 繼承 struts-default -->
           9    <package name="ActionDemo" extends="struts-default">
          10
          11        <!-- 映射名name="HelloAction" ,使用com.Action.HelloAction來(lái)實(shí)現(xiàn) -->
          12        <action name="HelloAction" class="com.Action.HelloAction">
          13            <result>/HelloAction.jsp</result><!-- 轉(zhuǎn)到的頁(yè)面為HelloAction.jsp-->
          14        </action>
          15
          16        <!--
          17            1. method="aliasAction"對(duì)應(yīng) HelloAction.java 中的aliasAction()方法
          18            2.訪(fǎng)問(wèn)AliasHelloWord Action方法:在地址欄中輸入:
          19            (1)http://localhost:8080/Action/aliasAction.action
          20            (2)http://localhost:8080/Action/HelloAction!aliasAction.action
          21        -->
          22        <action name="AliasHelloWord" class="com.Action.HelloAction"
          23            method="aliasAction">
          24            <result>/HelloAction.jsp</result>
          25        </action>
          26
          27        <!-- 映射名name="Login" 與 Login.jsp 中的 action="Login" 對(duì)應(yīng),使用com.Action.LoginAction來(lái)實(shí)現(xiàn) -->
          28        <action name="Login" class="com.Action.LoginAction">
          29            <result>/Hello.jsp</result>
          30        </action>
          31
          32        <!-- 映射名name="Loginx" 與 Loginx.jsp 中的 action="Login" 對(duì)應(yīng),使用com.Action.LoginActionx來(lái)實(shí)現(xiàn) -->
          33        <action name="Loginx" class="com.Action.LoginActionx">
          34            <result>/Hello.jsp</result>
          35        </action>
          36    </package>
          37</struts>
          38
          39

          WebRoot/WEB-INF/web.xml
           1<?xml version="1.0" encoding="UTF-8"?>
           2<web-app id="WebApp_ID" version="2.4"
           3    xmlns="http://java.sun.com/xml/ns/j2ee"
           4    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           5    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
           6    <display-name>Struts2Hello</display-name>
           7    <filter>
           8        <filter-name>struts2</filter-name>
           9        <filter-class>
          10            org.apache.struts2.dispatcher.FilterDispatcher
          11        </filter-class><!-- 以過(guò)慮器的形式出現(xiàn) -->
          12    </filter>
          13    <filter-mapping>
          14        <filter-name>struts2</filter-name>
          15        <url-pattern>/*</url-pattern><!-- 過(guò)慮所有內(nèi)容 -->
          16    </filter-mapping>
          17    <welcome-file-list>
          18        <welcome-file>index.html</welcome-file>
          19        <welcome-file>index.htm</welcome-file>
          20        <welcome-file>index.jsp</welcome-file>
          21        <welcome-file>default.html</welcome-file>
          22        <welcome-file>default.htm</welcome-file>
          23        <welcome-file>default.jsp</welcome-file>
          24    </welcome-file-list>
          25</web-app>
          26

          WebRoot/Hello.jsp
           1<%@page contentType="text/html;charset=GBK"%>
           2<%@taglib prefix="s" uri="/struts-tags"%>
           3<html>
           4    <head>
           5        <title>HelloAction</title>
           6    </head>
           7    <body>
           8
           9        <h2>
          10            <s:property value="msg" />
          11        </h2>
          12        ${test}<br>
          13        ${nameA}<br>
          14        ${nameB}<br>
          15    </body>
          16</html>

          WebRoot/HelloAction.jsp
           1<%@page contentType="text/html;charset=GBK"%>
           2<%@taglib prefix="s" uri="/struts-tags"%>
           3<html>
           4    <head>
           5        <title>HelloAction</title>
           6    </head>
           7    <body>
           8
           9        <h2>
          10            <s:property value="message" />
          11        </h2>
          12    </body>
          13</html>

          WebRoot/Login.jsp
           1<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
           2<%
           3String path = request.getContextPath();
           4String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
           5
          %>
           6<%@taglib prefix="s" uri="/struts-tags"%>
           7
           8<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
           9<html>
          10  <head>
          11
          12    <title>Login page</title>
          13  </head>
          14  
          15  <body>
          16    <s:form action="Login" method="POST">
          17    <s:textfield name="name" label="User name"/>
          18    <s:password name="pass" label="Password"/>
          19    <s:submit value="Submit"></s:submit>
          20    </s:form>
          21  </body>
          22</html>
          23

          WebRoot/Loginx.jsp
           1<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
           2<%
           3    String path = request.getContextPath();
           4    String basePath = request.getScheme() + "://"
           5            + request.getServerName() + ":" + request.getServerPort()
           6            + path + "/";
           7
          %>
           8<%@taglib prefix="s" uri="/struts-tags"%>
           9
          10<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          11<html>
          12    <head>
          13
          14        <title>Login page</title>
          15    </head>
          16
          17    <body>
          18        <!-- action="Loginx"中與struts.xml中映射名name="Loginx"相同, name="user.name"表示使用com.Action.LoginActionx類(lèi)的user對(duì)象的name屬性-->
          19        <s:form action="Loginx" method="POST">
          20            <s:textfield name="user.name" label="User name" />
          21            <s:password name="user.pass" label="Password" />
          22            <s:submit value="Submit"></s:submit>
          23        </s:form>
          24    </body>
          25</html>
          26

          src/com.Action/HelloAction.java
           1package com.Action;
           2
           3import java.text.DateFormat;
           4import java.util.Date;
           5
           6import com.opensymphony.xwork2.ActionSupport;
           7
           8/**
           9 * @author ∪∩BUG E-mail: tidelgl@163.com
          10 * @version Aug 20, 2008 1:45:28 PM 類(lèi)說(shuō)明
          11 */

          12@SuppressWarnings("serial")
          13public class HelloAction extends ActionSupport {
          14
          15    private String message;
          16
          17    // getMessage()方法對(duì)應(yīng)的是頁(yè)面的顯示
          18    public String getMessage()
          19    {
          20        return message;
          21    }

          22    
          23    //缺省的方法,將被默認(rèn)執(zhí)行
          24    public String execute(){
          25        
          26        message = "HelloAction, Now is" + DateFormat.getInstance().format(new Date());
          27        
          28        //SUCCESS返回的是String類(lèi)型,
          29        System.out.println(SUCCESS);
          30        return SUCCESS;
          31    }

          32    
          33    //自定義的業(yè)務(wù)方法
          34    public String aliasAction(){
          35        message ="自定義的Action方法";
          36        return SUCCESS;
          37    }

          38}

          39

          src/com.Action/LoginAction.java
           1package com.Action;
           2
           3import com.opensymphony.xwork2.ActionSupport;
           4
           5/**
           6 * @author ∪∩BUG E-mail: tidelgl@163.com
           7 * @version Aug 21, 2008 11:31:00 PM 類(lèi)說(shuō)明
           8 */

           9public class LoginAction extends ActionSupport {
          10    @Override
          11    public String execute() throws Exception {
          12        if("admin".equals(this.name)&"123".equals(this.pass)){
          13            this.msg="歡迎" + this.name;
          14    
          15        }

          16        else {
          17            this.msg="非法輸入!";
          18        }
              
          19        return SUCCESS;
          20    }

          21
          22    private String name;
          23    private String pass;
          24    private String msg;
          25
          26    // 默認(rèn)構(gòu)造方法是必須的.否則無(wú)法生成action實(shí)例
          27    public LoginAction() {
          28
          29    }

          30
          31    public LoginAction(String name, String pass, String msg) {
          32        super();
          33        this.name = name;
          34        this.pass = pass;
          35        this.msg = msg;
          36    }

          37
          38    public String getName() {
          39        return name;
          40    }

          41
          42    public void setName(String name) {
          43        this.name = name;
          44    }

          45
          46    public String getPass() {
          47        return pass;
          48    }

          49
          50    public void setPass(String pass) {
          51        this.pass = pass;
          52    }

          53
          54    public String getMsg() {
          55        return msg;
          56    }

          57
          58    public void setMsg(String msg) {
          59        this.msg = msg;
          60    }

          61
          62}

          63

          src/com.Action/LoginActionx.java
           1package com.Action;
           2
           3import java.util.Map;
           4
           5import javax.servlet.http.HttpServletRequest;
           6import javax.servlet.http.HttpServletResponse;
           7
           8import org.apache.struts2.interceptor.ServletRequestAware;
           9import org.apache.struts2.interceptor.ServletResponseAware;
          10import org.apache.struts2.interceptor.SessionAware;
          11
          12import com.opensymphony.xwork2.ActionContext;
          13import com.opensymphony.xwork2.ActionSupport;
          14import com.pojo.User;
          15
          16/**
          17 * @author ∪∩BUG E-mail: tidelgl@163.com
          18 * @version Aug 21, 2008 11:31:00 PM 類(lèi)說(shuō)明
          19 */

          20
          21//IoC方法獲取Servlet API(implements是一個(gè)類(lèi)實(shí)現(xiàn)一個(gè)接口用的關(guān)鍵字, 他是用來(lái)實(shí)現(xiàn)接口中定義的抽象方法)
          22public class LoginActionx extends ActionSupport implements ServletRequestAware,ServletResponseAware,SessionAware{
          23    private String msg;
          24    private User user;
          25    private HttpServletRequest request;
          26    private HttpServletResponse response;
          27    private Map session;
          28    
          29    @Override
          30    public String execute() throws Exception {
          31        if("admin".equals(user.getName())&"123".equals(user.getPass())){
          32            this.msg="歡迎" + user.getName()+"對(duì)象化的提交";
          33    
          34        }

          35        else {
          36            this.msg="非法輸入!";
          37        }
              
          38        //ServletActionContext.getRequest().setAttribute("test","Just Test!" );//非IoC方法獲取Servlet API
          39        
          40        //獲取session
          41        Map map = ActionContext.getContext().getSession();
          42        map.put("nameA""name1");
          43        session.put("nameB""name2");
          44        
          45        
          46        return SUCCESS;
          47    }

          48
          49    // 默認(rèn)構(gòu)造方法是必須的.否則無(wú)法生成action實(shí)例
          50    public LoginActionx() {
          51
          52    }

          53
          54    public String getMsg() {
          55        return msg;
          56    }

          57
          58    public void setMsg(String msg) {
          59        this.msg = msg;
          60    }

          61
          62    public User getUser() {
          63        return user;
          64    }

          65
          66    public void setUser(User user) {
          67        this.user = user;
          68    }

          69
          70    //IoC方法獲取Servlet API
          71    //實(shí)現(xiàn)接口中定義的抽象方法setServletRequest(HttpServletRequest arg0)
          72    public void setServletRequest(HttpServletRequest request) {
          73        this.request=request;
          74        request.setAttribute("test","Just Test!" );
          75        
          76    }

          77
          78    //實(shí)現(xiàn)接口中定義的抽象方法setServletResponse(HttpServletResponse arg0)
          79    public void setServletResponse(HttpServletResponse response) {
          80        this.response=response;
          81        
          82    }

          83    
          84    //實(shí)現(xiàn)接口中定義的抽象方法setSession(Map arg0)
          85    public void setSession(Map e) {
          86        this.session=e;
          87        
          88    }

          89
          90
          91}

          92

          src/com.pojo/User.java
           1package com.pojo;
           2
           3import java.io.Serializable;
           4
           5/**
           6 * @author ∪∩BUG E-mail: tidelgl@163.com
           7 * @version Aug 22, 2008 11:01:56 AM 類(lèi)說(shuō)明
           8 */

           9public class User implements Serializable {
          10    private String name;
          11    private String pass;
          12
          13    public User(String name, String pass) {
          14        super();
          15        this.name = name;
          16        this.pass = pass;
          17    }

          18
          19    public User() {
          20
          21    }

          22
          23    public String getName() {
          24        return name;
          25    }

          26
          27    public void setName(String name) {
          28        this.name = name;
          29    }

          30
          31    public String getPass() {
          32        return pass;
          33    }

          34
          35    public void setPass(String pass) {
          36        this.pass = pass;
          37    }

          38}

          39

          評(píng)論

          # re: struts2.0學(xué)習(xí)筆記(三)--Action  回復(fù)  更多評(píng)論   

          2008-08-22 22:08 by ∪∩BUG
          Action有些難學(xué),筆記有些難寫(xiě).萬(wàn)事開(kāi)頭難,萬(wàn)事開(kāi)頭難.

          # re: struts2.0學(xué)習(xí)筆記(三)--Action  回復(fù)  更多評(píng)論   

          2008-09-02 10:33 by
          老大,能講講struts.xml
          中package是干啥使 的嗎,一直沒(méi)想通

          # re: struts2.0學(xué)習(xí)筆記(三)--Action  回復(fù)  更多評(píng)論   

          2008-09-02 11:35 by ∪∩BUG

          這個(gè)其實(shí)你學(xué)習(xí)了XML會(huì)好理解些的,這里我給你找了篇有例子的文章:


          Struts2中struts.xml的Action配置詳解
                  使用package可以將邏輯上相關(guān)的一組Action,Result,Interceptor等組件分為一組,Package有些像對(duì)象,可以繼承其他的Package,也可以被其他package繼承,甚至可以定義抽象的Package。

          Package的可以使用的屬性:

          屬性

          是否必須

          說(shuō)明

          name Package的表示,為了讓其他的package引用
          extends 從哪個(gè)package繼承行為
          namespace 參考Namespace配置說(shuō)明
          abstract
          定義這個(gè)package為抽象的,這個(gè)package中不需要定義action


              由于struts.xml文件是自上而下解析的,所以被繼承的package要放在繼承package的前邊。Namespace將action分成邏輯上的不同模塊,每一個(gè)模塊有自己獨(dú)立的前綴。使用namespace可以有效的避免action重名的沖突,例如每一個(gè)package都可以有自己獨(dú)立的Menu和Help action,但是事項(xiàng)方式各有不同。Struts2標(biāo)簽帶有namespace選項(xiàng),可以根據(jù)namespace的不同向服務(wù)器提交不同的package的action的請(qǐng)求。
                 “/”表示根namespace,所有直接在應(yīng)用程序上下文環(huán)境下的請(qǐng)求(Context)都在這個(gè)package中查找。
                 “”表示默認(rèn)namespace,當(dāng)所有的namespace中都找不到的時(shí)候就在這個(gè)namespace中尋找。

                 例如,有如下配置:
          CODE:
          <package name="default">
               <action name="foo" class="mypackage.simpleAction>
                        <result name="success" type="dispatcher">
                                greeting.jsp
                        </result>
              </action>
              <action name="bar" class="mypackage.simpleAction">
                 <result name="success" type="dispatcher">bar1.jsp</result>
              </action>
          </package>

          <package name="mypackage1" namespace="/">
              <action name="moo" class="mypackage.simpleAction">
                  <result name="success" type="dispatcher">moo.jsp</result>
              </action>
          </package>

          <package name="mypackage2" namespace="/barspace">
              <action name="bar" class="mypackage.simpleAction">
                 <result name="success" type="dispatcher">bar2.jsp</result>
              </action>
          </package>1 如果請(qǐng)求為/barspace/bar.action
          查找namespace:/barspace,如果找到bar則執(zhí)行對(duì)應(yīng)的action,否則將會(huì)查找默認(rèn)的namespace,在上面的例子中,在barspace中存在名字為bar的action,所以這個(gè)action將會(huì)被執(zhí)行,如果返回結(jié)果為success,則畫(huà)面將定為到bar2.jsp

          2 如果請(qǐng)求為/moo.action
          根namespace('/')被查找,如果moo action存在則執(zhí)行,否則查詢(xún)默認(rèn)的namespace,上面的例子中,根namespace中存在moo action,所以該action被調(diào)用,返回success的情況下畫(huà)面將定位到moo.jsp、

          Action配置

                在struts2框架中每一個(gè)Action是一個(gè)工作單元。Action負(fù)責(zé)將一個(gè)請(qǐng)求對(duì)應(yīng)到一個(gè)Action處理上去,每當(dāng)一個(gè)Action類(lèi)匹配一個(gè)請(qǐng)求的時(shí)候,這個(gè)Action類(lèi)就會(huì)被Struts2框架調(diào)用。

                一個(gè)Action配置示例:
          CODE:
          <action name="Logon" class="tutorial.Logon">
            <result type="redirect-action">Menu</result>
            <result name="input">/tutorial/Logon.jsp</result>
          </action>每一個(gè)Action可以配置多個(gè)result,多個(gè)ExceptionHandler,多個(gè)Intercepter,但是只能有一個(gè)name,這個(gè)name和package的namespace來(lái)唯一區(qū)別一個(gè)Action。

                每當(dāng)struts2框架接受到一個(gè)請(qǐng)求的時(shí)候,它會(huì)去掉Host,Application和后綴等信息,得到Action的名字,例如如下的請(qǐng)求將得到Welcome這個(gè)Action。 http://www.planetstruts.org/struts2-mailreader/Welcome.action

                在一個(gè)Struts2應(yīng)用程序中,一個(gè)指向Action的鏈接通常有Struts Tag產(chǎn)生,這個(gè)Tag只需要指定Action的名字,Struts框架會(huì)自動(dòng)添加諸如后綴等的擴(kuò)展,例如:
          CODE:
          <s:form action="Hello">
              <s:textfield label="Please enter your name" name="name"/>
              <s:submit/>
          </s:form將產(chǎn)生一個(gè)如下的鏈接的請(qǐng)求:
          http://Hostname:post/appname/Hello.action
          在定義Action的名字的時(shí)候不要使用.和/,最好使用英文字母和下劃線(xiàn)。

          Action中的方法

          Action的默認(rèn)入口方法由xwork2的Action接口來(lái)定義,代碼清單為:
          CODE:
          public interface Action {

              public String execute() throws Exception;

          }有些時(shí)候我們想指定一個(gè)Action的多個(gè)方法,我們可以做如下兩步:
          1  建立一些execute簽名相同的方法,例如:
          Public String forward() throws Exception

          2  在A(yíng)ction配置的時(shí)候使用method屬性,例如:
          <action name="delete" class="example.CrudAction" method="delete">

          Action中的方法通配符

              有些時(shí)候?qū)ction中方法的調(diào)用滿(mǎn)足一定的規(guī)律,例如edit Action對(duì)應(yīng)edit方法,delete Action對(duì)應(yīng) delete方法,這個(gè)時(shí)候我們可以使用方法通配符,例如:
          <action name="*Crud" class="example.Crud" method="{1}"> 這時(shí),editCrud Action的引用將調(diào)用edit方法,同理,deleteCrud Action的引用將調(diào)用delete 方法。

              另外一種比較常用的方式是使用下劃線(xiàn)分割,例如:
          <action name="Crud_*" class="example.Crud" method="{1}">
          這樣當(dāng)遇到如下調(diào)用的時(shí)候可以找到對(duì)應(yīng)的方法。
          "action=Crud_input"  =>  input方法
          "action=Crud_delete" =>  delete方法

          通配符和普通的配置具有相同的地位,可以結(jié)合使用框架的所有其他功能。

          默認(rèn)的Action

          當(dāng)我們沒(méi)有指定Action的class屬性的時(shí)候,例如:
          <action name="Hello">
          我們默認(rèn)使用com.opensymphony.xwork.ActionSupport
          ActionSupport有兩個(gè)方法input和execute,每個(gè)方法都是簡(jiǎn)單的返回SUCCESS。

          通常情況下,請(qǐng)求的Action不存在的情況下,Struts2框架會(huì)返回一個(gè)Error畫(huà)面:“404 - Page not found”,有些時(shí)候或許我們不想出現(xiàn)一個(gè)控制之外的錯(cuò)誤畫(huà)面,我們可以指定一個(gè)默認(rèn)的Action,在請(qǐng)求的Action不存在的情況下,調(diào)用默認(rèn)的Action,通過(guò)如下配置可以達(dá)到要求:
          CODE:
          <package name="Hello" extends="action-default">
          <default-action-ref name="UnderConstruction">
          <action name="UnderConstruction">
            <result>/UnderConstruction.jsp</result>
          </action>默認(rèn)通配符
          CODE:
          <action name="*" >
            <result>/{1}.jsp</result>
          </action>每個(gè)Action將會(huì)被映射到以自己名字命名的JSP上。

          struts2中動(dòng)態(tài)方法的調(diào)用

          可以采用DMI(Dynamic Method Invocation,動(dòng)態(tài)方法)調(diào)用來(lái)處理這種請(qǐng)求,動(dòng)態(tài)方法調(diào)用是指表單元素的action并不是直接等于某個(gè)Action的名字,而是以如下形式來(lái)指定Form的action屬性:
           1<!-- action屬性為actionName!methodName的形式 --> 
           2action="ActionName!methodName.action"
           3 
           4<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
           5<struts>
           6<!--include節(jié)點(diǎn)是struts2中組件化的方式 可以將每個(gè)功能模塊獨(dú)立到一個(gè)xml配置文件中 然后用include節(jié)點(diǎn)引用 -->
           7<include file="struts-default.xml"></include>
           8<!--package提供了將多個(gè)Action組織為一個(gè)模塊的方式
           9        package的名字必須是唯一的 package可以擴(kuò)展 當(dāng)一個(gè)package擴(kuò)展自
          10        另一個(gè)package時(shí)該package會(huì)在本身配置的基礎(chǔ)上加入擴(kuò)展的package
          11        的配置 父package必須在子package前配置 
          12        name:package名稱(chēng)
          13        extends:繼承的父package名稱(chēng)
          14        abstract:設(shè)置package的屬性為抽象的 抽象的package不能定義action 值true:false
          15        namespace:定義package命名空間 該命名空間影響到url的地址,例如此命名空間為/test那么訪(fǎng)問(wèn)是的地址為http://localhost:8080/struts2/test/XX.action
          16     -->
          17<package name="com.kay.struts2"extends="struts-default"namespace="/test">
          18<interceptors>
          19<!--定義攔截器 
          20                name:攔截器名稱(chēng)
          21                class:攔截器類(lèi)路徑
          22             -->
          23<interceptor name="timer"class="com.kay.timer"></interceptor>
          24<interceptor name="logger"class="com.kay.logger"></interceptor>
          25<!--定義攔截器棧 -->
          26<interceptor-stack name="mystack">
          27<interceptor-ref name="timer"></interceptor-ref>
          28<interceptor-ref name="logger"></interceptor-ref>
          29</interceptor-stack>
          30</interceptors>
          31<!--定義默認(rèn)的攔截器 每個(gè)Action都會(huì)自動(dòng)引用
          32         如果Action中引用了其它的攔截器 默認(rèn)的攔截器將無(wú)效 -->
          33<default-interceptor-ref name="mystack"></default-interceptor-ref>
          34<!--全局results配置 -->
          35<global-results>
          36<result name="input">/error.jsp</result>
          37</global-results>
          38<!--Action配置 一個(gè)Action可以被多次映射(只要action配置中的name不同)
          39             name:action名稱(chēng)
          40             class: 對(duì)應(yīng)的類(lèi)的路徑
          41             method: 調(diào)用Action中的方法名
          42        -->
          43<action name="hello"class="com.kay.struts2.Action.LoginAction">
          44<!--引用攔截器
          45                name:攔截器名稱(chēng)或攔截器棧名稱(chēng)
          46             -->
          47<interceptor-ref name="timer"></interceptor-ref>
          48<!--節(jié)點(diǎn)配置
          49                name : result名稱(chēng) 和Action中返回的值相同
          50                type : result類(lèi)型 不寫(xiě)則選用superpackage的type struts-default.xml中的默認(rèn)為dispatcher
          51             -->
          52<result name="success"type="dispatcher">/talk.jsp</result>
          53<!--參數(shù)設(shè)置 
          54             name:對(duì)應(yīng)Action中的get/set方法 
          55         -->
          56<param name="url">http://www.sina.com</param>
          57</action>
          58</package>
          59</struts>

          # re: struts2.0學(xué)習(xí)筆記(三)--Action  回復(fù)  更多評(píng)論   

          2008-09-03 11:25 by
          多謝博主,看來(lái)還得多實(shí)踐啊

          # re: struts2.0學(xué)習(xí)筆記(三)--Action  回復(fù)  更多評(píng)論   

          2008-09-05 16:34 by qin
          看來(lái)你挺歷害的!!
          主站蜘蛛池模板: 浮山县| 镇安县| 榆中县| 南丰县| 乌恰县| 闵行区| 青冈县| 高安市| 偃师市| 庆元县| 辽阳县| 土默特右旗| 锡林浩特市| 饶河县| 绩溪县| 离岛区| 灵川县| 宁夏| 哈尔滨市| 莫力| 临颍县| 盘锦市| 梁平县| 丰台区| 蓬莱市| 云阳县| 尉犁县| 丰镇市| 滁州市| 阳江市| 江达县| 两当县| 城固县| 方山县| 彰化县| 都兰县| 双牌县| 奉贤区| 行唐县| 库尔勒市| 旬阳县|