人妻系列无码专区av在线,国内精品久久久久久婷婷,久草视频在线播放,精品国产线拍大陆久久尤物

當(dāng)前位置:首頁(yè) > 數(shù)據(jù)庫(kù) > 正文

struts2攔截器工作原理 struts2的攔截器

struts2攔截器工作原理 struts2的攔截器

大家好,今天來為大家分享struts2攔截器工作原理的一些知識(shí)點(diǎn),和struts2的攔截器的問題解析,大家要是都明白,那么可以忽略,如果不太清楚的話可以看看本篇文章,相...

大家好,今天來為大家分享struts2攔截器工作原理的一些知識(shí)點(diǎn),和struts2的攔截器的問題解析,大家要是都明白,那么可以忽略,如果不太清楚的話可以看看本篇文章,相信很大概率可以解決您的問題,接下來我們就一起來看看吧!

http status 404報(bào)錯(cuò)怎么解決

httpstatus404報(bào)錯(cuò)解決方法如下

1、未部署Web應(yīng)用

2、URL輸入錯(cuò)誤排錯(cuò)方法:首先,查看URL的IP地址和端口號(hào)是否書寫正確。其次,查看上下文路徑是否正確Project--------Properties------MyElipse-----Web-----WebContext-root檢查這個(gè)路徑名稱是否書寫正確。最后,檢查一下文件名稱是否書寫正確。

3、目錄不能被引用在Eclipse的“包資源管理器(PackageExplorer)”檢查文件存放的位置。

4、Tomcat服務(wù)器中web.xml中的問題排錯(cuò)方法:如果你的web應(yīng)用程序有多個(gè)jsp頁(yè)面的話,當(dāng)你點(diǎn)擊你web應(yīng)用程序的虛擬根目錄時(shí)可能會(huì)出現(xiàn)404錯(cuò)誤,只是你只需要修改Tomcat服務(wù)器中web.xml補(bǔ)充說明:在6.0.18版本error:“Therequestedresource()isnotavailable.”

5、WEB-INF下面必須要有幾個(gè)固定的文件夾和文件web.xml該webapp的配置文件lib該webapp用到的庫(kù)文件classes存放編譯好的servlet

6、如果要運(yùn)行的不是.jsp文件,而是servlet(.class)文件,要配置web.xml(當(dāng)然是WEB-INF下面的),加上以下字段:其中的“HelloWorldServlet”改為你要運(yùn)行的文件名

7、struts.xml配置錯(cuò)誤,可能是你的Action值寫錯(cuò)或者鏈接URL寫錯(cuò)。

8、增加commons-lang3-3.1.jar文件到啊WEB-INF/lib目錄下。

ioc和aop原理和機(jī)制

IoC(InversionofControl)

(1).IoC(InversionofControl)是指容器控制程序?qū)ο笾g的關(guān)系,而不是傳統(tǒng)實(shí)現(xiàn)中,由程序代碼直接操控??刂茩?quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,控制權(quán)的轉(zhuǎn)移是所謂反轉(zhuǎn)。對(duì)于Spring而言,就是由Spring來控制對(duì)象的生命周期和對(duì)象之間的關(guān)系;IoC還有另外一個(gè)名字——“依賴注入(DependencyInjection)”。從名字上理解,所謂依賴注入,即組件之間的依賴關(guān)系由容器在運(yùn)行期決定,即由容器動(dòng)態(tài)地將某種依賴關(guān)系注入到組件之中。

(2).在Spring的工作方式中,所有的類都會(huì)在spring容器中登記,告訴spring這是個(gè)什么東西,你需要什么東西,然后spring會(huì)在系統(tǒng)運(yùn)行到適當(dāng)?shù)臅r(shí)候,把你要的東西主動(dòng)給你,同時(shí)也把你交給其他需要你的東西。所有的類的創(chuàng)建、銷毀都由spring來控制,也就是說控制對(duì)象生存周期的不再是引用它的對(duì)象,而是spring。對(duì)于某個(gè)具體的對(duì)象而言,以前是它控制其他對(duì)象,現(xiàn)在是所有對(duì)象都被spring控制,所以這叫控制反轉(zhuǎn)。

