一、問題的提出
先讓我們看下web.xml中struts2和servlet的配置:
struts2
org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter
struts2
/*firstservlet
com.test.firstservlet
firstservlet
/aa當我們在頁面在請求應用時,struts2將會截獲所有請求,對於servlet請求將不能夠正常響應的
(報錯資訊為:警告: could not find action or result: /test3_ssh/
這是因為struts2把servlet當成action了,因為servlet和action都是沒有字尾的.
二、解決方案
解決方法目前有四種:
方法1:
統一在servlet後面加上.servlet結尾(包括web.xml配置檔案中和頁面上使用servlet的地方)
方法2:
在struts.xml中的的節點下面新增struts2處理的請求字尾 常量:
該屬性指定需要struts 2處理的請求字尾,該屬性的預設值是action,即所有匹配*.action的請求都由struts 2處理。
如果使用者需要指定多個請求字尾,則多個字尾之間以英文逗號(,)隔開。
方法3:
在web.xml中修改struts2攔截頁面請求的配置:
原:struts2
org.apache.struts2.dispatcher.filterdispatcher
struts2
/*現:
struts2
*.action
struts2
*.jsp
struts2
/user/*
servlet的請求路徑不必改變
方法4:
自定義filter對servlet進行過濾:
# 該類是定義了乙個過濾器(隨便你放在某個包下面),當既用到struts2又用到servlet時,
# 必須用該過濾器對所有的servlet做一次過濾,否則servlet將無法正常執行。
# 同時在web.xml中,在定義struts的核心控制器的過濾器前面新增該過濾器,新增**如下:
* * redisp
* filters.redispatcherfilter(該過濾器的類名)
*
* includeservlets
* 所配置的servlet,注意是那url-pattern
* *
* redisp
* /*
*該類也可以直接繼承strutsprepareandexecutefilter的
讓struts1來模擬struts2
公司裡的專案用的框架是常見的ssh,只是使用的是struts1和spring1,都略顯得有點老舊了。之前看了陣struts2,感覺比struts1先進了很多,但是我想公司是不可能隨便公升級框架的,正好這兩天閒著沒什麼事做,琢磨著該做些什麼了。於是我就想讓struts1模擬一些struts2的特性。s...
Struts2字尾 深入Struts2
一 將action字尾變成html字尾 xmlversion 1.0 encoding utf 8 doctype struts public apache software foundation dtd struts configuration 2.1 en struts include file...
Struts和struts2的不同
struts和struts2的不同點 1 action struts的action類要求繼承乙個基類。struts2的action類是通過實現介面。2 執行緒模式 struts action執行緒不安全的,單列的模式。struts2 action物件為每個請求產生乙個例項 3 servlet依賴 s...