閱讀724 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Struts2配置web.xml

 

任何MVC框架都需要與Web應用整合,這就不得不借助於web.xml文件,隻有配置在web.xml文件中Servlet才會被應用加載。


所有的MVC框架都需要Web應用加載一個核心控製器,對於Struts2框架而言,需要加載FilterDispatcher

 

隻要Web應用負責加載FilterDispatcher,FilterDispatcher將會加載應用的Struts2框架。


 

因為Struts 2將核心控製器設計成Filter,而不是一個普通Servlet。故為了讓Web應用加載FilterDispacher

隻需要在web.xml文件中配置FilterDispatcher即可。

 

<!-- 配置Struts 2框架的核心Filter -->
<filter>
<!-- 配置Struts 2核心Filter的名字 -->
<filter-name>struts</filter-name>
<!-- 配置Struts 2核心Filter的實現類 -->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher </filter-class>
<init-param>
<!-- 配置Struts 2框架默認加載的Action包結構 -->
<param-name>actionPackages</param-name>
<param-value>org.apache.struts2.showcase.person</param-value>
</init-param>
<!-- 配置Struts 2框架的配置提供者類 -->
<init-param>
<param-name>configProviders </param-name>
<param-value>lee.MyConfigurationProvider</param-value>
</init-param>
</filter>   


正如上麵看到的,當配置Struts 2的FilterDispatcher類時,可以指定一係列的初始化參數,為該Filter配置初始化參數時,其中有3個初始化參數有特殊意義:


config:該參數的值是一個以英文逗號隔開的字符串,每個字符串都是一個XML配置文件的位置。Struts 2框架將自動加載該屬性指定的係列配置文件。


actionPackages:該參數的值也是一個以英文逗號隔開的字符串,每個字符串都是一個包空間,Struts2框架將掃描這些包空間下的Action類。


configProviders:如果用戶需要實現自己的ConfigurationProvider類,用戶可以提供一個或多個實現了ConfigurationProvider接口的類,然後將這些類的類名設置成該屬性的值,多個類名之間以英文逗號隔開。


除此之外,還可在此處配置Struts 2常量,每個<init-param>元素配置一個Struts 2常量,其中<param-name>子元素指定了常量name,而<param-value>子元素指定了常量value。

在web.xml文件中配置了該Filter,還需要配置該Filter攔截的URL。我們讓該Filter攔截所有的用戶請求,因此使用通配符來配置該Filter攔截的URL。

 

<!-- 配置Filter攔截的URL -->
<filter-mapping>
<!-- 配置Struts 2的核心FilterDispatcher攔截所有用戶請求 -->
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

配置了Struts 2的核心FilterDispatcher後,基本完成了Struts2在web.xml文件中的配置。

如果Web應用使用了Servlet 2.3以前的規範,因為Web應用不會自動加載Struts 2框架的標簽文件,因此必須在web.xml文件中配置加載Struts 2標簽庫。

<!-- 手動配置Struts 2的標簽庫 -->
<taglib>
<!-- 配置Struts 2標簽庫的URI -->
<taglib-uri>/s</taglib-uri>
<!-- 指定Struts 2標簽庫定義文件的位置 -->
<taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
</taglib>   

 

在上麵配置片段中,指定了Struts 2標簽庫配置文件物理位置:/WEB-INF/struts-tags.tld,因此我們必須手動複製Struts 2的標簽庫定義文件,將該文件放置在Web應用的WEB-INF路徑下。


如果Web應用使用Servlet 2.4以上的規範,則無需在web.xml文件中配置標簽庫定義,因為Servlet 2.4規範會自動加載標簽庫定義文件。

Struts 2的標簽庫定義文件包含在struts2-core-2.0.6.jar文件裏,在struts2-core-2.0.6.jar文件的META-INF路徑下,包含了一個struts-tag.tld文件,這個文件就是Struts2的標簽庫定義文件,Servlet 2.4規範會自動加載該標簽庫文件。


對於Servlet 2.4以上的規範,Web應用自動加載該標簽庫定義文件。加載struts-tag.tld標簽庫定義文件時,該文件的開始部分包含如下代碼片段:

 

<taglib>
<!-- 定義標簽庫的版本 -->
<tlib-version>2.2.3</tlib-version>
<!-- 定義標簽庫所需的JSP版 -->
<jsp-version>1.2</jsp-version>
<short-name>s</short-name>
<!-- 定義Struts 2標簽庫的URI -->
<uri>/struts-tags</uri>
...
</taglib>

 

因為該文件中已經定義了該標簽庫的URI:struts-tags,這就避免了在web.xml文件中重新定義Struts2標簽庫文件的URI。


原帖地址:https://qianlong1207.iteye.com/blog/987105

 

 

最後更新:2017-04-02 18:30:38

  上一篇:go 關於github的ssh, permission denied(publickey)
  下一篇:go iphone開發筆記——Cocos2d CCLayer中的touch