这里是重点.

Action接口

  • struts2 的Action可以是POJO
  • 为了让用户开发的Action更加规范struts2提供了一个Action接口

ActionSupport基类

  • Struts2为Action接口提供了一个实现类 ActionSupport,定义了 表单域校验、错误信息设置和获得国际化信息相关一些方法

我们写的action可以有以下几种选择:

  • Action 可以是 POJO
  • 用户编写Action 可以实现Action接口    可以使用结果集常量字符串
  • 用户编写Action 可以继承ActionSupport基类   对请求参数进行校验  设置错误信息 读取国际化信息 
  • execute方法编写注意细节   public 修饰符   String 返回值     无参数

通过method属性指定action的执行方法

  • 没有指定method属性,默认执行execute方法
  • 通过method属性,指定调用Action相应方法处理请求

使用通配符配置Action

  • 在配置<action...>元素时,允许在指定name属性时,使用模式字符串(用"*"代表一个或多个任意字符)
  • 在class、method属性及<result>子元素中通过 {N} 形式代表前面地N个* 匹配子串
  • 这里一个使用通配符的更复杂案例
  • *_*代表匹配两个字符串
  • {1} 匹配UserAction 用于执行class
  • {2} 匹配login用于指定method执行方法 和结果页面
 使用Action的动态方法调用
  • 通过url动态指定调用Action哪个方法而无需配置<action>的method属性
  • 通过 !方法名 指定调用Action哪个方法
  • struts.xml没有指定method属性
  • 但是product!add.action 就会执行ProductAction的add方法

配置默认Action和 配置Action默认处理类

  • 用户可以为每个package定义一个默认的Action,如果访问路径在package没有匹配<action> 就会执行默认action
  • 如果配置<action> 没有指定class属性,就会执行Action的默认处理类,在struts-default.xml中
配置处理结果
  • Action处理完用户请求后,将返回一个普通字符串
  • 整个普通字符串就是一个逻辑视图名
  • Struts2根据逻辑视图名,决定响应哪个结果
  • Struts2处理结果使用<result>元素配置局部结果:将<result>作为<action>子元素配置 全局结果:将<result>作为<global-results>元素的子元素配置
  • 配置<result>元素通常需要指定两个属性  name  该属性指定配置逻辑视图名    type  该属性指定结果类型
 全局结果

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

<package ....>

<global-results>

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

</global-results>

</package>

注:局部的会覆盖全局

Struts1中应用范围内action的实例 action是单实例(执行时,现在缓存中查找实例,有用,没有创建新的实例)

Struts2中 应用范围内action的实例,每个请求都会创建一个action实例

Servlet属于单实例多线程的应用,实例只在初始化时被加载

多实例比单实例的优点,不会产生并发问题,但执行速度不如单实例

重点结果类型(经常使用到的)

  • struts-default.xml 配置常用结果类型

结果类型:  dispatcher

  • ldispatcher 结果类型是最常用的结果类型, 也是 struts 框架默认的结果类型
  • 该结果类型有一个 location 参数, 它是一个默认参数
  • ldispatcher 结果类型将把控制权转发给应用程序里的某个资源.
  • ldispatcher 结果类型不能把控制权转发给一个外部资源. 若需要把控制权重定向到一个外部资源, 应该使用 redirect 结果类型

结果类型:  redirect

  • lredirect 结果类型将把响应重定向到另一个资源, 而不是转发给该资源.
  • lredirect 结果类型接受下面这些参数: location: 用来给出重定向的目的地  param: 用来表明是否把 location 参数的值视为一个 OGNL 表达式来解释. 默认值为 true
  • lredirect 结果类型可以把响应重定向到一个外部资源

结果类型:  redirectAction

  • lredirectAction 结果类型把响应重定向到另一个 Action
  • redirectAction 结果类型接受下面这些参数  actionName: 指定 “目的地” 动作的名字. 它是默认属性     namespace: 用来指定 “目的地” 动作的命名空间. 如果没有配置该参数, Struts 会把当前 Action 所在的命名空间作为 “目的地” 的命名空间

Struts2 Action接受请求参数

  • 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中
  • Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装
  • Struts2 提供三种数据封装的方式  1Action 本身作为model对象,通过成员setter封装2创建独立model对象,页面通过ognl表达式封装3.使用ModelDriven接口,对请求数据进行封装

