如何讓struts2和servlet的共存

2021-09-02 06:50:43 字數 2483 閱讀 1083

一、問題的提出

先讓我們看下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...