(3).在系統(tǒng)運(yùn)行中,動(dòng)態(tài)的向某個(gè)對(duì)象提供它所需要的其他對(duì)象。

(4).依賴注入的思想是通過反射機(jī)制實(shí)現(xiàn)的,在實(shí)例化一個(gè)類時(shí),它通過反射調(diào)用類中set方法將事先保存在HashMap中的類屬性注入到類中。總而言之,在傳統(tǒng)的對(duì)象創(chuàng)建方式中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實(shí)例,而在Spring中創(chuàng)建被調(diào)用者的工作由Spring來完成,然后注入調(diào)用者,即所謂的依賴注入or控制反轉(zhuǎn)。注入方式有兩種:依賴注入和設(shè)置注入;IoC的優(yōu)點(diǎn):降低了組件之間的耦合,降低了業(yè)務(wù)對(duì)象之間替換的復(fù)雜性,使之能夠靈活的管理對(duì)象。

AOP(AspectOrientedProgramming)

(1).AOP面向方面編程基于IoC,是對(duì)OOP的有益補(bǔ)充;

(2).AOP利用一種稱為“橫切”的技術(shù),剖解開封裝的對(duì)象內(nèi)部,并將那些影響了多個(gè)類的公共行為封裝到一個(gè)可重用模塊,并將其名為“Aspect”,即方面。所謂“方面”,簡(jiǎn)單地說,就是將那些與業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝起來,比如日志記錄,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護(hù)性。

(3).AOP代表的是一個(gè)橫向的關(guān)系,將“對(duì)象”比作一個(gè)空心的圓柱體,其中封裝的是對(duì)象的屬性和行為;則面向方面編程的方法,就是將這個(gè)圓柱體以切面形式剖開,選擇性的提供業(yè)務(wù)邏輯。而剖開的切面,也就是所謂的“方面”了。然后它又以巧奪天功的妙手將這些剖開的切面復(fù)原,不留痕跡,但完成了效果。

(4).實(shí)現(xiàn)AOP的技術(shù),主要分為兩大類:一是采用動(dòng)態(tài)代理技術(shù),利用截取消息的方式,對(duì)該消息進(jìn)行裝飾,以取代原有對(duì)象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語(yǔ)法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼。

(5).Spring實(shí)現(xiàn)AOP:JDK動(dòng)態(tài)代理和CGLIB代理JDK動(dòng)態(tài)代理:其代理對(duì)象必須是某個(gè)接口的實(shí)現(xiàn),它是通過在運(yùn)行期間創(chuàng)建一個(gè)接口的實(shí)現(xiàn)類來完成對(duì)目標(biāo)對(duì)象的代理;其核心的兩個(gè)類是InvocationHandler和Proxy。CGLIB代理:實(shí)現(xiàn)原理類似于JDK動(dòng)態(tài)代理,只是它在運(yùn)行期間生成的代理對(duì)象是針對(duì)目標(biāo)類擴(kuò)展的子類。CGLIB是高效的代碼生成包,底層是依靠ASM(開源的java字節(jié)碼編輯類庫(kù))操作字節(jié)碼實(shí)現(xiàn)的,性能比JDK強(qiáng);需要引入包asm.jar和cglib.jar。使用AspectJ注入式切面和@AspectJ注解驅(qū)動(dòng)的切面實(shí)際上底層也是通過動(dòng)態(tài)代理實(shí)現(xiàn)的。

(6).AOP使用場(chǎng)景:

Authentication權(quán)限檢查

Caching緩存

Contextpassing內(nèi)容傳遞

Errorhandling錯(cuò)誤處理

Lazyloading延遲加載

Debugging調(diào)試

logging,tracing,profilingandmonitoring日志記錄,跟蹤,優(yōu)化,校準(zhǔn)

Performanceoptimization性能優(yōu)化,效率檢查

Persistence持久化

Resourcepooling資源池

Synchronization同步

Transactions事務(wù)管理

另外Filter的實(shí)現(xiàn)和struts2的攔截器的實(shí)現(xiàn)都是AOP思想的體現(xiàn)。

