struts2(配置文件和元素解释)

配置文件和常见的常量配置


Struts2中的6大配置文件:

-----------------------------------------

Struts2框架按照如下顺序加载struts2配置:

1.default.properties该文件保存在 struts2-core-2.5.10.1.jar 中org.apache.struts2包里面:包含了Struts2的默认常量配置

2.struts-default.xml 该文件保存在struts2-core-2.5.10.1.jar:包含了框架依赖的对象配置和结果类型,拦截器等配置.

3.struts-plugin.xml   该文件保存在Struts2框架的插件中:struts-Xxx-2.5.10.1.jar.由插件提供

上述三个文件时框架自带的,我们不能修改,只能使用.

---------------------------------------------------------

4.struts.xml         该文件是web应用默认的struts配置文件.重点.配置自定义的Action和其他信息.

5.struts.properties该文件是Struts的默认配置文件-->可以修改default.properties 的常量配置.

6.web.xml该文件是Web应用的配置文件

上述三个文件是我们可以修改操作的.

---------------------------------------------------------

如果多个文件配置了同一个struts2常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值.

注意:一般的,我们只在struts.xml中做常量配置.

<constantname="struts.action.extension"value="action,opensource,do,,"/>


常见的常量配置:

---------------------------------------

指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker、velocity的输出

<constant name="struts.i18n.encoding"value="UTF-8"/>

   该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。

   如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开

<constant name="struts.action.extension"value="action,do,jinken"/>

   设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭

    <constantname="struts.serve.static.browserCache" value="false"/>

  当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开

    <constantname="struts.configuration.xml.reload" value="true"/>

   开发模式下使用,这样可以打印出更详细的错误信息

<constant name="struts.devMode" value="true"/>:修改struts.xml之后,不要重启Tomcat.

   默认的视图主题

<constant name="struts.ui.theme" value="simple"/>

   是否支持动态方法调用

<constant name="struts.enable.DynamicMethodInvocation"value="false"/>


--------------------------------------------------------------------------------------

配置问题:

项目模块太多,不可能用一个struts.xml文件来管理,由每个模块的.xml来管理,用include来引进总struts.xml文件来就可以了

Struts2中的6大配置文件:

-----------------------------------------

Struts2框架按照如下顺序加载struts2配置:

1.default.properties该文件保存在 struts2-core-2.5.10.1.jar 中org.apache.struts2包里面:包含了Struts2的默认常量配置

2.struts-default.xml 该文件保存在struts2-core-2.5.10.1.jar:包含了框架依赖的对象配置和结果类型,拦截器等配置.

3.struts-plugin.xml   该文件保存在Struts2框架的插件中:struts-Xxx-2.5.10.1.jar.由插件提供

上述三个文件时框架自带的,我们不能修改,只能使用.

---------------------------------------------------------

4.struts.xml         该文件是web应用默认的struts配置文件.重点.配置自定义的Action和其他信息.

5.struts.properties该文件是Struts的默认配置文件-->可以修改default.properties 的常量配置.

6.web.xml该文件是Web应用的配置文件

上述三个文件是我们可以修改操作的.

---------------------------------------------------------

如果多个文件配置了同一个struts2常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值.

注意:一般的,我们只在struts.xml中做常量配置.

<constantname="struts.action.extension"value="action,opensource,do,,"/>


常见的常量配置:

---------------------------------------

指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker、velocity的输出

<constant name="struts.i18n.encoding"value="UTF-8"/>

   该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。

   如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开

<constant name="struts.action.extension"value="action,do,jinken"/>

   设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭

    <constantname="struts.serve.static.browserCache" value="false"/>

  当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开

    <constantname="struts.configuration.xml.reload" value="true"/>

   开发模式下使用,这样可以打印出更详细的错误信息

<constant name="struts.devMode" value="true"/>:修改struts.xml之后,不要重启Tomcat.

   默认的视图主题

<constant name="struts.ui.theme" value="simple"/>

   是否支持动态方法调用

<constant name="struts.enable.DynamicMethodInvocation"value="false"/>


--------------------------------------------------------------------------------------

配置问题:

