㈠ 為什麼這個js最後filter的結果只有true
filter用於對數組進行過濾,數組中的元素逐個經過checkAlt函數判斷,checkAlt函數返回結果為true的元素才會作為filter的結果返回.
ages中有4個元素,其中只有元素『true』代入checkAlt函數後返回結果為true,所以filter後的結果是兩個true。
為了消除歧義便於理解, 你可以把 ages 數組改成[1, 0, 0, 1],這樣filter後的結果就是1,1.
㈡ servlet filter和springMVC攔截器的區別
在struts2中用過filter過濾器,在springmvc中還有攔截器,它們都能過濾請求,但是到底有什麼區別呢?
一、定義
攔截器 :是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前列印出字元串(或者做其它業務邏輯的操作),也可以在你調用方法後列印出字元串,甚至在你拋出異常的時候做業務邏輯的操作。
過濾器:是在javaweb中,你傳入的request、response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts的action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者 struts的action前統一設置字元集,或者去除掉一些非法字元.。
二、xml文件配置
1.filter
該過濾器的方法是創建一個類XXXFilter實現此介面,並在該類中的doFilter方法中聲明過濾規則,然後在配置文件web.xml中聲明他所過濾的路徑
<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
2.Interceptor
它也要實現HandlerInterceptor 介面,這里只介紹方法註解配置
<!-- 攔截器 -->
<mvc:interceptors>
<!-- 多個攔截器,順序執行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,將攔截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- 攔截器 -->
<mvc:interceptors>
<!-- 多個攔截器,順序執行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,將攔截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
三、具體區別
filter
Interceptor
多個的執行順序
根據filter mapping配置的先後順序
按照配置的順序,但是可以通過order控制順序
規范
在Servlet規范中定義的,是Servlet容器支持的
Spring容器內的,是Spring框架支持的。
使用范圍
只能用於Web程序中
既可以用於Web程序,也可以用於Application、Swing程序中。
深度
Filter在只在Servlet前後起作用
攔截器能夠深入到方法前後、異常拋出前後等
四、總結
兩者的本質區別:攔截器是基於java的反射機制的,而過濾器是基於函數回調。從靈活性上說攔截器功能更強大些,Filter能做的事情,他都能做,而且可以在請求前,請求後執行,比較靈活。Filter主要是針對URL地址做一個編碼的事情、過濾掉沒用的參數、安全校驗(比較泛的,比如登錄不登錄之類),太細的話,還是建議用interceptor。不過還是根據不同情況選擇合適的。
㈢ java ajax 通過filter攔截該怎麼返回彈框提示
一般彈框在前端是實現的,後端只負責處理邏輯
在filter里,通過servletRequest可以拿到數據,判斷你想要攔截的,再通過servletResponse,返回你的攔截信息,在前端接收,顯示提示框
㈣ servlet中filter有什麼用
首先介紹一下Filter到底是個什麼東西:
根據這個單詞就能猜到Filter的中文意思是過濾器,事實當然也是這樣的;Filter是Servlet中的一個重 要組件。
接下來簡單說說Filter這個介面中的常用方法吧。
①.init():類似於Servlet生命周期中的init()方法,用於初始化一些關於Filter介面的參數;只在Servlet 啟動時調用一次。
②.doFilter():類似於Servlete生命周期中的service()方法,該方法用於存放邏輯代碼。
③.destory():同理類似於Servlet生命周期中的destroy()方法,當Servlet容器銷毀前調用該方法。
然後說說如何創建一個Filter的HelloWorld。
①.創一個抽象的Java類,該類實現了Filter介面,同時實現了Filter介面的部分方法,例如
init(),destroy()方法。具體實現代碼如下:
public abstract class HttpFilter implements Filter {
private HttpServletRequest request;
private HttpServletResponse response;
//重寫Filter介面的destory方法
public void destroy() {}
//重寫doFilter方法,這個方法在這里主要作用是將ServletRequest,ServletResponse對象轉為對 //應的HttpServletRequest,HttpServletResponse對象
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
this.request = (HttpServletRequest) arg0;
this.response = (HttpServletResponse) arg1;
doFilter(request, response, arg2);
}
//該方法交由繼承該抽象類的實現類來實現
public abstract void doFilter(HttpServletRequest request,HttpServletResponse response,
FilterChain chain);
private FilterConfig config;
//這個方法是為了方便子類獲取ServletContext對象
public FilterConfig getFilterConfig(){
return config;
}
//該方法一般不建議重寫,因為重寫該方法會出現某些錯,基於此提供了下面的無參數的init()方法
public void init(FilterConfig arg0) throws ServletException {
this.config = arg0;
init();
}
public void init(){}
}
②.一個繼承了HttpFilter抽象類的實現類,代碼如下,只要功能是為了實現禁用瀏覽器緩存
public class NoCacheFilter extends HttpFilter{
@Override
public void doFilter(HttpServletRequest request,
HttpServletResponse response, FilterChain chain) {
//通過過濾器實現頁面禁用瀏覽器緩存
response.setDateHeader("Expires", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
}
}
③.將該實現類配置到web.xml文件中,配置方式和配置普通的Servlet一樣,具體代碼
<filter>
<filter-name>NoCacheFilter</filter-name>
<filter-class>com.xingyun.servlet.filter.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>NoCacheFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
至此,就實現了一個簡單的用於禁用瀏覽器緩存的過濾器了。
上面說了這么多,在開發中哪些地方中能用到Filter才是最終目的,好了,我大概說一下我在開發中用到的地方。
①.上面提到的禁用瀏覽器的緩存。這個真的很重要,有時候修改了前端頁面,就是因為緩存的原因,導致頁面不 能及時刷新過來,真的很蛋疼。
②.解決中文亂碼的問題。在開發中,頁面可能達到幾十個甚至上百個,在每個頁面處理中文亂碼的問題很煩,但 是通過過濾器,那麼問題就變得很簡單了。
③.通過檢查用戶是否登錄來管理用戶是否可以訪問某些頁面,比如個人隱私等頁面。這個用的也是蠻多的。
㈤ ...可視化的web前端開發採用什麼樣的架構比較合適
web前端分為網頁設計師、網頁美工、web前端開發工程師
首先網頁設計師是對網頁的架構、色彩以及網站的整體頁面代碼負責
網頁美工只針對UI這塊兒的東西,比如網站是否做的漂亮
web前端開發工程師是負責交互設計的,需要和程序猿進行交互設計的配合。
web前端需要掌握的有腳本技術javascript DIV+CSS現下最流行的頁面搭建技術,ajax和jquery以及簡單的後端程序等。 後端的話可供開發的語言有 asp、php、jsp、.NET 這些後端開發語言的話搭建環境都不一樣,具體如果你想學的話看是想從事前端部分還是後端程序部分。後端開發如果有一定的條件的話可以轉為軟體開發。不過要有一定的語言基礎,類似java語言。C#等。關鍵是看你的興趣愛好。。
這個到後期不會區分這么細,做前端到後期也會懂一些後端的技術,反之,後端也是。
在我們實際的開發過程中,我們當前這樣定位前端、後端開發人員。
1)前端開發人員:精通JS,能熟練應用JQuery,懂CSS,能熟練運用這些知識,進行交互效果的開發。
2)後端開發人員:會寫Java代碼,會寫sql語句,能做簡單的資料庫設計,會Spring和iBatis,懂一些設計模式等。
現在來看,我們對前後端的要求還是蠻低的,尤其是後端,新員工經過培訓之後都是可以參與到後端開發的,沒有太高的技術門檻,唯一需要做的就是先變成熟練工種,這個階段沒有涉及到設計模式、架構、效率等一些列問題。
還是先google一下,看看網上對Web前端開發、Web後端開發分別是什麼?
Web前端: 顧名思義是來做Web的前端的。我們這里所說的前端泛指Web前端,也就是在Web應用中用戶可以看得見碰得著的東西。包括Web頁面的結構、Web的外觀視覺表現以及Web層面的交互實現。
Web後端:後端更多的是與資料庫進行交互以處理相應的業務邏輯。需要考慮的是如何實現功能、數據的存取、平台的穩定性與性能等。
我們再來看看大公司對前後端人員招聘的要求,通過這個角度看看前端、後端的技術要求:
Web前端:
1)精通HTML,能夠書寫語義合理,結構清晰,易維護的HTML結構。
2)精通CSS,能夠還原視覺設計,並兼容業界承認的主流瀏覽器。
3)熟悉JavaScript,了解ECMAScript基礎內容,掌握1~2種js框架,如JQuery
4)對常見的瀏覽器兼容問題有清晰的理解,並有可靠的解決方案。
5)對性能有一定的要求,了解yahoo的性能優化建議,並可以在項目中有效實施。
6)......
Web後端:
1)精通jsp,servlet,java bean,JMS,EJB,Jdbc,Flex開發,或者對相關的工具、類庫以及框架非常熟悉,如Velocity,Spring,Hibernate,iBatis,OSGI等,對Web開發的模式有較深的理解
2)練使用oracle、sqlserver、mysql等常用的資料庫系統,對資料庫有較強的設計能力
3)熟悉maven項目配置管理工具,熟悉tomcat、jboss等應用伺服器,同時對在高並發處理情況下的負載調優有相關經驗者優先考慮
4)精通面向對象分析和設計技術,包括設計模式、UML建模等
5)熟悉網路編程,具有設計和開發對外API介面經驗和能力,同時具備跨平台的API規范設計以及API高效調用設計能力
6)......
從幾個公司的招聘要求可以看到,做Web開發,對前端和後端的要求是各自所不同的。而我們目前的實際情況,也和這個差不多,但是,我們無論在知識的掌握程度上,還是知識掌握的寬度上,都是不夠的。
首先,我們在前端缺乏積累,沒有沉澱,專業的前端技術的積累是從去年才開始的,同時,在前端也缺乏支撐與高手,所以,走起來比較困難。同時,前端人員培養的較少,一個原因是對前端了解太少,另外一個原因就是對前端與後端的工作比例估計不足。所幸,我們在這一年也在前端有了很快的進步,培養了幾個優秀的開發人員,有意識的解決了前端的用戶體驗,這都是可喜的。今年,需要更進一步,專業化。
其次,我們在後端發展的不夠寬,後端的知識體系已經比較完善,但是,很多應用點都沒有涉及到。同時,對現有技術框架的理解都不夠深入,太浮躁。我們目前的設計團隊在解決互聯網高並發、大數據量的存取上經驗與能力都還不足,需要正視這些問題。後端技術的發展需要更加的精進,以解決實際存在的問題為主。
最後,我們在前端、後端都缺乏熟練工,這會影響到開發的速度,同時,也不利於後期技術的研究。
㈥ Web 前端怎樣入門
方法:
第一:理清Web前端的知識結構。要想高效學習Web前端知識,首先應該搞清楚Web前端都包括哪些技術結構。Web前端開發雖然技術難度並不高,但是技術細節卻比較多,內容也比較雜。Web前端的基礎包括三大部分,包括Html、CSS和JavaScript,其中JavaScript是學習的重點,也是難點。另外,vue等框架也是需要熟練掌握的。
第二:緊跟技術發展趨勢。目前Web前端的技術發展趨勢有三個,其一是前端開發數據化;其二是前端開發高效化;其三是前端開發全棧化。前端開發數據化主要是大數據發展的影響,在大數據的推動下,Web前端逐漸涉及到了大量的數據展示任務。前端開發高效化主要體現在Web前端正在進行獨立部署,前端與後端的溝通主要通過資源介面的方式來進行。前端開發全棧化也是一個比較明顯的趨勢,比如Nodejs的應用。
第三:注重動手實踐能力的培養。學習前端開發一定要注重動手實踐能力的培養,因為前端開發的細節比較多,所以只有多操作才能逐漸熟悉。
前端開發目前被稱為「大前端」,整個前端開發也被賦予了更多的含義,包括Web前端開發、移動端開發、大數據呈現端開發以及部分後端開發任務等等。所以,想要在前端行業中走的更遠,一定要注重知識結構的豐富性。
與其他編程語言相比,前端是公認的入行門檻較低的一門語言,但依然有很多人在學習之前會問零基礎學習web前端難不難,要多久才能學會。學習的難易和時間當然是取決於學習的方式。
前端入門簡單,但是深入學習之後,還是有一定學習難度的。如果你是零基礎自學web前端的話,那麼所花費的時間與精力是不可估計的。 如果系統學習5個月的時間可以幫助你快速成長為合格的web前端工程師。
至於視頻教程,我這里有很多前端的全套教程,如果你需要的話,可以加一下我的學習交流裙裙,找我要就行了!
㈦ 學習web前端要注意什麼工作中最常用的技術是什麼怎樣著手學更快
都說前端入門低,想學好前端絕對不容易,可以說現在前端所需要掌握的技能超過後端和以往,新技術概念層出不窮,到底所謂的前端都應該幹些什麼都應該會寫什麼呢?
本人身邊有太多的人會切幾張圖, 會用jQuery做個特效, 會從bootstrap里復制粘貼, 會用html游戲框架寫個flappy bird, 會在Github里找各種模板自和庫拼拼湊湊, 就口口聲聲大言不慚的稱自己為前端工程師. 說什麼前端好簡單啊, 前端找工作好難啊, 沒有出路啊, 想轉行啊. 甚至有更多的人還不明白什麼是HTML, 就到處問(知乎里尤其多)怎麼開始學前端啊, 前端前景好不好啊. 依照本人的經驗, 什麼東西難不難, 什麼東西好不好, 可不是這樣問出來的. 我相信在這在這種網路信息資源及其豐富的年代, 花個半小時自行搜索一下你應該可以得到你想要的答案.
好了言歸正傳, 前端工程師真的是一個無關緊要的職位么? 我們先來看看前端工程師都要做些什麼, 看看那些稱自己是'所謂'的前端同學們都能走到哪一步.
這里直接跳過最基本的HTML+CSS+JS, 包括但不僅限於:
- HTML各種element怎麼用什麼時候用?
- Event? EventLitsener? HTML中觸發event以及JS中處理event?
- DOM tree? 添加? 修改? 刪除? 搜索? 遍歷? 選擇? children? parent? sibling?
- 什麼是window? 什麼是document?
- JS基本語法? function? loop&condition? scope&closure? array&object? this?
- CSS 什麼是box modal? position? float? 各種選擇器(*, >, ~, :nth-child)?
如果看到這里有任何一項完全沒聽說過沒用過, 或者查各種文檔後'大概'知道怎麼用的同學們, 很遺憾, 你們現在算不上是一個合格的前端工程師. 如果不是, 請繼續.
### 程序員的基本素質和知識
(有些人覺得前端不同於傳統意義上的程序員, 這點我十分不贊同. 或許把前端工程師叫做JS程序員更加貼切, HTML和CSS就好比其他語言中的UI庫)-
- 高數, 基本的概率統計 (連簡單的微分方程都不會解的朋友們就不要稱自己為前端人員了!)
- 基本數據結構 能用JS寫出linked list, stack, queue, (binary)tree, graph, hashtable么?
- 基本演算法 能用JS實現各種search(linear, binary..), 各種sort(bubble, insertion, merge, quick, selection), 以及樹的搜索(Breadth First/Depth First)和遍歷(3種順序)么?
- 設計模式 知道什麼是singleton, factory, strategy, decrator么?
- Git 不要只是停留在把Github當做一個網路儲存器的層面上, 知道branch, diff, merge么?
- 基本的英語能力(不要求聽說, 只用來讀/寫文檔資料)
- 基本的計算機知識 知道位運算, 溢出, thread, lock, concurrency, parallelism么?
- 熟悉unix的基本命令么? 知道ssh public/private key都是幹嘛的么?
- 知道正則么? 能夠熟練的使用么?
- 能寫出詳細的注釋/文檔, 讓閱讀你代碼的人知道你要幹嘛么? 能短時間內快速地讀懂來自你同事或者其他地方(github, blog)的代碼, 知道什麼東西應該寫在什麼地方, 以便迅速地參與其中么?
- 給你一個你從來沒有接觸過的庫/語言, 能能夠在較短的時間內在你的代碼里正確使用么?
- 有一個得心應手用的熟練地編輯器/IDE么? 不要求大家都是vim/emacs大神, 但也不要做什麼都是用滑鼠來點.
- 基本的檢索查詢能力(google, stackoverflow, MDN)
- 單獨思考解決問題的能力, 團隊合作, 與人相處
如果以上的內容都有所了解(這里不會強調精通), 恭喜你, 你擁有了成為前端工程師的基礎知識. 繼續.
### 前端專業知識
- 知道什麼是AMD, COMMONJS么? 知道call, apply, bind么? 知道JS中foreach, filter, some, every么? 知道怎麼實現functional JS(curry等)么?
- 知道各種所謂的高級HTML的API(File, Web Audio, WebSocket)么?
- 知道各種CSS Preprocessors么? 能講出他們各自的優點和缺點么? 熟悉並且會用其中的一種么?
- 知道各種CSS框架么? 能講出他們各自的優點和缺點么? 熟悉並且會用其中的一種么?
- 知道canvas, SVG么?
- 知道怎麼把你的東西做成responsive, cross-browser support么?
- 知道什麼是SEO並且怎麼優化么? 知道各種meta data的含義么?
- 知道什麼是Ajax, restful, get, post么? 知道怎麼和後台交互么?
- 知道各種JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能講出他們各自的優點和缺點么? 熟悉並且會用其中的一種或多種么?
- 知道什麼是webkit么? 知道怎麼用瀏覽器的各種工具來調試和debug代碼么?
- 知道現在前端一般的工作流程(gulp, grunt, git, svn, npm)么?
- 知道怎麼測試代碼么? 知道BDD, TDD, Unit Test么? 知道怎麼測試你的前端工程么(mocha, sinon, jasmin, qUnit..)?
- 知道前端templating(Mustache, underscore, handlebars)是幹嘛的, 怎麼用么?
- 知道npm, V8, node, express, socket么? (這里補充一點, 現在越來越多的公司都採用: '前端網頁 -> 前端後台 -> 後台'這種構架來搭建東西, 也就是說, 前端工程師不僅要做傳統前端的網頁, 還要寫自己的後台, 來跟真正的後台進行交互, 至於前端的後台用什麼語言來寫, 一般是node/python/ruby, 不太會用到龐大的java, 所以這里我把node列為前端工程師必須要掌握的技能之一) 知道cache, authentication么?
- (如果要用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?
- 另外, 前端這個行業跟傳統的c/c++/java程序員還是有一定的差別的. 由於是新興產業, 所以各種行業標准, 框架, 庫會隨時隨地的產生和更新 (作為一個c程序員, 十年前怎麼寫東西現在還是怎麼寫東西). 今天出了node和react, 明天又出了io和mean. 所以, 積極關注各種前端產品, 跟上變化的節奏, 也是身為一個前端程序員必備的技能之一. 知道ECMAScript 6里怎麼寫class么? 知道react, flux, reflux么? 知道polymer, dart么? 知道meteor么?
以上是摘自知乎某大牛的文章=====
感覺對新人挺打擊的,不過理清從大體上重新認識前端對學習理解也有一定幫助,只要自己想好了就堅持下去,學前端的最重要的隨時學習能力,應該前端領域知識面涵蓋太廣,很多技術也不成熟,正在發展中,只能不停學習各種新技術新知識。。能分辨哪些技術是必須掌握的,哪些是少數人創造用來提」升逼格「的概念,能把PS+HTML+CSS+js玩熟,會一兩個框架,懂點設計。就可以了
㈧ java 前端訪問後台 , filter 過濾器用 request 跳轉回index頁面為什麼又進了一次 doFilter
我猜到的是一種場景,你的頁面裡面有兩個其他的資源,比如.js .css等,這倆的路由也在你的過濾器范圍內,所以就也近如filter了
㈨ 關於struts2的filter問題
你老師說的是沒錯的,本來就是要經過默認的攔截器棧前端處理才到action處理,然後再到默認攔截器棧的後處理。你把hibernate那個filter配置放在struts2 filter前面試試