我們是在使用Spring框架的過程中,其實(shí)就是為了使用IOC,依賴注入,和AOP,面向切面編程,這兩個(gè)是Spring的靈魂。

主要用到的設(shè)計(jì)模式有工廠模式和代理模式。

IOC就是典型的工廠模式,通過sessionfactory去注入實(shí)例。

AOP就是典型的代理模式的體現(xiàn)。

代理模式是常用的java設(shè)計(jì)模式,他的特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息等。代理類與委托類之間通常會(huì)存在關(guān)聯(lián)關(guān)系,一個(gè)代理類的對(duì)象與一個(gè)委托類的對(duì)象關(guān)聯(lián),代理類的對(duì)象本身并不真正實(shí)現(xiàn)服務(wù),而是通過調(diào)用委托類的對(duì)象的相關(guān)方法,來提供特定的服務(wù)。

spring的IoC容器是spring的核心,springAOP是spring框架的重要組成部分。

在傳統(tǒng)的程序設(shè)計(jì)中,當(dāng)調(diào)用者需要被調(diào)用者的協(xié)助時(shí),通常由調(diào)用者來創(chuàng)建被調(diào)用者的實(shí)例。但在spring里創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來完成,因此控制反轉(zhuǎn)(IoC);創(chuàng)建被調(diào)用者實(shí)例的工作通常由spring容器來完成,然后注入調(diào)用者,因此也被稱為依賴注入(DI),依賴注入和控制反轉(zhuǎn)是同一個(gè)概念。

面向方面編程(AOP)是以另一個(gè)角度來考慮程序結(jié)構(gòu),通過分析程序結(jié)構(gòu)的關(guān)注點(diǎn)來完善面向?qū)ο缶幊蹋∣OP)。OOP將應(yīng)用程序分解成各個(gè)層次的對(duì)象,而AOP將程序分解成多個(gè)切面。springAOP只實(shí)現(xiàn)了方法級(jí)別的連接點(diǎn),在J2EE應(yīng)用中,AOP攔截到方法級(jí)別的操作就已經(jīng)足夠。在spring中,未來使IoC方便地使用健壯、靈活的企業(yè)服務(wù),需要利用springAOP實(shí)現(xiàn)為IoC和企業(yè)服務(wù)之間建立聯(lián)系。

IOC:控制反轉(zhuǎn)也叫依賴注入。利用了工廠模式將對(duì)象交給容器管理,你只需要在spring配置文件總配置相應(yīng)的bean,以及設(shè)置相關(guān)的屬性,讓spring容器來生成類的實(shí)例對(duì)象以及管理對(duì)象。在spring容器啟動(dòng)的時(shí)候,spring會(huì)把你在配置文件中配置的bean都初始化好,然后在你需要調(diào)用的時(shí)候,就把它已經(jīng)初始化好的那些bean分配給你需要調(diào)用這些bean的類(假設(shè)這個(gè)類名是A),分配的方法就是調(diào)用A的setter方法來注入,而不需要你在A里面new這些bean了。注意:面試的時(shí)候,如果有條件,畫圖,這樣更加顯得你懂了.

AOP:面向切面編程。(Aspect-OrientedProgramming)AOP可以說是對(duì)OOP的補(bǔ)充和完善。OOP引入封裝、繼承和多態(tài)性等概念來建立一種對(duì)象層次結(jié)構(gòu),用以模擬公共行為的一個(gè)集合。當(dāng)我們需要為分散的對(duì)象引入公共行為的時(shí)候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關(guān)系,但并不適合定義從左到右的關(guān)系。例如日志功能。日志代碼往往水平地散布在所有對(duì)象層次中,而與它所散布到的對(duì)象的核心功能毫無關(guān)系。在OOP設(shè)計(jì)中,它導(dǎo)致了大量代碼的重復(fù),而不利于各個(gè)模塊的重用。將程序中的交叉業(yè)務(wù)邏輯(比如安全,日志,事務(wù)等),封裝成一個(gè)切面,然后注入到目標(biāo)對(duì)象(具體業(yè)務(wù)邏輯)中去。

