在struts2中實現去掉字尾及url重寫
寫道
首先,這要用到兩個軟體包,一個是SmartUrls(Struts2的外掛,下載地址:http://code.google.com/p/smarturls-s2/downloads/list),還有就是urlrewritefilter(下載地址:http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip).
要想去掉struts2的字尾,就要這樣配置filter:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.texturemedia.smarturls.SmartURLsFilter</filter-class>
</filter>
用這個代替struts2的核心過濾器,FilterDispatcher。不必擔心struts2不起作用了,因為這個過濾器是繼承自FilterDispatcher的。同時在struts.properties中加入struts.action.extension= ,不設任何值。
然後就是配置UrlRewriteFilter,如下
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
在配置filter-mapping的時候,注意urlrewritefilter的應該在前面。然後urlrewritefilter的重寫該怎麼用大家可以參看文件,這裡就不再贅述。
當使用時發現重寫後,filterChain上只有一個urlrewritefilter,而沒有經過smartUrls就發到了請求的資源,得到的自然是一個404錯誤。於是我參看urlrewritefilter的原始碼發現,如果重寫url成功的話,將會呼叫RequestDispatcher的forward方法轉發到資源,而重寫不成功或者是沒有重寫才會呼叫filterChain.dofilter。所以struts2的filter-mapping應該這樣配置
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
然後就 OK 了
最後說明一點,這要在支援servlet2.4以上規範的容器中才氣作用,因為servlet2.3規範裡面,過濾器只支援request過濾,不支援轉發之類的過濾
要想去掉struts2的字尾,就要這樣配置filter:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.texturemedia.smarturls.SmartURLsFilter</filter-class>
</filter>
用這個代替struts2的核心過濾器,FilterDispatcher。不必擔心struts2不起作用了,因為這個過濾器是繼承自FilterDispatcher的。同時在struts.properties中加入struts.action.extension= ,不設任何值。
然後就是配置UrlRewriteFilter,如下
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
在配置filter-mapping的時候,注意urlrewritefilter的應該在前面。然後urlrewritefilter的重寫該怎麼用大家可以參看文件,這裡就不再贅述。
當使用時發現重寫後,filterChain上只有一個urlrewritefilter,而沒有經過smartUrls就發到了請求的資源,得到的自然是一個404錯誤。於是我參看urlrewritefilter的原始碼發現,如果重寫url成功的話,將會呼叫RequestDispatcher的forward方法轉發到資源,而重寫不成功或者是沒有重寫才會呼叫filterChain.dofilter。所以struts2的filter-mapping應該這樣配置
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
然後就 OK 了
最後說明一點,這要在支援servlet2.4以上規範的容器中才氣作用,因為servlet2.3規範裡面,過濾器只支援request過濾,不支援轉發之類的過濾
但是在struts2.1.8以上的版本,均可以通過配置struts.xml文件來實現去掉字尾名。
<constant name="struts.action.extension" value="" />
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>
<constant name="struts.action.extension" value="" />
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>
相關文章
- 去掉字串中重複部分 提取檔案字尾名字串
- Nginx實現URL重寫Nginx
- PHP實現url重寫和.htaccessPHP
- 在Struts2中寫介面,返回json格式JSON
- get,post URL加字尾請求
- 前端專案透過‘URL 重寫’部署在 IIS 中,訪問 WebAPI 介面前端WebAPI
- js實現四則計算(中綴,字尾表示式)JS
- URL重寫(rewrite)的具體實現與異常問題解決
- tp6去掉url中index.phpIndexPHP
- jeefast匯入Excel---同步實現匯入字尾為.xls和字尾名為.xlsx(在jeefast實現匯入功能的基礎上)ASTExcel
- 基於 URL 的縮圖在 Laravel 中的實現Laravel
- 中綴轉字尾表示式思路分析和程式碼實現
- nginx TP5 URL 重寫Nginx
- 【ASP.NET Core】URL重寫ASP.NET
- 在 IDEA 中配置 Struts2Idea
- Laravel 5中去掉URL中的public路徑方法Laravel
- 教你如何在C++中實現中綴表示式轉字尾表示式C++
- 中關村區域規劃及寫字樓現狀之——中關村寫字樓市場現狀中關村
- IIS SSL認證流程& url重寫
- JavaScript怎麼去掉結尾空格JavaScript
- shell去掉每行結尾的空格
- 手寫實現java棧結構,並實現簡易的計算器(基於字尾演算法)Java演算法
- 前中字尾表示式
- Laravel重寫資源路由自定義URLLaravel路由
- Nginx URL重寫規則配置詳解Nginx
- 在PaddlePaddle上實現MNIST手寫體數字識別
- 中綴轉字尾和字首
- 用RecyclerView 重寫LayoutManager實現BannerViewView
- ThinkPHP5.0 Linux Apache/Nginx重寫URL配置PHPLinuxApacheNginx
- 【iis】URL重寫可以引用原地址內容
- 應用Url重寫時CSS引用問題CSS
- 在後端中如何實現冪等和去重?後端
- 教你如何實現SpringCloud URL的重定向及轉發SpringGCCloud
- 剖析漢字描紅在flutter中的實現原理Flutter
- RESTful在路由url有名義的寫法REST路由
- js 去掉陣列物件中的重複物件JS陣列物件
- (三)struts2進階之實現Action
- 中關村區域規劃及寫字樓現狀之——中關村西區定位及規劃中關村