黑馬程序員_Struts2部分筆記

 

一.Struts2的開發環境和配置

1.     在MyEclipse中新建一個工程,在工程的src目錄中新建一個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>

    <!-- Add packages here -->

 

</struts>

2.     在WebRoot/WEB-INF/lib目錄中添加

struts2-core2-2.x.x.jar,

xwork.x.x.jar,

freemarker-2.3.x.jar,

commons-logging-1.1.x.jar,

commons-fileupload-1.2.1.jar

ognl-2.6.x.jar

至少這六個jar文件(可從http://struts.apache.org/download.cgi#struts2014下載struts-2.x.x-all.zip文件)

3.     配置web.xml文件,添加內容爲

<filter>

    <filter-name>struts2</filter-name>

     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

   </filter>

    <filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

現在struts2的環境配置已經完成了。

二.簡單的struts2程序

2.1.建立action

在src下建立一個包org.hwh.action,在包中建立一個java類Login

package org.hwh.struts2;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class Login extends ActionSupport

{

   private String name;

   private String pass;

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

   public String getPass() {

      return pass;

   }

   public void setPass(String pass) {

      this.pass = pass;

   }

   public String execute() throws Exception

   {

      if("123".equals(name)&&"hwh".equals(pass))

      {

        return SUCCESS;

      }

      else

        return "fail";

   }

}

 

程序說明:執行execute方法,返回success或fail

 

2.2.將此action配置到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>

<constant name="struts.action.extension" value="action"></constant>

    <package name="org.hwh.struts2" namespace="" extends="struts-default">

        <action name="login" class="org.hwh.struts2.Login">

        <result name="success">/ok.jsp</result>

        <result name="fail">/fail.jsp</result>

        </action>

       

    </package>

    <!-- Add packages here -->

 

</struts>

程序解釋:package節點中的name可以隨便起,但是多個package的name不能重複

namespace作爲訪問此action時的路徑,可以沒有也可以是空字符,extends爲繼承的package名。

Action節點中的name是訪問此action時的名字,class爲action的包名,默認爲ActionSupport,method默認執行execute方法。

Result節點中的name爲execute方法的返回值,根據name的值跳轉到不同頁面,默認爲success。

編寫hello.jsp,ok.jsp,fail..jsp頁面

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<html>

  <head>

    <title>-_-+</title>

  </head>

  <body>

  <form action="login" method="post">

   <input type="text" name="name" value="${name }"><br>

   <input type="password" name="pass" value="${pass }"><br>

   <input type="submit" value="ok">

  </form>

  </body>

</html>

 

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<html>

  <head>

  </head>

  <body>

  <h1>OK!</h1>

  </body>

</html>

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<html>

  <head>

  </head>

  <body>

  <h1>FAIL!</h1>

  </body>

</html>

 

 

部署到tomcat中後在瀏覽器中輸入

http://localhost:8080/Struts2/login或http://localhost:8080/Struts2/login.action 可以直接訪問此action。如果不想.action想.xxx怎麼辦呢?

<constant name="struts.action.extension" value="xxx"></constant>

這樣就可以.xxx了。

在瀏覽器中輸入http://localhost:8080/Struts2/hello.jsp輸入123,hwh提交給action頁面顯示OK!否則FAIL!

constant節點的其他屬性

 

<!--指定請求action的後綴,默認爲action -->

<constant name="struts.action.extension" value="hou"></constant>

<!--指定編碼集  -->

<constant name="struts.i18n.encoding" value="GBK"></constant>

<!--設置瀏覽器是否緩存靜態內容,默認爲true,開發階段最好爲false -->

<constant name="struts.serve.static.browserCache" value="false"></constant>

<!--當struts的配置文件修改後,系統是否自動重新加載該文件(不用重啓服務器),默認爲false,開發階段最好爲true-->

<constant name="struts.configuraction.xml.reload" value="true"></constant>

<!--開發過程中打印更詳細的錯誤信息-->

<constant name="struts.devMode" value="true"></constant>

<!--默認的試圖主題-->

<constant name="struts.ui.theme" value="simple"></constant>

<!--與spring集成時,指定有spring負責action對象的創建-->

<constant name="struts.objectFactory" value="spring"></constant>

<!--設置struts2是否支持動態方法調用,默認爲true -->

<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>

<!-- 文件上傳總大小限制 -->

<constant name="struts.multipart.maxSize" value="10701096"></constant>

 

2.3.action名稱的搜索順序

<package name="org.hwh.struts2" namespace="" extends="struts-default">

現在的namespace爲空,即使你在訪問的時候在瀏覽器中輸入

http://localhost:8080/Struts2/sss/224/waa/login.action也沒有問題,也可以執行此action

如果namespace=”/hou”那麼訪問此action時就要輸入http://localhost:8080/Struts2/hou/login

在/hou下可以再加n層不存在的目錄也能訪問到action,但是如果/hou不存在就不行了。如果該namespace不存在則會去找默認的namespace(爲空的),如果沒有定義爲空的namespace的package則會出錯。

2.4. result配置的各種視圖轉發類型

<result type=””> </result>

Type的類型有dispacher(默認),redirect(客戶端跳轉),redirectAction(跳轉到action),plainText(可顯示源碼的跳轉)

其中跳轉到的action在同一個package配置中直接用就可以,如果不在同一package下

<result type=”redirectAction”>

  <param name=”actionName”>actionName</param>

  <param name=”namespace”>namespace</param>

</result>

2.5. 爲Action屬性注入值

<package name="org.hwh.struts2" namespace="/hou" extends="struts-default">

        <action name="login" class="org.hwh.struts2.Login">

        <param name="name">123</param>

        <param name="pass">hwh</param>

        <result name="success">/ok.jsp</result>

        <result name="fail">/fail.jsp</result>

        </action>

    </package>

說明:action下的param節點可爲action中的屬性賦值。賦值之後跳轉到的jsp頁面中可以用${name},${pass}獲得值。注意:param中的name的值應該與action中屬性的名稱一致。

 

三.Struts2的處理流程

說明:當用戶請求到達時,filter會過濾用戶請求。默認情況下,請求無後綴或後綴名爲

.action時(請求爲一個action)這個請求會被轉入struts2框架中處理,否則struts2則會略過此請求。當請求進入框架時會先進過一系列的攔截器,然後到action,根據action的返回值返回到jsp或html頁面。Struts1與struts2不同的地方在於struts2中的action是線程安全的。

四.Struts2中使用多個配置文件

在struts.xml文件中使用include:

<struts>

  <include file="a.xml"></include>

  <include file="b.xml"></include>

</struts>

注意:被包含的文件中<package>的name是唯一的。

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