配置Struts应用(1)
Struts应用采用两个基于XML的配置文件来配置应用,这两个配置文件是web.xml和struts-config.xml。web.xml适用于所有的Java Web应用。Struts-config.xml文件是struts应用专有的配置文件。
DTD文档类型定义(Document Type Definition)对XML文档的格式做了定义。<web-app>是WEB应用发布文件的顶层元素。
<!ELEMENT web-app(icon?,display-name?,description?,distributable?,
context-param*,filter*,filter-mapping*,
listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,
welcome-file-list?,error-page*,taglib*,
resource-env-ref*,resource-ref*,security-constraint*,login-config?,
security-role*,env-entry*,ejb-ref*,ejb-local-ref*)
>
*注意:<servlet>子元素必须出现在<servlet-mapping>前面,而<servlet-mapping>必须出现在<taglib>元素的前面。
符号
含义
无符号
该子元素在父元素内必须存在且只能存在一次
+
该子元素在父元素内必须存在,可以存在一次或多次
*
该子元素在父元素内可以不存在,或者存在一次或多次
?
该子元素在父元素内可以不存在,或者只存在一次
1) 为struts应用配置web.xml文件
a) 配置ActionServlet
·<servlet>元素的DTD定义如下:
<!ELEMENT servlet(icon?,servlet-name,display-name?,description?,
(servlet-class|jsp-file),init-param*,load-on-startup?,
run-as?,security-role-ref*)
>
<servlet-name>用来定义servlet的名称,<servlet-class>用来指定servlet的完整类名。以下是声明ActionServlet的代码:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
·<servlet-mapping>用来指定ActionServlet可以处理哪些URL。
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
以上代码的<url-pattern>属性为”*.do”,表明ActionServlet负责处理所有以”.do”扩展名结尾的URL。如果属性为”/do/*”,表明ActionServlet负责处理所有以”/do”为前缀的URL,其中第二个/为转义符。
b) 声明ActionServlet的初始化元素
<servlet>的<init-param>元素用于配置Servlet的初始化参数。
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</servlet>
config参数是配置struts的ActionServlet专有的,它用来设置struts配置文件的相对路径。
c) 配置欢迎文件清单
当客户访问Web应用时,如果仅仅给出Web应用的Root URL,,没有指定具体的文件名,Web容器会自动调用Web应用的欢迎文件。<welcome-file-list>元素用来设置欢迎文件清单。<welcome-file-list>中可以有多个<welcome-file>元素。
<welcome-file-list>
<welcome-file>welcome.jsp</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
以上定义了两个欢迎文件,Web容器调用Web应用欢迎文件时,首先寻找第一个文件,如果文件存在,则显示第一个文件给客户,如果不存在,则继续寻找下一个文件,如果<welcome-file-list>中的任何文件都不存在,则返回错误。
在<welcome-file-list>中不能配置Servlet映射,因此不能直接把Struts的Action作为欢迎文件。但是可以通过如下方法调用Struts Action。首先,在Struts配置文件中为被调用的Action创建一个全局的(global)转发项:
<global-forward>
<forward name=”welcome” path=”HelloWorld.do”/>
</global-forward>
然后创建一个名叫welcome.jsp的文件,该页面被加载时。它把请求转发给上面<forward>元素指定的Action:
<%@taglib uri=”/WEB-INF/struts-logic.tld” prefix=”logic” %>
<html>
<body>
<logic:forward name=”welcome”>
</body>
</html>
最后在web.xml文件中把welcome.jsp文件配置为欢迎文件,
<welcome-file-list>
<welcome-file>welcome.jsp</welcome-file>
</welcome-file-list>