亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Struts2相關的面試題整理分享

2024-07-13 10:14:02
字體:
來源:轉載
供稿:網友

前言

眾所周知,Struts2是個非常優秀的開源框架,我們能用Struts2框架進行開發,同時能快速搭建好一個Struts2框架,但我們是否能把Struts2框架的工作原理用語言表達清楚,你表達的原理不需要說出底層是怎么實現的,我估計大多數的人也聽不懂。當面試官問到我們Struts2的工作原理時,我們該怎么回答這個問題呢?回答什么才能讓自己說的與眾不同,先看看其他朋友總結的

一、工作原理

在Struts2框架中的處理大概分為以下幾個步驟

      1 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求

      2 這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin)

      3 接著FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action

      4 如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy

      5 ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類

      6 ActionProxy創建一個ActionInvocation的實例。

      7 ActionInvocation實例使用命名模式來調用,在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用。

      8 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標簽。在這個過程中需要涉及到ActionMapper

二 工作流程

      1、客戶端瀏覽器發出HTTP請求.

      2、根據web.xml配置,該請求被FilterDispatcher接收

      3、根據struts.xml配置,找到需要調用的Action類和方法, 并通過IoC方式,將值注入給Aciton

      4、Action調用業務邏輯組件處理業務邏輯,這一步包含表單驗證。

      5、Action執行完畢,根據struts.xml中的配置找到對應的返回結果result,并跳轉到相應頁面

      6、返回HTTP響應到客戶端瀏覽器

三、攔截器和過濾器的區別

      1、攔截器是基于java反射機制的,而過濾器是基于函數回調的。

      2、過濾器依賴于servlet容器,而攔截器不依賴于servlet容器。

      3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。

      4、攔截器可以訪問Action上下文、值棧里的對象,而過濾器不能。

      5、在Action的生命周期中,攔截器可以多次調用,而過濾器只能在容器初始化時被調用一次。

四、什么要使用Struts2

Struts2 是一個相當強大的Java Web開源框架,是一個基于POJO的Action的MVC Web框架。它基于當年的Webwork和XWork框架,繼承其優點,同時做了相當的改進。

     1、Struts2基于MVC架構,框架結構清晰,開發流程一目了然,開發人員可以很好的掌控開發的過程。

     2、使用OGNL進行參數傳遞。

     OGNL提供了在Struts2里訪問各種作用域中的數據的簡單方式,你可以方便的獲取Request,Attribute,Application,Session,Parameters中的數據。大大簡化了開發人員在獲取這些數據時的代碼量。

     3、強大的攔截器

     Struts2 的攔截器是一個Action級別的AOP,Struts2中的許多特性都是通過攔截器來實現的,例如異常處理,文件上傳,驗證等。攔截器是可配置與重用的,可以將一些通用的功能如:登錄驗證,權限驗證等置于攔截器中以完成一些Java Web項目中比較通用的功能。在我實現的的一Web項目中,就是使用Struts2的攔截器來完成了系統中的權限驗證功能。

     4、易于測試

     Struts2的Action都是簡單的POJO,這樣可以方便的對Struts2的Action編寫測試用例,大大方便了5Java Web項目的測試。

     易于擴展的插件機制在Struts2添加擴展是一件愉快而輕松的事情,只需要將所需要的Jar包放到WEB-INF/lib文件夾中,在struts.xml中作一些簡單的設置就可以實現擴展。

     6、模塊化管理

     Struts2已經把模塊化作為了體系架構中的基本思想,可以通過三種方法來將應用程序模塊化:將配置信息拆分成多個文件把自包含的應用模塊創建為插件創建新的框架特性,即將與特定應用無關的新功能組織成插件,以添加到多個應用中去。

     7、全局結果與聲明式異常

     為應用程序添加全局的Result,和在配置文件中對異常進行處理,這樣當處理過程中出現指定異常時,可以跳轉到特定頁面。

     他的如此之多的優點,是很多人比較的青睞,與spring ,Hibernate進行結合,組成了現在比較流行的ssh框架,當然每個公司都要自己的框架,也是ssh變異的產品。

五、看到網友的對Struts2的原理總結,我自己也總結以便后續的面試,以下是我的疑問

1、客服端發起一個請求,通過HTTP協議指向Tomcat容器,tomcat拿到請求她干了什么?

2、我們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>

我們從web配置文件中可以看到org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,這個Filter這個類有什么用?

