Struts2學習(二):第一個Action

前面我們已經把Struts2的運行環境搭建起來了,下面我們開始創建我們的第一個Action,還是按照Max的教程來,我新創建瞭如下幾個文件:

sayHello.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Say Hello</title>

</head>

<body>

    <h3>Say "Hello" to: </h3>

    Address:<input type="text" name="address"/>

    <s:form action="HelloWorld">

        Name: <s:textfield name="name"/>

        <s:submit></s:submit>

    </s:form>

</body>

</html>

HelloWorld.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

    <head>

        <title>Hello</title>

    </head>

    <body>

        <h3><s:property value="name" /></h3>

    </body>

</html>

  1. HelloWorld.java  
  2.  
  3. package tutorial;  
  4.  
  5. import com.opensymphony.xwork2.ActionSupport;  
  6.  
  7.  public class HelloWorld extends ActionSupport {  
  8.  
  9.     private String name;  
  10.  
  11.   public String getName() {  
  12.  
  13.        return name;  
  14.  
  15.     }  
  16.  
  17.      public void setName(String name) {  
  18.  
  19.        this.name = name;  
  20.  
  21.     }  
  22.  
  23.       public String execute(){  
  24.  
  25.     name="Hello "+name+"!";  
  26.  
  27.     //System.out.println(name);  
  28.  
  29.     return SUCCESS;    
  30.  
  31.     }  
  32.  
  33. }  
  34.  

這幾個文件之間的流程如下圖所示:

 


首先sayHello.jsp向服務器發送請求,然後根據我們web.xml文件的配置,這個請求被交給了FilterDispatcher這個類來進行處理,FilterDispatcher會根據我們struts.xml文件的中的配置信息來對這個請求分流,讓它進入某個指定的action(本例中是HelloWorld.java),在處理完請求之後,再將頁面轉向HelloWorld.jsp(這個也是在struts.xml中指定的)。爲了保證上述流程的順利執行,現在struts.xml文件的內容修改如下:

<!DOCTYPE struts PUBLIC   

     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   

     "http://struts.apache.org/dtds/struts-2.0.dtd">  

<struts>

    <!--  this is a test

    <include file="struts-default.xml"></include> -->

    <package name="tutorial" extends="struts-default">

       <action name="HelloWorld" class="tutorial.HelloWorld">

           <result>HelloWorld.jsp</result>

       </action>

    </package>

</struts>  

注意,這裏action的name屬性和sayHello.jsp中的action屬性的值是一樣的,實際上在FilterDispatcher中就是根據這兩個值對request進行分流的,具體過程如下:

1.  我們寫出這個處理這個請求的url,本例是http://localhost:8888/Struts/HelloWorld

2.  取出http://localhost:8888/Struts/之後的字符串得到了HelloWorld

3.  在struts.xml文件中查找name屬性爲HelloWorld的action,把request交給它處理,默認情況下首先執行它裏面的execute()方法

4.  請求處理完畢之後進入HelloWorld.jsp頁面,配置在<result>標籤裏面

當然上述流程是最簡單的一個過程,還沒有涉及到命名空間、請求處理完畢之後要根據執

行結果跳轉到不同的頁面等一些複雜的問題,後面我會把我的學習心得貼出來。

    注:上述request的分流流程是我根據struts1裏面的機制推測的,在struts1裏面這個過程由ActionServlet負責,它會調用RequestProcessor裏面的一個方法對訪問路徑進行處理,這個在我博客裏面的《Struts工作流程》中可以找到,至於這個FilterDispatcher,因爲看不到源碼只能推測一下了,^_^。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章