實(shí)現(xiàn)AOP的技術(shù),主要分為兩大類:一是采用動(dòng)態(tài)代理技術(shù),利用截取消息的方式,對(duì)該消息進(jìn)行裝飾,以取代原有對(duì)象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語(yǔ)法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼.

簡(jiǎn)單點(diǎn)解釋,比方說你想在你的biz層所有類中都加上一個(gè)打印‘你好’的功能,這時(shí)就可以用aop思想來做.你先寫個(gè)類寫個(gè)類方法,方法經(jīng)實(shí)現(xiàn)打印‘你好’,然后Ioc這個(gè)類ref=“biz.*”讓每個(gè)類都注入即可實(shí)現(xiàn)。

Java新手如何學(xué)習(xí)Spring、Struts、Hibernate三大框架

學(xué)習(xí)Spring、Struts和Hibernate是很多初學(xué)者都會(huì)經(jīng)歷的階段,要掌握這三個(gè)框架首先要清楚這三個(gè)框架都分別解決了哪些問題,同時(shí)要知道這三大常見框架的使用場(chǎng)景和框架的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。

下面我將分別跟頭條的朋友探討一下這三個(gè)框架的細(xì)節(jié),從它們分別能解決什么問題入手,然后進(jìn)一步分析它們的組成結(jié)構(gòu)。

Java基礎(chǔ)知識(shí)準(zhǔn)備

要開始學(xué)習(xí)Spring、Struts和Hibernate這三個(gè)框架,需要做充足的Java基礎(chǔ)知識(shí)學(xué)習(xí),知道這些知識(shí)才能知道為什么需要使用這三個(gè)框架。下面列出學(xué)習(xí)三大框架之前的基礎(chǔ)知識(shí):

Java面向?qū)ο箝_發(fā)基礎(chǔ)。這部分內(nèi)容包括類、對(duì)象、方法、屬性四大概念,以及封裝、繼承、多態(tài)三大特征的使用。要清晰面向?qū)ο蟮拈_發(fā)過程:類的定義、對(duì)象的創(chuàng)建、方法的調(diào)用。

Java操作數(shù)據(jù)庫(kù)。這部分內(nèi)容包括Java如何與數(shù)據(jù)庫(kù)進(jìn)行溝通,如何通過java完成數(shù)據(jù)庫(kù)的增刪改查等基本操作。這部分內(nèi)容還包括如何使用預(yù)處理模式提高效率,如何使用CallableStatement完成存儲(chǔ)過程調(diào)用,以及如何使用數(shù)據(jù)庫(kù)連接池來優(yōu)化數(shù)據(jù)庫(kù)操作。當(dāng)然還要清楚使用DAO模式來規(guī)范化代碼結(jié)構(gòu),而這也為使用Hibernate打下了一定的基礎(chǔ)。

Javaweb開發(fā)基礎(chǔ)。這部分內(nèi)容包括Servlet、JavaBean、JSP的開發(fā)、調(diào)試、部署,清楚web開發(fā)的范圍定義以及web容器的配置管理。要清楚webMVC結(jié)構(gòu),能使用Model2結(jié)構(gòu)進(jìn)行web程序開發(fā),而這為使用Struts和Spring打下了基礎(chǔ)。

(如果這部分知識(shí)你還不太了解可以關(guān)注我,我在頭條上不斷更新關(guān)于java開發(fā)的系列文章)為什么要使用Hibernate

要清楚為什么使用Hibernate,首先要明白Java操作數(shù)據(jù)庫(kù)存在哪些問題,這些問題應(yīng)該怎么解決?為了描述這些問題,首先我們看一下如何使用JDBC完成數(shù)據(jù)庫(kù)操作,我們看一個(gè)圖示:

這個(gè)圖示描述了Java通過JDBC(一個(gè)專門操作數(shù)據(jù)庫(kù)的JavaAPI)來操作各種數(shù)據(jù)庫(kù)的結(jié)構(gòu)圖,圖中Java代碼直接完成對(duì)數(shù)據(jù)庫(kù)的操作。接下來我們?cè)倏匆幌虏僮鞯脑韴D,也就是java操作數(shù)據(jù)庫(kù)的細(xì)節(jié)描述圖:

