动态方法调用(在请求的时候,再明确具体的响应方法,配置的时候不明确):

  LoginAction类中有两个方法some和second

  1. 动态方法的调用(修改常量struts.enable.DynamicMethodInvocation):

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    <package name="demo" namespace="/test" extends="struts-default">
        <action name="login" class="com.tongji.actions.LoginAction">
            <result name="some">/some.jsp</result>
            <result name="second">/second.jsp</result>
        </action>
    </package>
</struts>

  html路径请求时使用 login!some.action 这种格式。

  2. 使用通配符定义的Action: 

<struts>
    <package name="demo" namespace="/test" extends="struts-default">
        <action name="login_*" class="com.tongji.actions.LoginAction" method="{1}">
            <result name="some">/some.jsp</result>
            <result name="second">/second.jsp</result>
        </action>
    </package>
</struts>

  html路径请求时使用 login_second.action 这种格式。

Action接收请求参数:

  1. 属性驱动方式:

    指服务器段接收来自客户端的离散数据的方式。用户提交的数据,Action原封不动的进行逐个接收。该接收方式要求,在Action类中定义与请求参数同名的属性,即定义该属性的set方法。

    这样就能够使Action自动将请求参数的值赋予同名属性。

  2. 域驱动方式:

    指服务器端以封装好的对象方式接收来自客户端的数据方式。将用户提交的多个数据以封装的方式进行整体提交。该方式要求,表单提交时,参数以对象属性的方式提交。而Action中要将

    同名的对象定义为属性(为其赋予getter和setter)。这样请求将会以封装好的对象数据形式提交给Action。

    Action中定义:

    private Student student;  //域属性,即对象属性

        public Student getStudent() {
           return student;
        }

        public void setStudent(Student student) {
           this.student = student;
        }

    表单提交时:

    用户名:<input type="text" name="student.name"/><br>
         年龄:<input type="text" name="student.age"/><br>

    页面获取参数时:

    name = ${student.name}<br>
       age = ${student.age}<br>

  3. 集合数据接收:

    指以集合对象方式接收数据。此情况与与域驱动接收数据原理是相同的。注意,必须是集合,不能是数组,因为数组不能自动扩展。

    Action中定义:

    private List<Student> students;  

       public List<Student> getStudents() {
           return students;
       }

       public void setStudents(List<Student> students) {
           this.students = students;
       }

    表单提交时:

    用户名:<input type="text" name="students[0].name"/><br>
         年龄:<input type="text" name="students[0].age"/><br>

    页面获取参数时:

    name = ${students[0].name}<br>
       age = ${students[0].age}<br>

  4. ModelDriven方式:

    ModelDriven接收请求参数运行背后使用了Struts2的核心功能ValueStack。Struts2的默认拦截器中存在一个拦截器ModelDrivenInterceptor。当一个请求经过该拦截器时,

    在这个拦截器中,首先会判断当前调用的Action对象是否实现了ModelDriven接口。如果实现了这个接口,则调用getModel()方法,并把返回值压入ValueStack栈顶。

    public class LoginAction implements ModelDriven<Student>{
        private Student student;

        public String execute() {
            return "success";
        }

        @Override
        public Student getModel() {
            if (student == null) {
                 student = new Student();
             }
            return student;
        }
     }

     表单提交时:

    用户名:<input type="text" name="name"/><br>
         年龄:<input type="text" name="age"/><br>

    页面获取参数时:

    name = ${name}<br>
       age = ${age}<br>

Struts2--课程笔记2的更多相关文章

  1. SpringMVC框架 课程笔记

    SpringMVC框架 课程笔记 第0章 SpringMVC框架的核心内容 1.SpringMVC 概述 2.SpringMVC 的 HelloWorld 3.使用 @RequestMapping 映 ...

  2. Linux内核分析课程笔记(一)

    linux内核分析课程笔记(一) 冯诺依曼体系结构 冯诺依曼体系结构实际上就是存储程序计算机. 从两个层面来讲: 从硬件的角度来看,冯诺依曼体系结构逻辑上可以抽象成CPU和内存,通过总线相连.CPU上 ...

  3. (1/18)重学Standford_iOS7开发_iOS概述_课程笔记

    写在前面:上次学习课程对iOS还是一知半解,由于缺乏实践,看公开课的视频有时不能很好地领会知识.带着问题去学习永远是最好的方法,接触一段时间iOS开发以后再来看斯坦福iOS公开课,又会有许多新的发现, ...

  4. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  5. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  6. Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

    Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...

  7. Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)

    title: Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归) tags: 机器学习, 学习笔记 grammar_cjkRuby: true --- 之前看过一遍,但是总是模 ...

  8. Andrew Ng机器学习课程笔记--汇总

    笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...

  9. Andrew 机器学习课程笔记

    Andrew 机器学习课程笔记 完成 Andrew 的课程结束至今已有一段时间,课程介绍深入浅出,很好的解释了模型的基本原理以及应用.在我看来这是个很好的入门视频,他老人家现在又出了一门 deep l ...

  10. 操作系统学习笔记----进程/线程模型----Coursera课程笔记

    操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...

随机推荐

  1. delphi 快捷键大全

    ************************* 1.功能键 2.组合键 3.其他快捷键 4.补充 5.补充1(带分类) 6.补充2 --Edit by 2013.1.14 ************ ...

  2. Java 代码性能优化

    代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...

  3. Git 添加自己分支 pull request

    1.找到项目地址 这里,我们可以找到项目地址,比如:https://github.com/*****/Cplusplus_Thread_Lib,然后点击页面右上角的 "fork"  ...

  4. TCP和UDP报文分片的区别

    搞了三年网络,今天才知道这个细节,汗,总结下: MTU大家都知道,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节.一个IP数据报在以太网中 传输,如果它的长度大于该MTU ...

  5. jQuery EasyUI的使用入门

    jQuery EasyUI不是什么太高级的东西,就是用jQuery写了很多方法.定义了很多属性,通过调用这些方法.属性,可以达到一些特定的效果,然后我们再根据具体需求微调就好了.至少需要导入两个样式表 ...

  6. lr_save_var() 截取任意字符串长度,以参数形式输出(参数转变量)

    Action() { char * desc=(char *)malloc(10);  //定义指针变量,以变量形式存放截取到的参数值 // char * aa = "jadkshfkasd ...

  7. 第三天 函数 三元运算 lambda表达式 内置函数 文件操作

    面向过程: 直接一行一行写代码,遇到重复的内容复制黏贴. 不利于代码阅读 代码没有复用 面向对象 将代码块定义为函数,以后直接调用函数 增强了复用性 函数的定义方法 def 函数名(传递参数): 函数 ...

  8. ubuntu 16.04下搭建web服务器(MySQL+PHP+Apache) 教程

    1.开始说明 下面很多可能参照网上其中以为前辈的,但有所改进吧.这些设置可能会有所不同,你需要根据不同情况进行修改. 安装apache2 2.切换管理员身份 在ubuntu中需要用root身份进行操作 ...

  9. gulp学习笔记(一)

    gulp 是基于 Nodejs 的自动任务运行器,能自动化地完成javascript/coffee/sass/less/html/image/css等文件的的测试.检查.合并.压缩.格式化.浏览器自动 ...

  10. linux安装包资源库

    最近发现了一个很不错的linux的rpm资源库,可以在里面找到rpm安装过程中缺失的资源! 网址:http://pkgs.org/