struts2面試整理

来源:http://www.cnblogs.com/liyuhui-Z/archive/2017/11/15/7837194.html
-Advertisement-
Play Games

1. struts2的工作原理 客戶端發送請求 經過一系列的過濾器 FilterDispatcher通過ActionMapper來決定這個REquest需要調用的Action FilterDispather交給ActionProxy 通過ConfigurationManager詢問struts.xm ...


  1. struts2的工作原理

    • 客戶端發送請求

    • 經過一系列的過濾器

    • FilterDispatcher通過ActionMapper來決定這個REquest需要調用的Action

    • FilterDispather交給ActionProxy

    • 通過ConfigurationManager詢問struts.xml找到對應的Action

    • ActionProxy創建一個ActionInvocation實例

    • 調用Action Action執行完畢ActionInvocation負責根據struts.xml中的配置找到對應的返回結果

  2. Struts攔截器,常用的攔截器

    • Struts2的攔截器是其核心部分,它提供了一種機制,可以定義一個特殊的模塊,對請求進行封裝和處理,這個模塊在Action執行前後都可以進行

    • modelDriven(模型驅動) servletConfig(獲取ServletApo) params(動態參數註入) validation(輸入驗證 聲明式驗證)

  3. struts2的優點

    • 實現了mvc模式 層次結構清晰,

    • 豐富的標簽庫,提高了開發效率

    • 提供了豐富的攔截器實現

    • 方便異常處理

    • 通過配置文件可以掌握系統各個部分之間的關係

  4. struts2核心控制器

    • FilterDispatcher

    • 它負責攔截所有的用戶請求,當 用戶請求到達時,該Filter會過濾用戶請求。如果用戶請求以action結尾,該請求將被轉入Struts 2框架處理。

  5. struts2配置文件覆蓋順序

    • struts.xml -> struts.properties -> web.xml(配置過濾器時,指定參數。程式員可以編寫)
  6. struts2修改常量的方式

    • struts.xml:<constant name="struts.action.extension" value="do"/>

    • struts.properties : struts.action.extension=do

  7. Action

    • Action為多例的,所以在Spring中Scope要設置參數

    • 通配符 動態調用

  8. Action實現的三種方式

    • 單純的POJO

    • 實現Action介面 (提供了格式化的返回參數)

    • 繼承ActionSupport(實現了Action介面並且其中還做了一些國際化和驗證的功能)

  9. 訪問ServletAPI

    • ServletActionContext

    • 實現介面 ServletRequestAware,ServletResponseAware ,ServletContextAware 攔截器負責註入(ServletConfig)

  10. 結果視圖

    • chain(轉發到動作,要是不在同一個包內需要設置 name) dispatcher(預設) redierct (請求重定向) stream(文件上傳和下載)
  11. 預設的struts-default有什麼作用

    • struts-default包是由struts內置的,它定義了struts2內部的眾多攔截器和Result類型,而Struts2很多核心的功能都是通過這些內置的攔截器實現,當包繼承了struts-default包才能使用struts2為我們提供的這些功能。

    • 通常每個包都應該繼承struts-default包。

  12. struts2如何對指定的方法進行驗證

    • 驗證功能是由validation攔截器來負責處理的。回顯錯誤信息是由workflow攔截器來負責處理的。

    • 驗證失敗以後錯誤信息回顯需要設置<result name="input">/regist.jsp</result> 結果視圖

    • 對類中所有方法進行驗證,覆寫validate()方法,當出錯的時候addFieldError("name", "請輸入用戶名");

    • 對指定方法:將validate()方法改寫成為public void validateDemo1 後面是指定方法的名字(驗證Demo1方法)

  13. 值棧

    • ValueStack的生命周期為Action的生命周期,保存在request域中,

    • 每個action都有與之對應的值棧,action對象預設保存在棧頂

    • 使用OGNL訪問值棧中的內容不需要添加# 而訪問其他域中的需要添加#

  14. ActionContext、ServletContext、pageContext的區別?

    • ActionContext是當前Action的上下文環境,通過ActionContext可以獲取到request、session、ServletContext等與Action有關的對象的引用

    • ServletContext是域對象,一個web應用中只有一個ServletContext,生命周期伴隨整個web應用;

    • pageContext是JSP中的最重要的一個內置對象,可以通過pageContext獲取其他域對象的應用,同時它是一個域對象,作用範圍只針對當前頁面

  15. 攔截器

    • 每個攔截器都是實現了Interceptor介面的java類

    • Init() 在這個攔截器初始化的時候被調用

    • intercept() 當攔截器起作用的時候調用

    • destroy() 在攔截器被銷毀的時候調用

    • struts2預設有18個攔截器

  16. 自定義攔截器

    • 編寫一個類繼承MethodFilterInterceptor

    • struts2.xml中聲明攔截器

    • struts2.xml中聲配置攔截器 , 當指定自定義攔截器時預設攔截器會失效,所以還要顯示的在指定一次.

  17. 文件上傳

    • file域 form表單enctype=multipart/form-data 提交方式為post

    • action接受文件對象為表單中的name, 文件類型為name+ContentType 文件名字為:jsp頁面file組件的名稱+FileName

    • 可以用數組來接收多個文件的上傳


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 總結一下.NET的編譯過程, 一般的高級編程語言會把代碼編譯成機器碼,也就是我們說的非托管代碼,執行在編譯它的電腦上。 而.NET編譯代碼的時候會把高級編程語言編譯成中間語言 運行在CLR(公共語言運行庫)上,也就是把代碼集成一個exe文件中, .NET 在編譯過程中 沒有直接編譯成CPU認識的代碼 ...
  • 首先要設置主窗體KeyPreview為true,可直接在屬性中進行設置,或者在窗體載入中設置: this.KeyPreview = true;然後添加窗體KeyDown事件,如下: ...
  • <!DOCTYPE html><html> <head> <meta charset="utf-8"> </head></html><?php/** * Created by 陳藝赫. * User: Vvvvv * Date: 2017/10/9 * Time: 9:01 *///面向對象//什麼 ...
  • ngrok的使用 1、下載Tomcat並啟動。 2、訪問本地Tomcat,代表啟動Tomcat成功。 3、到https://ngrok.com下載ngrok. 4、下載存放的目錄。 5、命令行進入到該目錄,執行 ngrok http 8080 。 8080是Tomcat預設的埠號。 6、之後就可映 ...
  • 1.1 Python語言介紹 1.1.1 什麼是編程?為什麼要編程 編程 是個動詞,編程==寫代碼,寫代碼為了什麼? 為了讓電腦乾你想要乾的事情,比如,馬化騰想跟別人聊天,於是寫了個聊天軟體,這個軟體就是一堆代碼的集合,這些代碼是什麼?這些代碼是電腦能理解的語言。 例子:你是公司老闆,你有一個員 ...
  • 1.本章內容目錄: 概述 運行時數據區域 程式計數器 java虛擬機棧 本地方法棧 java堆 方法區 運行時常量池 直接記憶體 HotSpot虛擬機對象探秘 對象的創建 對象的記憶體佈局 對象的訪問定位 程式計數器 java虛擬機棧 本地方法棧 java堆 方法區 運行時常量池 直接記憶體 對象的創建 ...
  • 1. 什麼是Spring Spring是一個輕量級的容器,他實現了IOC和非侵入的框架,並提供了AOP的實現方式,提供了持久層事務的支持,其讓java開發模塊化,並且貫穿持久層,邏輯層,表現層,讓每一個模塊都可以獨立分開,降低耦合,提高代碼復用率. 2. Spring的好處 Spring提供了IOC ...
  • 從上到下 #grad { background: -webkit-linear-gradient(red, blue); background: -o-linear-gradient(red, blue); background: -moz-linear-gradient(red, blue); b ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...