Struts2之Action的实现
对于Struts2框架来说,最重要的莫过于Action类的编写,类比于Servlet,Action类也是通过类的实例对象调用方法来处理请求的,Action类的实例对象是由Struts2的核心Filter,根据请求的Action,来决定生成哪个Action类的实例对象。
不同与servlet,一个类要成为Action类并不需要继承任何Struts2的基类,或者实现任何接口。
public class LoginAction
{
private String name;
private Sting password;
//name Field的setter方法和getter方法
......
//password Field的setter方法和getter方法
.....
//Action类默认的处理用户请求的方法:execute() 类似于servlet类中service()方法
public String execute()
{
......... //处理代码
}
}
分析一下一个请求到Action中被处理的整个过程: --------这个地方也是Struts2框架的核心
页面的一个请求,请求中有两个属性name,password → 该请求被Struts2的核心Filter拦截 → 可能先根据常量配置对请求参数进行解析,转码等操作 →
核心Filter根据该请求所请求的Action类,生成这个Action类的实例对象(根据struts.xml配置文件的对应关系,生成实例对象利用了反射技术) →
核心Filter把请求中属性 调用Action类的实例对象的setter方法赋给实例对象Field → 通过Action类的实例对象调用execute()方法来处理请求,放回一个逻辑视图名 →
核心Filter根据放回的逻辑视图名 对应于struts.xml配置文件中逻辑视图名与物理视图名对应关系 ,转发到物理视图页面
由这个过程可见核心Filter对于整个过程起了举足轻重的作用,而这个核心Filter究竟是如何详细的处理的不用程序员关心 。
一个类是Action类 是不需要实现任何接口或继承任何基类的 但是Struts2框架为了使开发者开发的Struts更加规范 ,提供了Action接口和ActionSupport基类 ,程序员可以选择的进行实现或继承
Action接口 ---------包含了一些结果字符串
ActionSupport类 -------是Action接口的实现类 ,里面提供了一些默认的方法
Action访问Servlet的API
不同于Struts1, Struts2的Action没有与任何的Servlet API耦合 ,但是我们又想使用servlet中的几大对象如ServletContext对象 ,request对象 ,response对象,session对象 ,application对象怎么办?
大概有三种方式:
1.通过ActionContext类的实例对象 ,调用该类提供的方法
这种方式并不是真正的拿到了request对象,response对象 .... 那些方法返回不是request对象........,但是向其中添加值,与向request对象.....,添加值得效果相同。
2.通过让该Action类选择实现ServletContextAware接口 ,ServletRequestAware接口 ,ServletResponseAware接口
这种方式可以获得requst对象....,但是想获得某个对象,就要实现特定的接口,也不是很方便。
3.通过ServletActionContext工具类
getPageContext()
getRequest()
getResponse()
getServletContext()
这种方式可以获得pageContext对象,request对象,reponse对象,servletContext对象。这种方式最方便,推荐使用这种方式。
Struts2之Action的实现的更多相关文章
- struts2的action是多例,servlet是单例
struts2中action是多例的,即一个session产生一个action如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的 属性不一样,操作得出的 ...
- Struts2中Action接收参数的四种形式
1.Struts2的Action接收参数的三种形式. a. 使用Action的属性接收(直接在action中利用get方法来接收参数): login.js ...
- Struts2中Action取得表单数据的几种方法
Struts2中Action取得表单数据的几种方法 Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...
- Struts2的Action(二)
Struts2的Action可以是一个POJO(即简单的javaBean),也实现Action接口,或者继承ActionSupport类. 1.Action接口: public interface A ...
- Struts2之Action
Struts2之Action MVC模式中需要有一个控制器来负责浏览器与服务器之间的通信,实现用户与服务器的交互.在Struts2框架中实现这一功能的是Action,它是整个框架最核心的部分.Acti ...
- 浅析Struts1和Struts2的Action线程安全问题 转
浅析Struts1和Struts2的Action线程安全问题 转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近 ...
- struts1 和 struts2中Action什么时候实例化
精帖1:http://blog.csdn.net/lfsf802/article/details/7277013 精帖1:http://blog.csdn.net/wmj2003/article/de ...
- struts2的action从request获取参数值的几种方式
使用jquery框架的ajax能够方便的向后台传递参数,以$.post为例,参数有2种方式字符串和键值对:$.post(url, "name=aty&age=25")和$. ...
- struts2 修改action的后缀
struts2 修改action的后缀 struts2 的默认后缀是 .action 虽然很直观,但是很烦琐.很多人喜欢将请求的后缀改为 .do 在struts2中修改action后缀有两种比较简单的 ...
- 关于struts2中action请求会执行两次的问题
关于struts2中action请求会执行两次的问题 在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...
随机推荐
- 初学 Java Web 开发,从 Servlet 开发
1. 基本要求:Java 编程基础 有良好的 Java 语言编程基础,这是必须的,在讨论 Web 开发技术时提了一个 Java 编程基础的问题会被鄙视的. 2. 环境准备 (Eclipse + Tom ...
- [SCOI2010]传送带
在两个传送带上分别三分两个点计算 三分套三分 # include <bits/stdc++.h> # define IL inline # define RG register # def ...
- java 实现登录验证码 (kaptcha 验证码组件)
验证码的作用: 1.防止广告机注册和发帖.评论.2.防止暴力破解密码,特别是有管理员权限的密码. 在这里介绍一种非常实用的验证码生成工具:kaptcha 这个工具,可以生成各种样式的验证码,因为它是可 ...
- jQuery中的自定义插件之----工厂方法(Factory Widget)
jQuery赋予了我们很强大的插件自定义的功能,可以作为我们的武器库,应用到所有的网页中,使用的语法比较有意思,下面是对它的一些探讨. 遵循以下的原则: 1 IIFE 创建一个jQuery的scope ...
- 初识 .net core和vs code
定义:什么是.net core? .net core是一个跨各个不同操作系统运行的平台.时至今日,windows上.net framework已经发展成熟,可以用来开发windows平台下的几乎所有应 ...
- 关于android studio 的高德配置
1.获得key 进入控制台,创建一个新应用.在创建的应用上点击"添加新Key"按钮,在弹出的对话框中,依次:输入应用名名称,选择绑定的服务为"Android平台SDK&q ...
- for语句 2017-03-17
一.for语句 For(初始条件:循环条件:状态改变) { 循环体 } 步骤: 1. 先判断条件 2. 如果满足条件,执行循环体 3. 状态改变 例题: 1. i++和++i 的区别: var ...
- QC的使用简介
目录一.站点管理员的操作(后台)1.登录2.创建域3.创建项目4.新建用户5.QC的一些其他信息的修改(非 常用)二.项目管理员对项目的配置管理(前台)1.登录2.修改用户个人信息及密码3.项目成员设 ...
- gdb命令调试技巧
gdb命令调试技巧 一.信息显示1.显示gdb版本 (gdb) show version2.显示gdb版权 (gdb) show version or show warranty3.启动时不显示提示信 ...
- 利用github协作开发步骤
项目使用IDEA开发,IDEA上可以加载很多的插件(而且下载很快),安装github插件,安装git 首先一个成员需要创建好代码库,这个代码库存放项目,所有的开发提交代码都是向这个库提交,在githu ...