源码下载地址:http://download.csdn.net/detail/zhoujing_0424/9239429
Struts2的核心配置文件struts.xml的基本格式为:
<struts>Action配置的各项默认值为:
<package name=" " namespace=" " extends="struts-default">
<action name=" " class=" " method="execute">
<result name=" " type=" ">index.jsp</result>
</action>
</package>
</struts>
1)如果没有为action指定class,默认是ActionSupport。
2)如果没有为action指定method,默认执行action中的execute()方法。
3)如果没有为action指定result,默认值为success。
Struts2为result提供了多种转发类型,常用的有dispatcher、redirect、redirectAction、plainText等。以如下图所示的项目来分别说明这四种转发方式。
1.dispatcher:默认值,内部请求转发
<struts>如上代码所示,在浏览器地址栏输入http://localhost:8080/Struts2/control/helloworld,将会转向WEB-INF目录底下page文件夹中的hello.jsp,在hello.jsp中可以通过${属性名}表达式访问action中的属性。
<package name="zj" namespace="/control" extends="struts-default">
<action name="helloworld" class="cn.zj.action.HelloWorldAction" method="execute">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
</struts>
2.redirect:请求重定向
<struts>如上代码所示,访问URL为http://localhost:8080/Struts2/control/redirect,会重定向到http://localhost:8080/Struts2/index.jsp。注意:浏览器重定向redirect方式无法访问WEB-INF下的jsp文件,WEB-INF下的jsp文件只能由服务器的内部请求转发。
<package name="zj" namespace="/control" extends="struts-default">
<action name="redirect">
<result type="redirect">/index.jsp</result>
</action>
</package>
</struts>
3.redirectAction:重定向到另外一个action
<struts>如上代码所示,重定向到另外一个action分为两种情况,一种是重定向到同一个包中的action,这种情况下直接提供actionName即可;另外一种是重定向到不同包中的action,这种情况下需要使用param来指定namespace和actionName。访问URL为http://localhost:8080/Struts2/control/redirectAction会先转向http://localhost:8080/Struts2/control/helloworld,然后转向WEB-INF目录底下page文件夹中的hello.jsp,这里发生了一次请求重定向和一次内部请求转发。访问URL为http://localhost:8080/Struts2/control/redirectAction2会先转向http://localhost:8080/Struts2/control2/action2,然后再转向http://localhost:8080/Struts2/index.jsp,这里发生了两次请求重定向。
<package name="zj" namespace="/control" extends="struts-default">
<action name="helloworld" class="cn.zj.action.HelloWorldAction" method="execute">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
<action name="redirectAction">
<result type="redirectAction">helloworld</result><!-- 转向同一个包内的action -->
</action>
<action name="redirectAction2">
<result type="redirectAction">
<param name="actionName">action2</param><!-- 转向不同包的action -->
<param name="namespace">/control2</param>
</result>
</action>
</package>
<package name="zj2" namespace="/control2" extends="struts-default">
<action name="action2">
<result type="redirect">/index.jsp</result>
</action>
</package>
</struts>
4.plainText:显示原始文件内容
<struts>plainText显示原始文件内容,例如:当我们需要原样显示jsp文件源代码的时候,我们就可以使用此类型。我们还可以使用param的charSet参数来指定读取文件的编码,这可以用于解决乱码问题。
<package name="zj" namespace="/control" extends="struts-default">
<action name="plainText">
<result type="plainText">/index.jsp</result>
</action>
<action name="plainText2">
<result type="plainText">
<param name="location">/index.jsp</param>
<param name="charSet">UTF-8</param><!-- 指定读取文件的编码 -->
</result>
</action>
</package>
</struts>