问题,配置文件中有哪些标签及标签的各个作用,Action的使用方法,自动更新配置文件的设置,动作名称后缀名的设置,各个result中type属性值。
struts2:到底做了什么呢?
1、编写struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts><!--这是Struts2配置文件的根元素--> <package name="itcast" namespace="/test" extends="struts-default"> <!-- pageckage:方便管理动作元素 name:必须有。包的名称,配置文件中必须保证<span style="color:#ff0000;">唯一</span>。 namespace:该包的名称空间,一般是以"/"开头(可以不写这个namespace,但是建议写) extends:集成的父包的名称。struts-default名称的包是struts2框架已经命名好的一个包。(在struts2-core.jar中有一个struts-default.xml中,里面是核心拦截器的实现) abstract:是否是抽象包。没有任何action元素的包就是抽象包(java类)-->
<span style="white-space:pre"> </span><action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="sayHello"> <!-- <span style="white-space:pre"> </span>action:代表一个请求动作 <span style="white-space:pre"> </span>name:同包中必须<span style="color:#ff6666;">唯一</span>。动作的名称 <span style="white-space:pre"> </span>class:负责处理的JavaBean的类全名 <span style="white-space:pre"> </span>method:JavaBean中的对应处理方法。(动作方法:特点是,public String 方法名(){},不写menthod默认走execute方法(该方法必须继承ActionSupport类不然就没有这个execute方法)) --> <span style="white-space:pre"> </span><result name="success">/1.jsp</result> <span style="white-space:pre"> </span><!-- <span style="white-space:pre"> </span>result:结果类型 name:动作方法返回的字符串(默认success) 主体内容:View的具体地址。 --> </action> </package> </struts>
package cn.itcast.action; public class HelloWorldAction implements Serializable { private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String sayHello(){ message = "helloworld by struts2"; return "success"; } }
4、访问helloworld动作的方式:http://localhost:8080/struts2day01/test/helloworld 应用名称/包的名称空间/动作的名称
/test 有了,调用执行
Key:http://struts.apache.org/dtds/struts-2.1.7.dtd
2、Struts配置文件中的各种默认值。
action:(如果不写action中的class及method,将走下面默认的实例化类及execute方法)
1 redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。
2 redirect-action:action处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失。
3 chain:action处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失。
result元素的写法:
chain的用法
方式一:<result type="chain" name="success">a2</result>
<!--这个名字不用谢namespace名字,它直接写名字-->
方式二:
<!--name对应的chain的处理器中的setActionName()方法-->
<span style="white-space:pre"> </span><package name="p1" namespace="/namespace1" extends="struts-default"> <action name="a2"> <result type="dispatcher" name="success">/3.jsp</result> </action> </package> <package name="p2" namespace="/namespace2" extends="struts-default"> <action name="a1"> <result type="chain" name="success"> <param name="namespace">/namespace1</param> <param name="actionName">a2</param> </result> </action> </package>
<package name="itcast" namespace="/test" extends="struts-default"> <action name="hhw1"> <result type="redirectAction" name="success"> <param name="namespace">/test3</param> <param name="actionName">a3</param> </result> </action> </package> <package name="p3" namespace="/test3" extends="struts-default"> <action name="a3"> <result type="redirectAction" name="success" >a4</result> </action> <action name="a4"> <result type="dispatcher" name="success">/3.jsp</result> </action> </package>
<span style="font-family:Microsoft YaHei;font-size:18px;"> <!--动态设置javabean中的属性值,转发后的页面就可以得到属性值--> <action name="a4" class="com.itcast.web.domain.javabean"> <param name="name">I'm Mr_Li13</param> <!--动态得到javabean中的属性值(这里使用的name值就是Javabean的属性)--> <action name="a5" class="com.itcast.web.domain.javabean" method="sayHello" > <result type="redirect" name="success">/4.jsp? msg=${name}</result> </action> <span style="color:#ff0000;"><!--*重点用户指定多个请求后缀,有多个逗号隔开。配置文件的动态更新--> <constant name="struts.action.extension" value="action,,do"></constant> <constant name="struts.devMode" value="true"></constant></span></span>
3、开发中配置文件的更改,在访问时让框架自动重新加载:
struts.devMode = false(default.properties)
<span style="font-size:18px;"><!--利用strutx.xml中的constant元素来覆盖掉default.properties默认行为--> <struts> <constant name="struts.devMode" value="true"></constant> </struts></span>
这里的两个模式的设置,可以按照这个设置,也可以按照下图介绍,去找相关的知识。