通過這張?jiān)韴D,我們可以清楚的看到j(luò)ava如何使用JDBC完成與數(shù)據(jù)庫(kù)的具體交互過程,使用JDBC操作數(shù)據(jù)是Java的官方標(biāo)準(zhǔn),在經(jīng)過不斷的更新后,目前的JDBC性能已經(jīng)得到了顯著的提高。

在具體開發(fā)數(shù)據(jù)庫(kù)操作的時(shí)候,我們通常會(huì)采用DAO模式,使用DAO的目的是模塊化數(shù)據(jù)庫(kù)操作,方便團(tuán)隊(duì)之間的協(xié)同化開發(fā),為了描述DAO,我們看一張圖示:

通過圖示我們能發(fā)現(xiàn),DAO位于業(yè)務(wù)層和數(shù)據(jù)庫(kù)的中間,可以說它完成了一個(gè)映射的任務(wù)。這個(gè)映射就是從面向?qū)ο蟮腏ava代碼向面向關(guān)系的數(shù)據(jù)提供了一個(gè)映射,再簡(jiǎn)單點(diǎn)說就是:DAO可以讓Java程序員以面向?qū)ο蟮姆绞讲僮髅嫦蜿P(guān)系的數(shù)據(jù)庫(kù)。

Hibernate的作用與DAO的作用是一樣的,就是完成這個(gè)映射層的創(chuàng)建,可以說Hibernate是DAO的一個(gè)通用的實(shí)現(xiàn)。通過Hibernate程序員可以很方便的為程序創(chuàng)建與不同數(shù)據(jù)庫(kù)產(chǎn)品之間的映射,從而讓程序員從開發(fā)DAO實(shí)現(xiàn)的細(xì)節(jié)工作中解放出來,這就是為什么要使用Hibernate的原因。

學(xué)習(xí)Hibernate并不復(fù)雜,如果你已經(jīng)有過編寫DAO實(shí)驗(yàn)的經(jīng)驗(yàn),那么使用Hibernate能讓你十分愉快,因?yàn)槟阍僖膊挥镁帉懧闊┑摹胺獍焙汀安鸢贝a了。

為什么要使用Struts和Spring

為什么把Struts和Spring放在一起呢,因?yàn)樗鼈z關(guān)系密切(其實(shí)Spring完全可以獨(dú)立一站式解決問題),放在一起解釋更加清晰。

在學(xué)習(xí)javaweb開發(fā)的時(shí)候,會(huì)學(xué)習(xí)到如何使用基于MVC結(jié)構(gòu)的web開發(fā),具體點(diǎn)就是使用Servlet+Javabean+JSP來完成Model2結(jié)構(gòu)的開發(fā),結(jié)構(gòu)圖如下所示:

圖中完成了使用java代碼的方式來編寫MVC結(jié)構(gòu)的程序,MVC的開發(fā)模式是大家公認(rèn)的有效且經(jīng)典的開發(fā)結(jié)構(gòu),目前基本上web開發(fā)的標(biāo)準(zhǔn)配置。

但是在大家自己編寫MVC結(jié)構(gòu)的時(shí)候,會(huì)比較麻煩(如果這部分內(nèi)容不清楚,關(guān)注我,我會(huì)在后續(xù)文章中詳細(xì)闡述如何使用java代碼完成mvc開發(fā)),因?yàn)樗械膶?dǎo)航代碼都需要自己編寫,將來調(diào)整的時(shí)候也非常麻煩。Struts就很好的解決了這個(gè)問題,程序員可以通過配置來完成程序的調(diào)整,節(jié)省了大量的編碼時(shí)間,也讓團(tuán)隊(duì)合作開發(fā)變得更容易了。簡(jiǎn)單的說Struts就是完成了程序MVC結(jié)構(gòu)的實(shí)現(xiàn)。

