日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2_1_基础案例_配置文件详解_动作类

發布時間:2024/7/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2_1_基础案例_配置文件详解_动作类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Struts2簡要概述

  • 三層架構中的表現層框架
  • 相對于常規的MVC模式, 其核心為Filter控制器
  • 內部的Filter實例是在客戶端每發送一次就實例化一次, 相比于Servlet具有線程安全性
  • 內部控制器默認攔截以.action或無后綴名的url

Struts2案例步驟

  • 配置web.xml, 由于Struts2核心為Fiter, 所以需要在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> <!-- StrutsPrepareAndExecuteFilte代表struts2的核心控制器-->
  • 建立addUser.jsp文件: 在addUser.jsp中處理用戶的操作請求
例如: <a href="${pageContext.request.contextPath}/addUser.action">添加用戶</a>
  • 配置struts.xml
例如: <struts><package name="p1" extends="struts-default"><action name="addUser" class="com.strutstest.action.DemoAction" method="addUser"><result name="success">/success.jsp</result></action></package></struts>
  • 建立動作類與動作方法
//例如: public class DemoAction extends ActionSupport{public String addUser(User user){if(user != null){userList.add(user);return SUCCESS; //ActionSupport中的字符串常量, 代表"success"}else{System.out.println("user == null");return ERROR; //ActionSupport中的字符串常量, 代表"error"}} }
  • 結果視圖: 如果用戶添加操作正確, 返回"success"至result中, 將會請求轉發至success.jsp中, 操作失敗不做任何轉發操作

上述案例執行過程

  • 如下整個過程
- 加載web.xml- 實例化并初始化過濾器; 與web.xml同時發生- 由StrutsPrepareAndExecuteFilte加載struts.xml, 加載時間優先于web.xml- 客戶端發送addUser.action的請求- 請求到達過濾器- 由過濾器攔截該請求, 在struts.xml中查找對應的namespace- 6中操作成功后, 獲得動作名稱addUser, 然后在struts.xml中查找對應的action name; 若操作失敗, 重新遍歷整個root, 如果還未找到則報404- 根據struts.xml中action標簽中的class屬性去工程中查找對應的動作類- 找到動作類后, 調用動作方法, 獲得方法返回值, 根據返回值查找對應的jsp界面

Struts2配置文件的加載過程

  • 加載時機
在應用加載的時候加載, 在應用運行過程中只加載一次
  • 加載順序
- default.properties //系統默認配置文件, 不可修改- struts-default.xml //struts2的核心配置, 不可修改- struts-plugin.xml //不可修改- struts.xml //當前應用, 可修改- struts.properties //當前應用, 可修改- web.xml //當前引用 注:- 具有多個配置文件的時候,且配置文件參數相同, 后一個的配置文件信息會覆蓋前一個配置文件的信息- 使用系統默認的攔截器的時候, 攔截器總是執行兩遍; 執行過程: 正向一遍-> 將結果反饋到jsp中-> 然后反向一遍

Struts2提供的常量

下面列舉常用常量:

  • struts.i18n.encoding 默認編碼utf-8
  • struts.multipart.parser 指定文件上傳組件,默認jakarta
  • struts.multipart.maxSize 默認值:2097152 文件上傳總文件大小限制:2M
  • struts.action.extension 默認為"action"或者為空 能進入Struts2框架內部的url地址后綴名。多個值用逗號分隔, 可以加空格表示沒有后綴
  • struts.enable.DynamicMethodInvocation 默認false 是否允許動態方法調用
  • struts.devMode 默認false 是否是開發模式, 進入開發者模式, 修改Struts.xml無需重啟服務器

常量覆蓋方式

  • 使用< constant name=“常量名” value=“值”></ constant>

Struts.xml文件主要標簽及屬性

  • package: 配置文件的分包管理, 與java中的package一致
