关闭

Struts2上课笔记

标签: javastrutsstruts2.0redirectclass
123人阅读 评论(0) 收藏 举报
分类:
上课笔记:
笔记扩展:

Forward 和 Redirect的区别


简单的说Forward是发生在服务器内部,客户端不知道发生了request的转向。客户A向服务器B请求,服务器B处理完请求并发生forward转向,请求不会经过客户端,而是在内部请求另外一个服务器资源。对于客户A来说,该操作是透明的。

Redirect则是客户端A向B请求后,服务器B处理完请求结果,并把结果返回值客户端A,并要求客户端A向服务器C发出请求。对于客户端A来说,其实是发生了两次请求。一个重要的区别还在于,Redirect会重新发起请求,所以会丢失请求参数,请求属性,Action实例和Action中封装的属性。


一,result可以继续转发或者重定向一个action(一个java文件,class文件+)

       result的type结果类型:redirectAction
        redirectAction结果类型,注意的是redirectAction在浏览器中输入如:
        调转之后的页面的url地址栏上的是:
        下面的2个action为例子,第一个对应的servlet是LoginAction.java,其中有一个方法
        execute(),返回值是:success
        1.最重要的一点把这个action中的result的name设置为success,type="redirectAction"
        2.在param中name="actionName",这是必须的,然后在param标签中设置这个namespace
        3.这个namespace的内容就是你需要“转发”的请求目的地

            <action name="LoginAction" method="execute" class="com.li.LoginAction">
                <result name="success" type="redirectAction">
                        <param name="actionName">SecondAction</param>
                </result>
         </action>

        <action name="SecondAction" class="com.li.SecondAction" method="execute">
            <result name="success">/test2.jsp</result>
        </action>
        
二,action链

<!--下面举个简单例子来说明下这个action链式处理结果:写2个package,第一个写要写好namespace
,第二个package我没写namespace(其实也可写)-->
         <package name="er" extends="struts-default" namespace="/er">
                        //为了方便讲解,这里我用双//解释,当然你在Struts.xml中要用<!--  -->这样来注释
                        //注意在在这里name=“input-form”,我用了默认的class,默认的方法,当然这样
                      //之后这个action的结果result我用name="success",转发到/WEB-INF/pages/form.jsp
                    <action name="input-form">
                             <result name="success">/WEB-INF/pages/form.jsp</result>
                     </action>
          </package>
                    //再看第二个package,首先把action的路径和方法出在com.li.sqlQueryAction(sqlQueryAction.java)
                    //sqlQueryAction.java中有一个方法:save,方法的返回值:success
                    //看  <result name="success" type="chain">type类型是chain,那么接下来简单了
                    //二个param。一个设置name="actionName",param标签对内容是上一个package中action的input-                                                 //input-form      
                    //   第二个param设置就是刚才要求第一个package中name要写的namespace ,暂时理解则么多了0-0                                                    
           <package name="myapp" extends="struts-default">
                    <action name="sqlQuery" class="com.li.sqlQueryAction" method="save">
                          <result name="success" type="chain">
                                <param name="actionName">input-form</param>
                                <param name="namespace">/er</param>
                          </result>
                     </action>
            </package>
三,动态结果
     这个动态结果首先明白这个含义:指的是在指定实际视图资源使用了表达式语法,通过这样的语法可以让action
    处理完请求之后,动态的转入实际的视图资源。看下面的例子
    我这里先写3个jsp页面:
   //页面1
    <body>
         <a href="Second1_test">Second_execute request</a><br>
    </body>
    //页面2
    <body>
         <p>test2 哈哈</p> 
     </body>
    //页面3
      <body>
           execute 啊啊啊啊啊 <br>
     </body>
    接下来配置struts.xml
    <package name="er" extends="struts-default" namespace="/">
                //注意这里的_*号的含义,当有一个请求是以Second1_开头的请求action模式情况下
                //都将进行处理(前提交条件是有这个servlet)。这里我模拟Second1_test
             //将这个请求发送到SecondAction.java后,method="{1}"会与test方法对应
            //然后有2个结果之一出现,执行转发2或者3页面
           //注意{1}.jsp,这个{1}就是test
            <action name="Second1_*" class="com.li.SecondAction" method="{1}">
            <result name="input">/test2.jsp</result>
            <result name="success">/{1}.jsp</result>
        </action>
    <package/>
    我在com.li包下写SecondAction.java文件,在这个类中有一个方法test(注意这里的test与页面1中href=“Second1_test”中的test对应
   public class SecondAction 
{
    public String test()
    {
        //使用随机数测试结果返回值为:success或者input
        double i = Math.random();
        if(i<0.5)
        {
            System.out.println("i="+i);
            return "success";
        }
        else
        {
            System.out.println("i="+i);
            return "input";    
        }
    }
}
四,全局结果
<global-results>
            <!-- 全局的result对所有的action都起作用 -->
            <result name="index">/index.jsp</result>
</global-results>

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:536次
    • 积分:48
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档