struts学习笔记

来源:互联网 发布:奶奶踩死孙女知乎 编辑:程序博客网 时间:2024/06/10 06:59

Action名称的搜索顺序

1.获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action

2.首先寻找namespace/path1/path2/path3package,如果存在这个package,则在这个package中寻找名字为testaction,如果不存在这个package则转步骤3

3.寻找namespace/path1/path2package,如果存在这个package,则在这个package中寻找名字为testaction,如果不存在这个package,则转步骤4

4.寻找namespace/path1package,如果存在这个package,则在这个package中寻找名字为testaction,如果仍然不存在这个package,就去默认的namaspacepackage下面去找名字为testaction(默认的命名空间为空字符串"" ),如果还是找不到,页面提示找不到action

Action配置中的各项默认值

<package name="itcast" namespace="/test" extends="struts-default">

        <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" >

  <result name="success">/WEB-INF/page/hello.jsp</result>

        </action>

  </package>

1>如果没有为action指定class,默认是ActionSupport

2>如果没有为action指定method,默认执行action中的execute()方法。

3>如果没有指定resultname属性,默认值为success

Actionresult的各种转发类型

<action name="helloworld" class="cn.itcast.action.HelloWorldAction">

  <result name="success">/WEB-INF/page/hello.jsp</result>

</action>

result配置类似于struts1中的forward,struts2中提供了多种结果类型,常用的类型有: dispatcher(默认值) redirectredirectActionplainText

下面是redirectAction结果类型的例子,如果重定向的action中同一个包下:

<result type="redirectAction">helloworld</result>

如果重定向的action在别的命名空间下:

<result type="redirectAction">

  <param name="actionName">helloworld</param>

  <param name="namespace">/test</param>

</result>

plaintext:显示原始文件内容,例如:当我们需要原样显示jsp文件源代码的时候,我们可以使用此类型。

<result name="source" type="plainText ">

  <param name="location">/xxx.jsp</param>

  <param name="charSet">UTF-8</param><!--指定读取文件的编码 -->

</result>

result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。如下:

<result type="redirect">view.jsp?id=${id}</result>

多个Action共享一个视图--全局result配置

当多个action中都使用到了相同视图,这时我们应该把result定义为全局视图。struts1中提供了全局forward,struts2中也提供了相似功能:

<package ....>

  <global-results>

  <result name="message">/message.jsp</result>

  </global-results>

</package>

Action的属性注入值

Struts2Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入值。注意:属性必须提供setter方法。

public class HelloWorldAction{

  private String savePath;

  public String getSavePath() {

  return savePath;

  }

  public void setSavePath(StringsavePath) {

  this.savePath =savePath;

  }

       ......

}

<package name="itcast" namespace="/test" extends="struts-default">

  <action name="helloworld" class="cn.itcast.action.HelloWorldAction" >

  <param name="savePath">/images</param>

  <result name="success">/WEB-INF/page/hello.jsp</result>

  </action>

</package>

上面通过<param>节点为actionsavePath属性注入“/images”

指定需要Struts 2处理的请求后缀

前面我们都是默认使用.action后缀访问Action。其实默认后缀是可以通过常量struts.action.extension进行修改的,例如:我们可以配置Struts 2只处理以.do为后缀的请求路径:

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

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

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

</struts>

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

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

 

原创粉丝点击