项目模块太多,不可能用一个struts.xml文件来管理,由每个模块的.xml来管理,用include来引进总struts.xml文件来就可以了





struts-helloaction.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<package name="hello" extends="struts-default" namespace="/a">
		<action name="b" class="clu.mochunrong.helloaction.HelloAction" method="sing">
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/index.jsp</param>
			</result>
		</action>
	</package>
</struts>

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<include file="clu/mochunrong/helloaction/struts-helloaction.xml"></include>
    
</struts>
注意:效果一样,方便管理每个模块。


关于以上的struts.xml文件中的元素解释:

Struts2中的6大配置文件:

-----------------------------------------

Struts2框架按照如下顺序加载struts2配置:

1.default.properties该文件保存在 struts2-core-2.5.10.1.jar 中org.apache.struts2包里面:包含了Struts2的默认常量配置

2.struts-default.xml 该文件保存在struts2-core-2.5.10.1.jar:包含了框架依赖的对象配置和结果类型,拦截器等配置.

3.struts-plugin.xml   该文件保存在Struts2框架的插件中:struts-Xxx-2.5.10.1.jar.由插件提供

上述三个文件时框架自带的,我们不能修改,只能使用.

---------------------------------------------------------

4.struts.xml         该文件是web应用默认的struts配置文件.重点.配置自定义的Action和其他信息.

5.struts.properties该文件是Struts的默认配置文件-->可以修改default.properties 的常量配置.

6.web.xml该文件是Web应用的配置文件

上述三个文件是我们可以修改操作的.

---------------------------------------------------------

如果多个文件配置了同一个struts2常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值.

注意:一般的,我们只在struts.xml中做常量配置.

<constantname="struts.action.extension"value="action,opensource,do,,"/>


常见的常量配置:

---------------------------------------

指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker、velocity的输出

<constant name="struts.i18n.encoding"value="UTF-8"/>

   该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。

   如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开

<constant name="struts.action.extension"value="action,do,jinken"/>

   设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭

    <constantname="struts.serve.static.browserCache" value="false"/>

  当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开

    <constantname="struts.configuration.xml.reload" value="true"/>

   开发模式下使用,这样可以打印出更详细的错误信息

<constant name="struts.devMode" value="true"/>:修改struts.xml之后,不要重启Tomcat.

   默认的视图主题

<constant name="struts.ui.theme" value="simple"/>

   是否支持动态方法调用

<constant name="struts.enable.DynamicMethodInvocation"value="false"/>


--------------------------------------------------------------------------------------

配置问题:

项目模块太多,不可能用一个struts.xml文件来管理,由每个模块的.xml来管理,用include来引进总struts.xml文件来就可以了



struts-helloaction.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<package name="hello" extends="struts-default" namespace="/a">
		<action name="b" class="clu.mochunrong.helloaction.HelloAction" method="sing">
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/index.jsp</param>
			</result>
		</action>
	</package>
</struts>

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<include file="clu/mochunrong/helloaction/struts-helloaction.xml"></include>
    
</struts>
注意:效果一样,方便管理每个模块。


关于以上的struts.xml文件中的元素解释:

package元素
<package>元素:是<struts>根元素的子元素.
<package name="" extends=""namespace="" abstract=""></package>
来对多个<action>元素分类管理,和Java中的package没有关系.

常见的属性:
name:      表示<package>的名字,但是要保证不同的<package>元素的name不同.可以通过该名字被其他的包所指代.
extends:   表示当前<package>继承哪一个<package>,一般都是:struts-default.
          而struts-default其实就是struts-default.xml中<package>元素的名字.
          继承struts-default之后,就拥有了该<package>定义的所有资源.(结果返回类型,拦截器..)
namespace:表示命名空间,一般的以"/"打头.,命名一般以模块名.如:/crm, /oa. 和<action>的name决定了一个Action类的访问路径.
abstract:  抽象的,缺省值是false.若一个<package>的abstract="true",那么该<package>中就不能再定义<action>元素,只能用来继承.


关于抽象(abstract)、和继承(extends)的解释:

<struts>
	-- 公共包 --
	<package name="basePkg" extends="struts-default" namespace="/abc" abstract="true">
		<action name="student02" class="clu.mochunrong.action.StudentAction" method="Test">
			<result name="StudentRe" type="dispatcher">
				<param name="location">/views/jsp/student.jsp</param>
			</result>
		</action>
	</package> 
	-- 学生包 --
	<package name="StudentPkg" extends="basePkg" namespace="/student01">
	</package>
	-- 老师包 --
	<package name="TeacherPkg" extends="basePkg" namespace="/teacher01">
		<action name="teacher02" class="clu.mochunrong.action.TeacherAction" method="Test">
			<result name="TeacherRe" type="dispatcher">
				<param name="location">/views/jsp/teacher.jsp</param>
			</result>
		</action>
	</package>
</struts>


例子解释:

<struts>

	<package name="basePkg" extends="struts-default" namespace="/abc" abstract="true">
		//公共信息(如action)
	</package>


	<package name="StudentPkg" extends="basePkg" namespace="/student01">
	    //学生包
	</package>


	<package name="TeacherPkg" extends="basePkg" namespace="/teacher01">
		//老师包


	</package>
</struts> 

解释:package包声明abstract则失去了本包访问的功能,意思 --->不能 用命名空间访问资源(http://localhost/abc/资源),会报错。

如果abstract包被继承了,则可以用子包反问父包里面的action资源。(http://locahost/student01/父包资源)


action元素

<action>元素:是<package>元素的子元素.

      专门用来配置Action对象/Action类的,理论上一个Action类匹配一个<action>元素.

<actionname="" class="" method=""/>

常见的属性:
name: action的名称,在同一个<package>中,action的名字必须唯一.和<package>的namespace共同决定了一个Action类的访问路径.          注意:action的name值不能以"/"打头.
class:一个Action类的全限定名.    缺省值:com.opensymphony.xwork2.ActionSupport类.
method:当前Action动作访问的方法, 缺省值:execute.

注意:如果class不指定则默认<default-class-ref class="com.opensymphony.xwork2.ActionSupport"/>


result元素

<result>元素:配置结果视图.

<result name=""type=""></result>

局部结果视图: <result>定义在<action>中.

全局结果视图: <result>定义在<global-results>中,而<global-results>在<package>中

<package name="oa"extends="basePkg" namespace="/oa">

  <global-results>

  <result></result>

</global-results>

</package>

----------------------------------

常见的属性:

name:Action方法返回的逻辑视图名称. 缺省值:success

type:结果的跳转类型.该类型的值在struts-default.xml中已经预定义好了.缺省值:dispatcher

常见的type值(结果类型):

dispatcher:      表示从Action请求转发到页面(JSP).

redirect:        表示从Action重定向到页面(JSP).

chain:           表示从Action请求转发到另一个Action.

redirectAction:  表示从Action重定向到另一个Action.

stream:          表示返回流. 文件下载时使用.

<param name="">表示参数:name缺省值:location(地址)


<result>代码解释:

<struts>
	<package name="StudentPkg" extends="struts-default" namespace="/student01">
		<global-results>
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/all.jsp</param>
			</result>
		</global-results>

		<action name="student02" class="clu.mochunrong.action.StudentAction" method="Test">
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/student.jsp</param>
			</result>
		</action>
	</package>

	<package name="TeacherPkg" extends="struts-default" namespace="/teacher01">
		<action name="teacher02" class="clu.mochunrong.action.TeacherAction" method="Test">
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/teacher.jsp</param>
			</result>
		</action>
	</package>
</struts>




redirectAction(Action和Action之间的跳转)

代码:

<struts>
	<package name="StudentPkg" extends="struts-default" namespace="/student01">
		<action name="student02" class="clu.mochunrong.action.StudentAction" method="Test">
			<result name="abc" type="redirectAction">
			<param name="namespace">/teacher01</param>
				<param name="actionName">teacher02</param>
			</result>
		</action>
	</package>

	<package name="TeacherPkg" extends="struts-default" namespace="/teacher01">
		<action name="teacher02" class="clu.mochunrong.action.TeacherAction" method="Test">
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/teacher.jsp</param>
			</result>
		</action>
	</package>
</struts>

注意:param的属性有:

1、namespace

2、actionName

3、method

注意代码:<result name="abc" type="dispatcher">/views/jsp/teacher.jsp</result>可以直接访问路径,不需要<param>会默认值   <param>作用是返回的类型传递


创建Action类的三种方式

Action类的三种编写方式:

第一种.使用公共的POJO类作为Action. 提供公共的无参数的Action方法.(不推荐).

缺点:

    没有一种方式约束Action方法必须是公共的无参数的.

    Action方法的返回逻辑视图名可以自定指定. 有时起名不规范.比如:"ooxx".

解决方案:第二种.

第二种.定义一个类,实现于com.opensymphony.xwork2.Action接口.并覆写execute方法即可.(不推荐)

Action接口中,不仅提供了Action方法的声明,也提供了常用的逻辑视图名称:

public static final String SUCCESS = "success";

public static final String NONE = "none";

public static final String ERROR = "error";

public static final String INPUT = "input";

public static final String LOGIN = "login";

缺点:

    不支持国际化,数据校验,消息机制.

解决方案:第三种:

第三种.定义一个类,继承于com.opensymphony.xwork2.ActionSupport类.(推荐)

publicclass ActionSupport implements Action, Validateable, ValidationAware,TextProvider, LocaleProvider, Serializable {}

---------------------------------------------

真实开发中,我们却往往再提供一个BaseAction类.

ActionSupport.

---BaseAction(自定义Action的基类.)

-----AAction

-----BAction


第三种方法代码:

package clu.mochunrong.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport{

	private static final long serialVersionUID = 1L;
	@Override
	public String execute() throws Exception {
		System.out.println("ActionSupport");
		return Action.SUCCESS;
	}

}

<struts>
	<package name="HelloActionPak" extends="struts-default" namespace="/hello1">
	<action name="hello2" >
	<result>/views/jsp/student.jsp</result>
	</action>
	</package>
</struts>



Action中多方法调用

Action中多个Action方法会造成<action>配置的臃肿.

解决方案:

方案1:DMI:动态方法调用 :官方不推荐.

      格式: action名!方法名

      比如: emp!edit    emp!list

在Struts2新的版本中,默认的关闭了DMI.若我们需要使用DMI,就需要配置常量,启用动态方法调用.

此时:<action/>元素不需要指定method属性值.

<constant name="struts.enable.DynamicMethodInvocation"value="true"/>

---------------------------------------------------------------------------------

方案2: 使用通配符的方式类配置:  通配符:*

<action name="emp_*"class="org.fkjava.struts.manymethod.EmployeeAction"method="{1}">

Action的名字:emp_Action方法: 比如:emp_list,那么{1}的值就是list

                                emp_edit,那么{1}的值就是edit

两个通配符:

<action name="*_*" class="org.fkjava.struts.manymethod.{1}Action"method="{2}">

Action名字:Action类名_Action方法.比如:Employee_list,表示调用的EmployeeAction中的list方法

                                 比如:Department_edit,表示调用DepartmentAction中的edit方法.


臃肿:

<struts>
	<package name="hellopkg" extends="struts-default" namespace="/hello1">
	
	<action name="add" class="clu.mochunrong.action.HelloAction" method="add"/>
	<action name="save" class="clu.mochunrong.action.HelloAction" method="save"/>
	<action name="delete" class="clu.mochunrong.action.HelloAction" method="delete"/>
	<action name="update" class="clu.mochunrong.action.HelloAction" method="update"/>
	
	</package>
</struts>
package clu.mochunrong.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {

public String add(){
	System.out.println("add表");
	return NONE;
}
public String save(){
	System.out.println("save表");
	return NONE;
}
public String update(){
	System.out.println("update表");
	return NONE;
}
public String delete(){
	System.out.println("delete表");
	return NONE;
}

}


解决方法1:

解决方法(官方不推荐):
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<struts>
	<package name="hellopkg" extends="struts-default" namespace="/a">
	
	<action name="b" class="clu.mochunrong.action.HelloAction">
	<allowed-methods>add,save,update,delete</allowed-methods>
	</action>
	
	</package>
</struts>

解决方法2:

使用通配符:
<struts>
	<package name="hellopkg" extends="struts-default" namespace="/a">
	
	<action name="*_*" class="clu.mochunrong.action.{1}Action" method="{2}">
	<allowed-methods>add,save,update,delete</allowed-methods>
	</action>
	
	</package>
</struts>


Struts2中的6大配置文件:

-----------------------------------------

Struts2框架按照如下顺序加载struts2配置:

1.default.properties该文件保存在 struts2-core-2.5.10.1.jar 中org.apache.struts2包里面:包含了Struts2的默认常量配置

2.struts-default.xml 该文件保存在struts2-core-2.5.10.1.jar:包含了框架依赖的对象配置和结果类型,拦截器等配置.

3.struts-plugin.xml   该文件保存在Struts2框架的插件中:struts-Xxx-2.5.10.1.jar.由插件提供

上述三个文件时框架自带的,我们不能修改,只能使用.

---------------------------------------------------------

4.struts.xml         该文件是web应用默认的struts配置文件.重点.配置自定义的Action和其他信息.

5.struts.properties该文件是Struts的默认配置文件-->可以修改default.properties 的常量配置.

6.web.xml该文件是Web应用的配置文件

上述三个文件是我们可以修改操作的.

---------------------------------------------------------

如果多个文件配置了同一个struts2常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值.

注意:一般的,我们只在struts.xml中做常量配置.

<constantname="struts.action.extension"value="action,opensource,do,,"/>


常见的常量配置:

---------------------------------------

指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker、velocity的输出

<constant name="struts.i18n.encoding"value="UTF-8"/>

   该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。

   如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开

<constant name="struts.action.extension"value="action,do,jinken"/>

   设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭

    <constantname="struts.serve.static.browserCache" value="false"/>

  当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开

    <constantname="struts.configuration.xml.reload" value="true"/>

   开发模式下使用,这样可以打印出更详细的错误信息

<constant name="struts.devMode" value="true"/>:修改struts.xml之后,不要重启Tomcat.

   默认的视图主题

<constant name="struts.ui.theme" value="simple"/>

   是否支持动态方法调用

<constant name="struts.enable.DynamicMethodInvocation"value="false"/>


--------------------------------------------------------------------------------------

配置问题:

项目模块太多,不可能用一个struts.xml文件来管理,由每个模块的.xml来管理,用include来引进总struts.xml文件来就可以了


struts-helloaction.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<package name="hello" extends="struts-default" namespace="/a">
		<action name="b" class="clu.mochunrong.helloaction.HelloAction" method="sing">
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/index.jsp</param>
			</result>
		</action>
	</package>
</struts>

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<include file="clu/mochunrong/helloaction/struts-helloaction.xml"></include>
    
</struts>
注意:效果一样,方便管理每个模块。


关于以上的struts.xml文件中的元素解释:

package元素
<package>元素:是<struts>根元素的子元素.
<package name="" extends=""namespace="" abstract=""></package>
来对多个<action>元素分类管理,和Java中的package没有关系.

常见的属性:
name:      表示<package>的名字,但是要保证不同的<package>元素的name不同.可以通过该名字被其他的包所指代.
extends:   表示当前<package>继承哪一个<package>,一般都是:struts-default.
          而struts-default其实就是struts-default.xml中<package>元素的名字.
          继承struts-default之后,就拥有了该<package>定义的所有资源.(结果返回类型,拦截器..)
namespace:表示命名空间,一般的以"/"打头.,命名一般以模块名.如:/crm, /oa. 和<action>的name决定了一个Action类的访问路径.
abstract:  抽象的,缺省值是false.若一个<package>的abstract="true",那么该<package>中就不能再定义<action>元素,只能用来继承.


关于抽象(abstract)、和继承(extends)的解释:

<struts>
	-- 公共包 --
	<package name="basePkg" extends="struts-default" namespace="/abc" abstract="true">
		<action name="student02" class="clu.mochunrong.action.StudentAction" method="Test">
			<result name="StudentRe" type="dispatcher">
				<param name="location">/views/jsp/student.jsp</param>
			</result>
		</action>
	</package> 
	-- 学生包 --
	<package name="StudentPkg" extends="basePkg" namespace="/student01">
	</package>
	-- 老师包 --
	<package name="TeacherPkg" extends="basePkg" namespace="/teacher01">
		<action name="teacher02" class="clu.mochunrong.action.TeacherAction" method="Test">
			<result name="TeacherRe" type="dispatcher">
				<param name="location">/views/jsp/teacher.jsp</param>
			</result>
		</action>
	</package>
</struts>


例子解释:

<struts>

	<package name="basePkg" extends="struts-default" namespace="/abc" abstract="true">
		//公共信息(如action)
	</package>


	<package name="StudentPkg" extends="basePkg" namespace="/student01">
	    //学生包
	</package>


	<package name="TeacherPkg" extends="basePkg" namespace="/teacher01">
		//老师包


	</package>
</struts> 

解释:package包声明abstract则失去了本包访问的功能,意思 --->不能 用命名空间访问资源(http://localhost/abc/资源),会报错。

如果abstract包被继承了,则可以用子包反问父包里面的action资源。(http://locahost/student01/父包资源)


action元素

<action>元素:是<package>元素的子元素.

      专门用来配置Action对象/Action类的,理论上一个Action类匹配一个<action>元素.

<actionname="" class="" method=""/>

常见的属性:
name: action的名称,在同一个<package>中,action的名字必须唯一.和<package>的namespace共同决定了一个Action类的访问路径.          注意:action的name值不能以"/"打头.
class:一个Action类的全限定名.    缺省值:com.opensymphony.xwork2.ActionSupport类.
method:当前Action动作访问的方法, 缺省值:execute.

注意:如果class不指定则默认<default-class-ref class="com.opensymphony.xwork2.ActionSupport"/>


result元素

<result>元素:配置结果视图.

<result name=""type=""></result>

局部结果视图: <result>定义在<action>中.

全局结果视图: <result>定义在<global-results>中,而<global-results>在<package>中

<package name="oa"extends="basePkg" namespace="/oa">

  <global-results>

  <result></result>

</global-results>

</package>

----------------------------------

常见的属性:

name:Action方法返回的逻辑视图名称. 缺省值:success

type:结果的跳转类型.该类型的值在struts-default.xml中已经预定义好了.缺省值:dispatcher

常见的type值(结果类型):

dispatcher:      表示从Action请求转发到页面(JSP).

redirect:        表示从Action重定向到页面(JSP).

chain:           表示从Action请求转发到另一个Action.

redirectAction:  表示从Action重定向到另一个Action.

stream:          表示返回流. 文件下载时使用.

<param name="">表示参数:name缺省值:location(地址)


<result>代码解释:

<struts>
	<package name="StudentPkg" extends="struts-default" namespace="/student01">
		<global-results>
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/all.jsp</param>
			</result>
		</global-results>

		<action name="student02" class="clu.mochunrong.action.StudentAction" method="Test">
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/student.jsp</param>
			</result>
		</action>
	</package>

	<package name="TeacherPkg" extends="struts-default" namespace="/teacher01">
		<action name="teacher02" class="clu.mochunrong.action.TeacherAction" method="Test">
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/teacher.jsp</param>
			</result>
		</action>
	</package>
</struts>




redirectAction(Action和Action之间的跳转)

代码:

<struts>
	<package name="StudentPkg" extends="struts-default" namespace="/student01">
		<action name="student02" class="clu.mochunrong.action.StudentAction" method="Test">
			<result name="abc" type="redirectAction">
			<param name="namespace">/teacher01</param>
				<param name="actionName">teacher02</param>
			</result>
		</action>
	</package>

	<package name="TeacherPkg" extends="struts-default" namespace="/teacher01">
		<action name="teacher02" class="clu.mochunrong.action.TeacherAction" method="Test">
			<result name="abc" type="dispatcher">
				<param name="location">/views/jsp/teacher.jsp</param>
			</result>
		</action>
	</package>
</struts>

注意:param的属性有:

1、namespace

2、actionName

3、method

注意代码:<result name="abc" type="dispatcher">/views/jsp/teacher.jsp</result>可以直接访问路径,不需要<param>会默认值   <param>作用是返回的类型传递


创建Action类的三种方式

Action类的三种编写方式:

第一种.使用公共的POJO类作为Action. 提供公共的无参数的Action方法.(不推荐).

缺点:

    没有一种方式约束Action方法必须是公共的无参数的.

    Action方法的返回逻辑视图名可以自定指定. 有时起名不规范.比如:"ooxx".

解决方案:第二种.

第二种.定义一个类,实现于com.opensymphony.xwork2.Action接口.并覆写execute方法即可.(不推荐)

Action接口中,不仅提供了Action方法的声明,也提供了常用的逻辑视图名称:

public static final String SUCCESS = "success";

public static final String NONE = "none";

public static final String ERROR = "error";

public static final String INPUT = "input";

public static final String LOGIN = "login";

缺点:

    不支持国际化,数据校验,消息机制.

解决方案:第三种:

第三种.定义一个类,继承于com.opensymphony.xwork2.ActionSupport类.(推荐)

publicclass ActionSupport implements Action, Validateable, ValidationAware,TextProvider, LocaleProvider, Serializable {}

---------------------------------------------

真实开发中,我们却往往再提供一个BaseAction类.

ActionSupport.

---BaseAction(自定义Action的基类.)

-----AAction

-----BAction


第三种方法代码:

package clu.mochunrong.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport{

	private static final long serialVersionUID = 1L;
	@Override
	public String execute() throws Exception {
		System.out.println("ActionSupport");
		return Action.SUCCESS;
	}

}

<struts>
	<package name="HelloActionPak" extends="struts-default" namespace="/hello1">
	<action name="hello2" >
	<result>/views/jsp/student.jsp</result>
	</action>
	</package>
</struts>



Action中多方法调用

Action中多个Action方法会造成<action>配置的臃肿.

解决方案:

方案1:DMI:动态方法调用 :官方不推荐.

      格式: action名!方法名

      比如: emp!edit    emp!list

在Struts2新的版本中,默认的关闭了DMI.若我们需要使用DMI,就需要配置常量,启用动态方法调用.

此时:<action/>元素不需要指定method属性值.

<constant name="struts.enable.DynamicMethodInvocation"value="true"/>

---------------------------------------------------------------------------------

方案2: 使用通配符的方式类配置:  通配符:*

<action name="emp_*"class="org.fkjava.struts.manymethod.EmployeeAction"method="{1}">

Action的名字:emp_Action方法: 比如:emp_list,那么{1}的值就是list

                                emp_edit,那么{1}的值就是edit

两个通配符:

<action name="*_*" class="org.fkjava.struts.manymethod.{1}Action"method="{2}">

Action名字:Action类名_Action方法.比如:Employee_list,表示调用的EmployeeAction中的list方法

                                 比如:Department_edit,表示调用DepartmentAction中的edit方法.


臃肿:

<struts>
	<package name="hellopkg" extends="struts-default" namespace="/hello1">
	
	<action name="add" class="clu.mochunrong.action.HelloAction" method="add"/>
	<action name="save" class="clu.mochunrong.action.HelloAction" method="save"/>
	<action name="delete" class="clu.mochunrong.action.HelloAction" method="delete"/>
	<action name="update" class="clu.mochunrong.action.HelloAction" method="update"/>
	
	</package>
</struts>
package clu.mochunrong.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {

public String add(){
	System.out.println("add表");
	return NONE;
}
public String save(){
	System.out.println("save表");
	return NONE;
}
public String update(){
	System.out.println("update表");
	return NONE;
}
public String delete(){
	System.out.println("delete表");
	return NONE;
}

}


解决方法1:

解决方法(官方不推荐):
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<struts>
	<package name="hellopkg" extends="struts-default" namespace="/a">
	
	<action name="b" class="clu.mochunrong.action.HelloAction">
	<allowed-methods>add,save,update,delete</allowed-methods>
	</action>
	
	</package>
</struts>

解决方法2:

使用通配符:
<struts>
	<package name="hellopkg" extends="struts-default" namespace="/a">
	
	<action name="*_*" class="clu.mochunrong.action.{1}Action" method="{2}">
	<allowed-methods>add,save,update,delete</allowed-methods>
	</action>
	
	</package>
</struts>

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mc19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值