內部屬性:1. name: 包名, 必須寫且唯一2. extends: 默認繼承struts-default包(類似于java中Object), 提供Struts2核心功能3. namespace: 名稱空間, 名稱空間 + 動作名稱 = 訪問路徑4. abstract: 聲明當前包為抽象包, 沒有action標簽的包都可以是抽象包 例:<package name="p1" extends="struts-default" namespace="/a"></package> 注: namespace沒有寫的情況下使用默認提供的命名空間及""(表示空串) 記住: namespace的查找是在整個root下尋找, 而action的查找只在所有的滿足條件的namespace下查找(感覺自己都講不清楚, 版面太小無法敘述)
  • action: 配置動作行為, 表示用戶執行的動作
內部屬性:1. name: 動作名稱2. class: 動作類, 默認動作類com.opensymphony.xwork2.ActionSupport(在Struts-default中定義)3. method: 動作類中包含的動作方法, 用于執行用戶動作請求, 默認public String execute(){} 例:<action name="addUser" class="com.strutstest.action.DemoAction" method="addUser"></action> 注: 動作方法必須滿足: public, 返回值String, 無參數;為了滿足動作方法的靈活調用, 避免寫死代碼, 所以使用通配符代替屬性參數, 或者通過動態調用.例如:通配符:<action name="*" class="com.strutstest.action.DemoAction" method="{1}"><result name="success">/{1}.jsp</result></action>"*"代表用戶要執行的操作, {1}代表截取用戶操作的名稱(此時動作方法中也要具有相同名稱的動作方法, 跳轉的頁面也要具有相同的動作名稱)動態調用:在index.jsp中我們寫的操作鏈接如下:注: 在動態方法調用之前要修改default中常量值, 保證可以使用動態方法調用, 如下的<constant><a href="${pageContext.request.contextPath}/user/user!addUser.action">在struts.xml中action對應的寫法是:<constant name="struts.enable.DynamicMethodInvocation" value="true"><package name="user" extends="struts-default" namespace="/user"><action name="user" class="com.strutstest.action.DemoAction"><result name="success">/success.jsp</result></action></package>當執行動態調用的時候就是反射截取user!addUser.action中"!"后面的addUser
  • result: 結果視圖, 獲得動作方法反饋后進行頁面跳轉或顯示
內部屬性:1. name: 邏輯視圖名稱2. type: 跳轉類型, 取值在struts-default.xml中有介紹, 但也可以自定義type類型注:type 常用取值: dispatcher(默認值, 請求轉發), redirect(頁面重定向), redirectAction(動作重定向), chain(動作請求轉發);動作請求轉發可以在相同或不同名稱空間轉發例:chain: 轉發到另一個動作同包下直接使用: <result name=”success” type=”chain”>action2</action>不同包使用: <result name=”success” type=”chain”> //觸發Servle****Result的類, 獲取namespace與actionName的值, 確定轉發的空間與動作<param name=”namespace”>/n2<param> <param name=”actionName”>action3<param></result>redirectAction: 重定向到另一個動作同包下與chain操作一直, 直接type=”redirectAction”不同包下與chain一致, 將type修改即可3. param: 當需要轉發到不同包下的動作, 當需要自定義結果視圖使用param修改內部參數注: 通過反射機制獲取setter方法, 將param中參數通過依賴注入對結果類參數進行修改4. 自定義結果類型: 讓自定義的javaBean實現com.opensymphony.xwork2.Result接口或者繼承該接口的實現類org.apache.struts2.dispatcher.StrutsResultSupport重寫doExecute方法, 執行自定義的結果視圖

動作類的3中書寫方式

  • 直接寫一個簡單的JavaBean, 不推薦使用, 可操作性太低
  • 寫一個實現com.opensymphony.xwork2.Action接口的類
此接口提供默認的動作方法execute()以及默認的動作返回值( SUCCESS, ERROR, INPUT, LOGIN, NONE)
  • 動作類繼承com.opensymphony.xwork2.ActionSupport類

動作類中訪問Servlet的API

  • 使用ServletActionContext類
HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); HttpSessionContent session = request.getSession(); //session不能使用ServletActionContext獲得
  • 通過實現接口獲得
動作類實現ServletRequestAware, ServletResponseAware 重寫接口方法即可獲得對應的request, response

有問題請指教(我會很O(∩_∩)O~~), 喜歡請點個贊喲!!!

總結

以上是生活随笔為你收集整理的Struts2_1_基础案例_配置文件详解_动作类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。