一、Struts.xml文件
- Struts.xml文件构成
如图,《Struts》标签内共有5个子标签。
1.1 struts-default.xml
- 查看Struts的内容可知,Struts的默认包“default”是继承于"Struts-dafault"包的,struts-default包是在struts-default.xml中定义,struts-default.xml也是Struts2默认配置文件,所以Struts2每次都会自动加载 struts-default.xml文件。
-
struts-default.xml 里定义了一大堆的常量和bean,要使用这些只需要继承这个包就行了。
- struts-default.xml路径:struts2-core-2.3.32.jar/struts-default.xml
1.2 子标签之bean
1.3 子标签之constant
A、 Struts所有常量定义在:
B、 常用常量:
struts.i18n.encoding=UTF-8 //设置请求的编码
struts.enable.DynamicMethodInvocation = true //是否支持动态方法的调用
struts.configuration.xml.reload = true //是否支持XML的自动加载
struts.devMode = false //开发模式
struts.ui.theme=xhtml //UI模板的设置
struts.ognl.allowStaticMethodAccess=false //是否允许在ONGL表达式中调用静态方法
struts.action.extension=action,, //STruts请求的扩展名。
C、常量定义位置
- 常量可以定义在4个位置:
A、第一个就是defalut.properties里,但是我们一般都不会在这个文件里定义常量。
B、第二个就是struts.xml中,
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="xx" class="com.ActionFirst">
<result name="index">/index.jsp</result>
</action>
</package>
</struts>
C、第三个就是
- 这个文件需手工建立,也是放在src目录下,一般用于WebWork工程
D、第四个就是在web.xml中
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.devMode</param-name>
<param-value>true</param-value>
</init-param>
</filter>
- struts读取常量的顺序:后面的会覆盖前面的配置。就是说web.xml中配置的struts.devMode的值会覆盖掉前面ABC配置的值。
1.4 子标签之include
- 包含其他配置文件,一般用于团队合作。
struts中多模块的设置,模块化文件。
<include file="xxxx.xml"/>
公用的Action放在struts.xml中,模板的配置放到模板的配置文件中。
1.5 子标签之package
1.5.1 属性
属性A、 name="default" 包名,随便取,不能重复。
属性B、 namespace="/" 命名空间。
命名空间:
struts请求的访问路径:
http://IP地址:端口号/工程名/命名空间/Action的名称。
struts会根据命名空间逐层进行匹配。
<a href="<%=path%>/aa/bb/cc/dd/nameSpaceAction">命名空间示例</a>
-
- 示例:
A. 编写index.html
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <%
6 String path = request.getContextPath();
7 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
8 %>
9 <head>
10 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
11 <title>Insert title here</title>
12 </head>
13 <body>
14 <a href="<%=path%>/aa/bb/exam"> 命名空间示例</a>
15 </body>
16 </html>
- a标签跳转到“工程名/aa/bb/exam”URL,
B、编写action类
1 package com;
2
3 public class ActionFirst {
4 /**
5 * 必须要有String的execute方法
6 * @return
7 */
8 public String execute(){
9
10 return "index";
11 }
12 }
C、配置struts.xml文件
1 <struts>
2 <constant name="struts.enable.DynamicMethodInvocation" value="false" />
3 <constant name="struts.devMode" value="true" />
4
5 <package name="default" namespace="/" extends="struts-default">
6 <action name="xx" class="com.ActionFirst">
7 <result name="index">/index.jsp</result>
8 </action>
9 </package>
10
11 <package name="aa" namespace="/aa" extends="struts-default">
12 <action name="exam" class="com.ActionFirst">
13 <result name="index">/index_2.jsp</result>
14 </action>
15 </package>
16
17
18 </struts>