1. 几个重要的元素1.1 package元素package元素用来配置包。在Struts2框架中,包是一个独立的单位,通过name属性来唯一标识包。还可以通过extends属性让一个包继承另一个包,extends属性值就是被继承包的name属性值,继承包可以从被继承包那里继承到拦截器、Action等。 在Struts2框架中是通过包来管理action、result、interceptor、interceptor-stack等配置信息的。包属性如下:
-extends
-namespace
示范: <package name="caiwu" extends="struts-default" namespace="/caiwu"> </package> 1.2 action元素Struts2框架通过Action对象来处理HTTP请求,该请求的URL地址对应的Action即配置在action元素中。 action元素属性
示范: <action name="list" class="com.clzhang.struts2.demo3.ListAction"> </action> <action name="listSalarySum" class="com.clzhang.struts2.demo3.ListAction" method="listSalarySum"> </action> 1.3 result元素 当调用Action方法处理结束返回后,下一步就是使用result元素来设置返回给浏览器的视图。配置result元素时常需要指定name和type两个属性。 result属性
Struts2支持的结果类型
示范: <action name="login" class="com.clzhang.struts2.demo1.LoginAction"> <result name="input">/struts2/demo1/login.jsp</result> <result name="error">/struts2/demo1/wrong.jsp</result> <result name="list" type="redirectAction"> <param name="idInList">${id}</param> <param name="actionName">listBook</param> </result> </action> 需要注意dispatcher和redirect的区别,也就是转发和重定向的区别,重定向会丢失所有的请求参数,而且会丢失Action处理结果。 1.4 include元素在Struts2中提供了一个默认的struts.xml文件,但如果package、action、interceptors等配置比较多时,都放到一个struts.xml文件不太容易维护。因此,就需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用<include>标签引用这些配置文件。 示范: <include file="caiwu.xml"></include> <include file="cangku.xml"></include> 1.5 global-results元素有很多时候一个<result>初很多<action>使用,这时可以使用<global-results>标签来定义全局的<result>。 示范: <global-results> <result name="user">/struts2/demo3/user.jsp</result> <result name="sum">/struts2/demo3/sum.jsp</result> <result name="default">/struts2/demo3/default.jsp</result> </global-results> 1.6 default-action-ref元素如果在请求一个没有定义过的Action资源时,系统就会抛出404错误。这种错误不可避免,但这样的页面并不友好。我们可以使用<default-action-ref>来指定一个默认的Action,如果系统没有找到指定的Action,就会指定来调用这个默认的Action。 示范: <default-action-ref name="acctionError"></default-action-ref> <action name="acctionError"> <result>/jsp/actionError.jsp</result> </action> 2. Action的动态调用(DMI)Struts2提供了包含多个处理逻辑的Action处理方式,即DMI(Dynamic Method Invocation,动态方法调用)。它是通过请求对象中的一个具体的方法来实现动态的操作。具体说,在请求Action的URL地址后加上请求方法字符串,与Action对象中的方法进行匹配。其中,Action对象名称和方法之间用“!“隔开。 更多内容参考:struts2:多业务方法的处理(动态调用,DMI) 示范: <A href="list!listUser.action" target="_blank">3.2 通过URL叹号参数</A> 3. 通配符在实际的项目开发中,会出现多个Action定义的绝大部分都是相同的情况,这时就会产生大量冗余。对于这种情况,Struts2也给出了相应的解决方法,即使用通配符。
通配符“*“通常用在<action>标签的name属性中,而在class、name属性及result元素中使用{n}的形式来代表前面第n个*所匹配的字符串,{0}来代表URL请求的整个Action字符串。 示范一: <!-- 使用*通配符,第一个*表示调用方法,第二个*表示Action --> <action name="*_*" class="com.clzhang.struts2.action.{2}Action" method="{1}"> <result name="success">/{0}Suc.jsp</result> </action> 在上面代码中,当URL请求是/update_Login.action时,会调用LoginAction类中的update()方法,处理结束返回到update_LoginSuc.jsp。 示范二: <!-- 不管调用哪个Action,默认返回名为Action名的JSP --> <action name="*_*"> <result>/{0}.jsp</result> </action> 上面代码中没有指定class属性,也没指定result元素的name,这样不管访问哪个Action都会返回与该Action名字相同的JSP页面。 4. 常量配置在之前提到struts.properties配置文件的介绍中,我们曾经提到所有在struts.properties文件中定义的属性,都可以配置在struts.xml文件中。而在struts.xml中,是通过<constant>标签来进行配置的。 示范: <constant name="struts.action.extension" value="action"></constant> <constant name="struts.ognl.allowStaticMethodAccess" value="true" /> <constant name="struts.ui.theme" value="simple"></constant> <constant name="struts.custom.i18n.resources" value="message"></constant> <constant name="struts.i18n.encoding" value="UTF-8"></constant>
|
|