Action类成员变量setter接收参数

创建单独model对象,页面OGNL

 使用ModelDriven接口封装数据

Struts2学习笔记整理(二)的更多相关文章

  1. Deep Learning(深度学习)学习笔记整理(二)

    本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...

  2. struts2学习笔记之二:基本环境搭建

    学习struts2有一段时间了,作为一个运维人员学习的时间还是挺紧张的,写这篇文件为了方便以后复习时使用 环境: MyEclipse 10 tomcat6 jdk1.6   首先建立一个web项目,并 ...

  3. Struts2学习笔记整理(一)

    最近在学习框架,很多人建议我直接学SSM,SSM看了一段时间后发现很多东西虽然可以用了,但是并不是很了解,所以我打算重新来过.从SSH开始学习,前面已经大致的学习了Hibernate,对于Hibern ...

  4. Struts2学习笔记整理(三)

    Struts2的输入校验 之前对请求参数的输入校验一般分为两部分:1.客户端校验,也就是我们写js代码去对客户的误操作进行过滤  2.服务端校验, 这是整个应用组织非法数据的最后防线. Struts2 ...

  5. struts2学习笔记(二)—— struts2的架构【转】

    一.系统架构   Struts2的官方文档附带了Struts2的架构图. 从这张图能够非常好的去理解Struts2 关于图中的Key: Servlet Filters:过滤器链,client的全部请求 ...

  6. Struts2学习笔记整理(四)

    Struts2上传下载 文件上传 如果想使用HTML表单上传文件(一个或多个),那么必须把HTML表单的enctype属性设置成multipart/form-data,且method=post, 且使 ...

  7. struts2学习笔记(二)

    一. 国际化的目标 1). 如何配置国际化资源文件 I. Action 范围资源文件: 在Action类文件所在的路径建立名为 ActionName_language_country.properti ...

  8. struts2学习笔记(二)—— 获取登录信息及计算在线人数

    实现目的:       1.点击"Login"的超链接.进入登录页面       2.填写登录信息.提交表单,将用户信息保存进Session       3.显示用户名,并计算在线 ...

  9. Struts2学习笔记《二》

    struts.xml配置文件的全部配置元素:

随机推荐

  1. 分享一个单例模型类Singleton代码

    相关代码: ;                foreach (string key in dict.Keys)                {                    if (cou ...

  2. c#中获取路径方法

    要在c#中获取路径有好多方法,一般常用的有以下五种: //获取应用程序的当前工作目录. String path1 = System.IO.Directory.GetCurrentDirectory() ...

  3. 浅谈Maven

    最近的有用到Maven 所以就大概跟大家谈一下Maven 1什么是Maven? Maven我个人的理解就是项目架包管理 通俗易懂的来说就是管理配置你项目中的所有jar包的 废话不多说 Maven去ht ...

  4. C# 处理Word自动生成报告 二、数据源例子

    还是以学生.语文.数学.分数为例吧, 感觉这个和helloworld都有一拼了. 造一张表如下, 整张报表就围绕这个表转圈了, 顺便说下就是名字如有雷同纯属巧合 新建个存储过程 ALTER PROCE ...

  5. Linux系列教程(二十四)——Linux的系统管理

    上篇博客介绍了Linux的服务管理,不管是以RPM包安装的服务,还是通过源码包安装的服务,万能启动服务的方法都可以通过 /绝对路径/启动脚本名 start .而通过 RPM 包安装的服务还可以通过 s ...

  6. sockt套接字编程

    一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的 ...

  7. servlet+jsp+jdbc实现从数据库查询用户信息到页面

    工程创建这里就不在累述了,直接从显示User信息列表开始. 备注:我用的是servlet3的注解功能实现的,所以不需要配置web.xml 这是我的工程目录: 首先我们创建实体类: public cla ...

  8. LINQ学习系列-----2.1 一个Linq语句

    Linq语句介绍 先上源码: 上述代码涵盖了Linq新特性: 代码解析: 针对本文中的几点特性,前面有文章进行阐述.

  9. 2981:大整数加法-poj

    2981:大整数加法 总时间限制:  1000ms 内存限制:  65536kB 描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. 输 ...

  10. Linux运维项目实战系列

    Linux运维项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-项目实战2-实现基于LVS负载均衡集群的电商网站架构 2.1项目实战2.1-nginx 反向 ...