主要解释四个标签:
- package
- action
- result
- constant
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name = "loginPackage" namespace = "/" extends = "struts-default">
<action name = "login" class = "com.tz.studystruts.sysmanage.action.LoginAction" method = "execute">
<result>/login_suc.jsp</result>
<result name = "success" type ="dispatcher">xxx.jsp</result>
<result name = "fail" type ="dispatcher">/login_err.jsp</result>
</action>
</package>
</struts>
1.package标签
<package name = "loginPackage" namespace = "/" extends = "struts-default" abstract="true">
......
</package>
struts2对业务控制类进行分包管理,每一个模块的功能在一个包下,便于维护,package标签主要有四个属性:
-
name:就是包的名称,包名随意起,但要见名知意。
-
namespace:命名空间,区分action的name相同时的一种处理方法,默认为"/“即web应用的根目录,如果配置了该属性,前台在发送请求的时候就要把namespace带上,例如:要匹配的action的name为login,package的namespace为”/sysmanage",则前台发送的请求为"/sysmanage/login.action"。
-
extends:包与包之间的继承关系,例如:如果我们继承了struts2默认的struts-default包那我们就具备了所有struts2的一些特性(参数注入,拦截器,国际化,类型转换,上传,下载)
-
abstract:值为true表示这个包里面的action都是抽象的,只可以被继承,不能被实例化,为false则相反。
2.action标签
<action name = "login" class = "com.tz.studystruts.sysmanage.action.LoginAction" method = "execute">
......
</action>
action标签用来匹配前台发来的请求,交给相应的业务控制类的相应方法来处理,action标签主要有三个属性:
-
name:前台的请求的名称(如果package还配置了命名空间则请求中的前半部分还要有命名空间)例如:package的namespace属性为"/sysmanage",action的name属性为"login",那么"/sysmange/login.action"请求才能匹配到这个action
-
class:请求所对应的业务控制类
-
method:请求将由业务控制类的method方法来处理,默认为"execute"
3.result标签
result标签主要用来匹配指定视图名称的视图(jsp,velocity,freemarker...)主要有两个属性:<result name = "success" type ="dispatcher">xxx.jsp</result>
<result name = "fail" type ="dispatcher">/login_err.jsp</result>
-
name:与action返回的字符串值匹配,默认为"success",表示视图代号名
-
type:返回该视图的方式(是转发还是重定向),默认"dispatcher"为转发,redirect为重定向
result标签中包裹的内容为该视图所对应的具体页面。
4.constant标签
主要是用来配置struts2的一些系统常量,例如: 1.国际化的编码 struts.i18n.encoding=UTF-82.在系统出错时获得更过的提示信息
struts.devMode=true
3.修改配置文件后不用重启服务器就可以重新加载该配置文件
struts.configuration.xml.reload=true;
<constant name="struts.i18n.encoding" value="UTF8" />
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
除了在struts2.xml文件中配置系统常量,还可以在src文件夹下新建一个名为struts.properties的配置文件,在里面这样配置:
struts.i18n.encoding=UTF-8
struts.devMode=true
struts.configuration.xml.reload=true;
还可以在struts的核心过滤器里面配置(不过这种用法很少见,了解即可)
<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>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>