ActionServlet 類對(duì)應(yīng)的類名為org.apche.struts.action.ActionServlet,它是struts框架的核心控制器組件,所有用戶的請(qǐng)求都先由ActionServlet來處理,然后再由ActionServlet把請(qǐng)求轉(zhuǎn)發(fā)給其他組件。
Struts只允許一個(gè)應(yīng)用中配置一個(gè) ActionServlet,但是可以將ActionServlet擴(kuò)展。
Servlet容器在啟動(dòng)時(shí),或者用戶首次請(qǐng)求ActionServlet時(shí)加載ActionServlet類,在上述情況下,Servlet容器都會(huì)在ActionServlet被加載后立即執(zhí)行它的init()方法。Init()過程如下:
1.調(diào)用initInternal()方法,初始化struts框架內(nèi)在的消息資源,如與系統(tǒng)日志相關(guān)的通知、警告和錯(cuò)誤信息。
2.調(diào)用initOther(),從web.xml文件中加載ActionServlet的初始化參數(shù),如config
參數(shù)
3.調(diào)用initServlet(),從web.xml文件中加載ActionServlet的URL映射信息。此外還會(huì)注冊(cè)web.xml和
struts配置文件所使用的DTD文件,這些DTD文件用來驗(yàn)證web.xml和struts配置文件的語法
4.調(diào)用initModuleConfig(),加載并解析默認(rèn)子應(yīng)用模塊的struts配置文件;創(chuàng)建ModuleConfig對(duì)象,把它存在ServletContext中
5.調(diào)用intiModuleMessageResources(),加載并初始化默認(rèn)子應(yīng)用模塊的消息資源,創(chuàng)建
MessageResources對(duì)象,把它存在ServletContext中
6.調(diào)用initModuleDataSources()方法,加載并初始化默認(rèn)子應(yīng)用模塊的數(shù)據(jù)源。如果沒有在struts配置文件中沒有定義<data-sources>元素,就忽略這一流程
7.調(diào)用initModulePlugins(),加載并初始化默認(rèn)子應(yīng)用模塊的所有插件
8.當(dāng)默認(rèn)子應(yīng)用模塊被成功初始化后,如果應(yīng)用還包括其他子應(yīng)用模塊,將重復(fù)流程4-7,分別對(duì)其他子應(yīng)用模塊進(jìn)行初始化。擴(kuò)展ActionServlet類,定義如下的類:
package sample;
public class ExtendedActionServlet extends ActionServlet {
public void init() throws ServletException {
super.init();
//do some operations
……………
}
}
擴(kuò)展完類后,還應(yīng)該在web.xml文件中如下配置:
<servlet>
<servlet-name>sample</servlet-name>
<servlet-class>sample.ExtendedActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sample</servlet-name>
<url-pattern>/action/*<url-pattern>
//上面的/action/*表示負(fù)責(zé)處理所有以/action為前綴的URL,后面的/表示轉(zhuǎn)義
<servlet-mapping>
<轉(zhuǎn)>