那么在上圖中,我們還會(huì)發(fā)現(xiàn)一個(gè)問題,在web容器中還運(yùn)行著Model組件,而通常Model組件就是JavaBean組件。也就是說web容器既提供了web組件的池功能,又提供了業(yè)務(wù)組件的池功能,這勢(shì)必會(huì)影響業(yè)務(wù)組件的運(yùn)行性能。為了解決這個(gè)問題,出現(xiàn)了兩個(gè)陣營(yíng):官方標(biāo)準(zhǔn)采用了大名鼎鼎的EJB,解決方案如圖所示:

圖中清晰的呈現(xiàn)了EJBserver,已經(jīng)把業(yè)務(wù)模塊從web容器中剝離出來了。而另一個(gè)解決方案就是Spring,它也是池化業(yè)務(wù)模塊,只不過Spring更加輕量級(jí),所以得到了廣大程序員的喜愛。也就是從此,java開發(fā)背上了“較重”的標(biāo)簽。但是EJB目前仍然有它自己的特點(diǎn),雖然重,但是功能也十分強(qiáng)大。

所以簡(jiǎn)單的說就是Struts完成了MVC框架的實(shí)現(xiàn),Spring提供了業(yè)務(wù)模塊的輕量級(jí)容器。

學(xué)習(xí)步驟

其實(shí)寫到這,大家已經(jīng)清楚了學(xué)習(xí)的步驟,因?yàn)槲恼碌拿枋鲞^程就是一個(gè)順序的學(xué)習(xí)步驟。

在簡(jiǎn)單總結(jié)一下:

學(xué)習(xí)基礎(chǔ)開發(fā)

學(xué)習(xí)數(shù)據(jù)庫(kù)開發(fā)

學(xué)習(xí)web開發(fā)

學(xué)習(xí)Hibernate

學(xué)習(xí)Struts

學(xué)習(xí)Spring

整合

建議多做實(shí)驗(yàn),也要經(jīng)常到三大框架的官網(wǎng)多看一看,如果應(yīng)用基礎(chǔ)好的讀者,可以到這幾個(gè)框架的官方社區(qū)多看看,社區(qū)里有很多能力很強(qiáng)的開發(fā)者,跟他們交流一定能讓你受益匪淺。

如果大家覺得這篇文章幫助你了解這三大框架,那么請(qǐng)關(guān)注我,跟我一起學(xué)習(xí)java知識(shí),學(xué)習(xí)互聯(lián)網(wǎng)知識(shí)。

謝謝!

JAVA中用Struts2上傳文件以后,如何將文件的路徑保存到我的數(shù)據(jù)庫(kù)中的指定ID中呢

【文件上傳】 form表單 //必須設(shè)置method="post"enctype="multipart/form-data"

struts.xml配置文件中,在result之后使用攔截器,設(shè)置上傳文件類型 在Action中規(guī)定書寫名稱 XXXFileName //這個(gè)格式struts可以自動(dòng)注入上傳文件的文件名,加后綴名 XXXContextType //這個(gè)格式struts可以自動(dòng)注入上傳文件的文件類型 【文件下載】 用url傳參或表單提交,將要下載的文件名稱,傳過去 struts.xml中配置 //下載的時(shí)候不需要地址跳轉(zhuǎn),所以沒有result的值 如果需要struts注入傳參,可以在result標(biāo)簽之上添加param標(biāo)簽 result配置type=stream 在action類中 方法只需要返回是否成功即可,在InputStream對(duì)象的get方法中進(jìn)行重寫

struts.xml配置文件的作用

struts.xml為Struts2的核心配置文件。struts.xml文件主要負(fù)責(zé)管理應(yīng)用中的Action映射,以及該Action包含的Result定義等。struts.xml中主要配置Struts項(xiàng)目的一些全局的屬性,用戶請(qǐng)求和響應(yīng)Action之間的對(duì)應(yīng)關(guān)系,以及配置Action中可能用到的參數(shù),以及處理結(jié)果的返回頁(yè)面。還包括各種攔截器的配置等。

好了,文章到這里就結(jié)束啦,如果本次分享的struts2攔截器工作原理和struts2的攔截器問題對(duì)您有所幫助,還望關(guān)注下本站哦!