這個 /* 是攔截所有的請求,他攔截了請求做了什么處理? <url-pattern>/*</url-pattern>

3、我們struts.xml配置

<struts><package name="default" namespace="/" extends="struts-default"><action name="hello"><result>/Hello.jsp</result></action></package></struts>

誰負責根據struts.xml配置,找到需要調用的Action類和方法呢?

4、最后根據struts.xml中的配置找到對應的返回結果result,在返回HTTP響應到客戶端瀏覽器

   struts2的工作原理

  • 客戶端發送請求
  • 經過一系列的過濾器
  • FilterDispatcher通過ActionMapper來決定這個REquest需要調用的Action
  • FilterDispather交給ActionProxy
  • 通過ConfigurationManager詢問struts.xml找到對應的Action
  • ActionProxy創建一個ActionInvocation實例
  • 調用Action Action執行完畢ActionInvocation負責根據struts.xml中的配置找到對應的返回結果

Struts攔截器,常用的攔截器

  • Struts2的攔截器是其核心部分,它提供了一種機制,可以定義一個特殊的模塊,對請求進行封裝和處理,這個模塊在Action執行前后都可以進行
  • modelDriven(模型驅動) servletConfig(獲取ServletApo) params(動態參數注入) validation(輸入驗證 聲明式驗證)

struts2的優點

  • 實現了mvc模式 層次結構清晰,
  • 豐富的標簽庫,提高了開發效率
  • 提供了豐富的攔截器實現
  • 方便異常處理
  • 通過配置文件可以掌握系統各個部分之間的關系

struts2核心控制器

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

struts2配置文件覆蓋順序

  • struts.xml -> struts.properties -> web.xml(配置過濾器時,指定參數。程序員可以編寫)

struts2修改常量的方式

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

Action

  • Action為多例的,所以在Spring中Scope要設置參數
  • 通配符 動態調用

Action實現的三種方式

  • 單純的POJO
  • 實現Action接口 (提供了格式化的返回參數)
  • 繼承ActionSupport(實現了Action接口并且其中還做了一些國際化和驗證的功能)

訪問ServletAPI

  • ServletActionContext
  • 實現接口 ServletRequestAware,ServletResponseAware ,ServletContextAware 攔截器負責注入(ServletConfig)

結果視圖

  • chain(轉發到動作,要是不在同一個包內需要設置 name) dispatcher(默認) redierct (請求重定向) stream(文件上傳和下載)

默認的struts-default有什么作用

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

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

  • 驗證功能是由validation攔截器來負責處理的?;仫@錯誤信息是由workflow攔截器來負責處理的。
  • 驗證失敗以后錯誤信息回顯需要設置 <result name="input">/regist.jsp</result> 結果視圖
  • 對類中所有方法進行驗證,復寫validate()方法,當出錯的時候addFieldError("name", "請輸入用戶名");
  • 對指定方法:將validate()方法改寫成為public void validateDemo1 后面是指定方法的名字(驗證Demo1方法)

值棧

  • ValueStack的生命周期為Action的生命周期,保存在request域中,
  • 每個action都有與之對應的值棧,action對象默認保存在棧頂
  • 使用OGNL訪問值棧中的內容不需要添加# 而訪問其他域中的需要添加#

ActionContext、ServletContext、pageContext的區別?

  • ActionContext是當前Action的上下文環境,通過ActionContext可以獲取到request、session、ServletContext等與Action有關的對象的引用
  • ServletContext是域對象,一個web應用中只有一個ServletContext,生命周期伴隨整個web應用;
  • pageContext是JSP中的最重要的一個內置對象,可以通過pageContext獲取其他域對象的應用,同時它是一個域對象,作用范圍只針對當前頁面

攔截器

  • 每個攔截器都是實現了Interceptor接口的java類
  • Init() 在這個攔截器初始化的時候被調用
  • intercept() 當攔截器起作用的時候調用
  • destroy() 在攔截器被銷毀的時候調用
  • struts2默認有18個攔截器

自定義攔截器

  • 編寫一個類繼承 MethodFilterInterceptor
  • struts2.xml中聲明攔截器
  • struts2.xml中聲配置攔截器 , 當指定自定義攔截器時默認攔截器會失效,所以還要顯示的在指定一次.

文件上傳

  • file域 form表單 enctype=multipart/form-data 提交方式為post
  • action接受文件對象為表單中的name, 文件類型為name+ContentType 文件名字為:jsp頁面file組件的名稱+FileName
  • 可以用數組來接收多個文件的上傳

我覺的要說清楚Struts原理,不光死記硬背資料上的寫的原理,還要帶著這些問題去做總結。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产黄| 久久精品国产亚洲| 久久精视频免费在线久久完整在线看| 亚洲大胆人体av| 亚洲欧美一区二区三区在线| 青青草一区二区| 久久久久久久影视| 日韩免费在线视频| 亚洲欧美国产精品va在线观看| 91九色国产社区在线观看| 亚洲精品影视在线观看| 国产一区二区三区久久精品| 中文字幕在线看视频国产欧美在线看完整| 91亚洲精品在线| 欧美电影免费观看| 日韩大陆欧美高清视频区| 精品电影在线观看| 深夜成人在线观看| 亚洲男人的天堂在线| 国外成人在线视频| 成人妇女淫片aaaa视频| 欧美综合国产精品久久丁香| 亚洲美女黄色片| 国产精品丝袜白浆摸在线| 欧美尤物巨大精品爽| 久久免费高清视频| 亚洲国产精品va在线看黑人| 亚洲free嫩bbb| 国产精品色婷婷视频| 日韩av综合中文字幕| 日韩欧美在线字幕| 欧美性感美女h网站在线观看免费| 日韩av电影在线免费播放| 色爱精品视频一区| 亚洲欧美日韩天堂| 国产精品日韩精品| 最近的2019中文字幕免费一页| 欧美视频专区一二在线观看| 国产精品久久久久久网站| 欧美精品久久久久久久| 精品偷拍一区二区三区在线看| 欧美日韩国产精品一区二区三区四区| 在线精品播放av| 国产精品日韩久久久久| 欧美日韩国产成人高清视频| 97高清免费视频| 中文欧美日本在线资源| 伊人久久久久久久久久久久久| 国产精品综合不卡av| 久久精品国产一区二区三区| 大胆欧美人体视频| 日韩av免费在线看| 欧美日韩国产综合视频在线观看中文| 国产精品黄色影片导航在线观看| 原创国产精品91| 日韩av观看网址| 久久99国产综合精品女同| 日韩欧美在线国产| 国产精品老牛影院在线观看| 精品国偷自产在线视频| 98精品国产高清在线xxxx天堂| 91av在线精品| 国产成人在线一区二区| 日韩在线免费观看视频| 色妞久久福利网| 在线免费观看羞羞视频一区二区| 欧美在线www| 欧美色视频日本高清在线观看| 日韩在线高清视频| 成人444kkkk在线观看| 福利视频导航一区| 久久久久久有精品国产| 国产精品扒开腿做爽爽爽男男| 欧美日韩一区免费| www.精品av.com| 国产香蕉97碰碰久久人人| 亚洲乱码av中文一区二区| 亚洲免费av片| 成人国产精品av| 国产精品国产三级国产专播精品人| 亚洲一区二区三区乱码aⅴ| 欧美老女人在线视频| 亚洲精品福利在线| 国产一区二区三区在线免费观看| 欧美黑人又粗大| 欧美尤物巨大精品爽| 91在线视频九色| 亚洲级视频在线观看免费1级| 亚洲自拍小视频| 精品国产自在精品国产浪潮| 久久国产精品视频| 久久久久久91| 亚洲视频在线观看| 久久精品青青大伊人av| 日韩精品欧美激情| 久久综合88中文色鬼| 日韩中文字幕在线视频| 日韩欧美有码在线| 欧美综合一区第一页| 高清一区二区三区四区五区| 国产精品久久久久久久久久99| 亚洲第一色中文字幕| 一区二区欧美在线| 日韩视频免费观看| 中文字幕在线看视频国产欧美在线看完整| 亚洲精品福利免费在线观看| 国产精品美女久久久久久免费| 亚洲欧美日韩久久久久久| 久久福利视频网| 亚洲成人网av| 538国产精品一区二区在线| 91精品国产综合久久久久久蜜臀| 欧美大奶子在线| 欧美日韩国产精品一区二区三区四区| 国产精品mp4| 亚洲影院在线看| 国内精品一区二区三区四区| 青青精品视频播放| 久久久精品国产| 日韩欧美国产视频| 久久久久久久亚洲精品| 国内精品视频一区| 91免费精品国偷自产在线| 人人澡人人澡人人看欧美| 欧美综合在线观看| 日韩欧美中文字幕在线播放| 日韩高清电影免费观看完整版| 亚洲精品电影久久久| 国产精品精品一区二区三区午夜版| 日韩av在线直播| 国产午夜精品全部视频播放| 久久久97精品| 久久久久成人网| 欧美在线国产精品| 欧美另类精品xxxx孕妇| 国产成人极品视频| 亚洲欧美一区二区激情| 亚洲精品免费在线视频| 在线精品视频视频中文字幕| 欧美日韩成人网| 亚洲第一视频在线观看| 国产精品久久久久久久av大片| 国产日韩精品电影| 久久亚洲精品成人| 久久精品视频99| 97精品在线视频| 精品福利在线视频| 欧美精品电影在线| 亚洲国产成人在线播放| 国产精品专区h在线观看| 亚洲成av人影院在线观看| 欧美一区二区三区精品电影| 4k岛国日韩精品**专区| 欧美高清电影在线看| 欧美国产亚洲视频| 永久免费毛片在线播放不卡| 欧美性受xxxx黑人猛交| 久久国产精品久久久| 日韩免费在线观看视频| 91色视频在线导航| 国产精品久久久91| 日韩av有码在线| 久久97精品久久久久久久不卡| 岛国视频午夜一区免费在线观看|