Ⅰ struts2過濾器都做了什麼StrutsPrepareAndExecuteFilter過濾器的地
FilterDispatcher是早期struts2的過濾器,後期的都用StrutsPrepareAndExecuteFilter了,如 2.1.6、2.1.8。StrutsPrepareAndExecuteFilter名字已經很能說明問題了,prepare與execute,前者表示准備,可以說是指filter中的init方法,即配製的導入;後者表示進行過濾,指doFilter方法,即將request請求,轉發給對應的 action去處理。
FilterDispatcher是struts2.0.x到2.1.2版本的核心過濾器.!
StrutsPrepareAndExecuteFilter是自2.1.3開始就替代了FilterDispatcher的.!
這樣的改革當然是有好處的.!
為什麼這么說.? 應該知道如果我們自己定義過濾器的話, 是要放在strtus2的過濾器之前的, 如果放在struts2過濾器之後,你自己的過濾器對action的過濾作用就廢了,不會有效!除非你是訪問jsp/html!
那我現在有需求, 我必須使用Action的環境,而又想在執行action之前拿filter做一些事, 用FilterDispatcher是做不到的.!
那麼StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在這兩個過濾器之間加上我們自己的過濾器.!
給你打個比喻, 現在有病人要做手術, 現在struts2要做兩件事, 搭病床(環境),執行手術.! 那麼打麻葯的工作呢.? 不可能要病人站著打吧, 所以必須有病床的環境,打完麻葯之後再動手術.! 這個比喻非常形象了.!
如果是2.1.3之前的版本,用org.apache.struts2.dispatcher.FilterDispatcher,
否則,用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。
從Struts2.1.3開始,將廢棄ActionContextCleanUp過濾器,而在StrutsPrepareAndExecuteFilter過濾器中包含相應的功能。
三個初始化參數:
1、config參數:指定要載入的配置文件。逗號分割。
2、actionPackages參數:指定Action類所在的包空間。逗號分割。
3、configProviders參數:自定義配置文件提供者,需要實現ConfigurationProvider介面類。逗號分割。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.cjm.web.action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果程序報類找不到異常,且後面有 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
等信息,可能是你的版本問題.解決方法是確定你的struts版本,如果是2.1.3之前的版本,用 org.apache.struts2.dispatcher.FilterDispatcher,以後的版本則配置org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
Ⅱ 如何配置struts2的過濾器
你說的是攔截器吧
第一步:創建一個類實現Intercepter介面並實現其中方法
第二步:注冊攔截器(在struts.xml)如:
<package name="cust"
namespace="/cust"
extends="struts-default">
<interceptors>
<!-- 注冊攔截器 -->
<interceptor name="first"
class="com.interceptor.FirstInterceptor"/>
<interceptor name="second"
class="com.interceptor.SecondInterceptor"/>
<!-- 注冊攔截器棧,將所有攔截器打包在一起 -->
<interceptor-stack name="mystack">
<interceptor-ref name="first"/>
<interceptor-ref name="second"/>
<!-- 引用自定義的攔截器時,會使struts2自帶的攔截器失效
因此,要將默認的攔截器加入到自定義的攔截器棧中 -->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!--第三步: 引用攔截器 ,
<action name="toUpdateCustomer"
class="com.action.ToUpdateCustomerAction"
method="execute">
<!-- 引用攔截器 ,
<interceptor-ref name="first"/>
<interceptor-ref name="first"/>-->
<!-- 引用攔截器棧,會一次將所有的攔截器引用 -->
<interceptor-ref name="mystack"/>
<result name="success">
/WEB-INF/cust/update_customer.jsp
</result>
</action>
</package>
供參考
Ⅲ struts2 過濾器的意思
你得報錯信息是什麼啊。你導入struts2的包了么
Ⅳ 如何在CentOS上搭建 Struts2+Spring+Hibernate的運行環境
Struts2+Spring+Hibernate是J2EE的最新流行框架。本篇是我搭建這個框架的經驗總結,有很多人搭建這個框架總會遇到
大大小小的問題,網上也沒有什麼行之有效的方案或成體系的介紹,所以我就決定總結一下我的搭建過程。給一些搭
建尚存問題的朋友提供幫助。
我用這個框架,實現的是基本的CRUD功能的一個雇員管理系統,本來打算豐富一下功能,但是一直沒能抽出空去搞。
目前版本暫定為1.0,除了CRUD外還配置了表單驗證框架JSValidation。功能都能很順利的實現。
現在分享部分源碼,來說明一些注意事項。
以下是部分搭建過程及源碼:
1.先組合實現Hibernate3.2+Spring2.5支持,刪除hibernate.cfg.xml文件,修改applicationContext.xml文件的內容,增加SessionFactory和dataSource的設置。
2.通過MyEclipse的向導方式,生成POJO類和對應的映射文件。
3.修改applicationContext.xml文件中<property name="mappingResources">元素的內容。
4.編寫DAO介面和實現類。
5.修改applicationContext.xml文件,增加對Dao實現類的配置。
6.組合Struts2和Spring2.5,修改web.xml文件,增加struts2的所需要的過濾器配置。
7.增加struts2相應類庫,增加struts2與spring的配置jar包。
8.拷貝struts.xml文件到src根目錄下,再修改struts.xml文件,進行常量配置。
9.修改web.xml文件,配置Spring監聽器,和上下文變數。並增加OpenSessionInViewFilter的設置。
10.寫入action類。
11.配置struts.xml文件。
12.修改applicationContext.xml
13.編寫Jsp文件。
14.載入運行項目。
下面是關鍵文件的源碼:
struts.xml源碼:
Ⅳ struts2 自帶過濾器
過濾器很多,不知道你說的哪個
變化最大的就是struts2
的核心控制器從servlet變成了filter,並且內ACTION由單例變成了多容例,並且還包含很多分支過濾器的配置,真要用功能可以說異常強大,曾今想用它來直接做許可權控制,可惜太復雜了·······放棄了
Ⅵ struts2過濾器可以過濾什麼
WEB.xml中配置struts2的代碼片段
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
'/*'是攔截所有的url,你這里可以配置你的過濾規則的啊(例如/*.jsp、/*_aaa.jsp等)專,但是一般不屬需要修改的,改了以後,擴展起來會給你帶來一些的不必要的麻煩的
Ⅶ struts2過濾器
WEB.xml中配置struts2的代碼片段
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
'/*'是攔截所有的url,你這里可以配置你的過濾規則的啊(例如/*.jsp、/*_aaa.jsp等),但是版一般不需要修改的,改權了以後,擴展起來會給你帶來一些的不必要的麻煩的
Ⅷ java struts2過濾器問題
是session為空吧。session你是什麼時候創建的,你先判斷一下session是否為空再去取attribute
Ⅸ Java框架Struts2的攔截器和過濾器有什麼區別
過濾器,是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts的
action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者
struts的action前統一設置字元集,或者去除掉一些非法字元.
攔截器,是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前列印出字元串(或者做其它業務邏輯的操作),也可以在你調用方法後列印出字元串,甚至在你拋出異常的時候做業務邏輯的操作。
攔截器與過濾器的區別:
執行順序:過濾前 - 攔截前 - Action處理 - 攔截後 -
過濾後。個人認為過濾是一個橫向的過程,首先把客戶端提交的內容進行過濾(例如未登錄用戶不能訪問內部頁面的處理);過濾通過後,攔截器將檢查用戶提交數據的驗證,做一些前期的數據處理,接著把處理後的數據發給對應的Action;Action處理完成返回後,攔截器還可以做其他過程(還沒想到要做啥),再向上返回到過濾器的後續操作。
Ⅹ struts2過濾器干什麼用的
攔截器的工作原理:
當接收到一個httprequest
,
a)當外部的httpservletrequest到來時
b)初始到了servlet容器
傳遞給一個標准內的過濾器鏈
c)FilterDispatecher會去查找容相應的ActionMapper,如果找到了相應的ActionMapper它將會將控制許可權交給Actio