欧美经典成人在观看线视频_嫩草成人影院_国产在线精品一区二区中文_国产欧美日韩综合二区三区

當前位置:首頁 > 數(shù)據(jù)庫 > 正文

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

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

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

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

http status 404報錯怎么解決

httpstatus404報錯解決方法如下

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

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

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

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

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

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

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

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

ioc和aop原理和機制

IoC(InversionofControl)

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

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

(3).在系統(tǒng)運行中,動態(tài)的向某個對象提供它所需要的其他對象。

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

AOP(AspectOrientedProgramming)

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

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

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

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

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

(6).AOP使用場景:

Authentication權(quán)限檢查

Caching緩存

Contextpassing內(nèi)容傳遞

Errorhandling錯誤處理

Lazyloading延遲加載

Debugging調(diào)試

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

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

Persistence持久化

Resourcepooling資源池

Synchronization同步

Transactions事務(wù)管理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Java基礎(chǔ)知識準備

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

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

Java操作數(shù)據(jù)庫。這部分內(nèi)容包括Java如何與數(shù)據(jù)庫進行溝通,如何通過java完成數(shù)據(jù)庫的增刪改查等基本操作。這部分內(nèi)容還包括如何使用預(yù)處理模式提高效率,如何使用CallableStatement完成存儲過程調(diào)用,以及如何使用數(shù)據(jù)庫連接池來優(yōu)化數(shù)據(jù)庫操作。當然還要清楚使用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)進行web程序開發(fā),而這為使用Struts和Spring打下了基礎(chǔ)。

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

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

這個圖示描述了Java通過JDBC(一個專門操作數(shù)據(jù)庫的JavaAPI)來操作各種數(shù)據(jù)庫的結(jié)構(gòu)圖,圖中Java代碼直接完成對數(shù)據(jù)庫的操作。接下來我們再看一下操作的原理圖,也就是java操作數(shù)據(jù)庫的細節(jié)描述圖:

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

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

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

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

學(xué)習(xí)Hibernate并不復(fù)雜,如果你已經(jīng)有過編寫DAO實驗的經(jīng)驗,那么使用Hibernate能讓你十分愉快,因為你再也不用編寫麻煩的“封包”和“拆包”代碼了。

為什么要使用Struts和Spring

為什么把Struts和Spring放在一起呢,因為它倆關(guān)系密切(其實Spring完全可以獨立一站式解決問題),放在一起解釋更加清晰。

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

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

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

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

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

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

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

其實寫到這,大家已經(jīng)清楚了學(xué)習(xí)的步驟,因為文章的描述過程就是一個順序的學(xué)習(xí)步驟。

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

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

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

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

學(xué)習(xí)Hibernate

學(xué)習(xí)Struts

學(xué)習(xí)Spring

整合

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

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

謝謝!

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

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

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

struts.xml配置文件的作用

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

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