一、前言

Struts是一种基于MVC设计模式的web应用框架,主要担任C的角色,用于分离页面显示和业务逻辑处理,那其实在我们学习jsp的时候学过一个具有类似功能的东西——servlet。其实Struts本质上相当于servlet,可以理解Struts是对servlet的进一步封装和抽象。那么在servlet里面使用的对象,在Struts里面同样也是可以使用的,这也是这一章的主要内容。

二、传统的Web程序和Web容器传递数据的方法

  1. HttpServletRequest的getParameter(String name)方法
  2. HttpSession的getAttribute(String Object)方法

三、Action为什么需要调用Servlet API?

  1. Action需要存取request、session、application数据区中数据
  2. 例如:在Action中将用户数据保存到Session中
  3. 例如:跟踪用户的状态,例如购物车功能

四、Action访问servlet API的方式

  1. 提供了ServletActionContext类完成直接访问HttpServletRequest,HttpServletResponse,ServletContext 对象

  缺点:Action组件和这些ServletAPI耦合在一起,不利于软件维护。

//第一种方式:ServletActionContext类,直接访问servletAPI对象

HttpServletRequest request=ServletActionContext.getRequest();

HttpSession session=request.getSession();

ServletContext application=ServletActionContext.getServletContext(); 

//      request.setAttribute("user",uname);//将user对象放到request作用域中

//      session. setAttribute("user",uname);//将user对象放到session作用域中

//      application. setAttribute("user",uname);//将user对象放到application作用域中

if("ross".equals(this.uname) && "111".equals(this.upass)){

    request.setAttribute("user",uname);//将user对象放到request作用域中

    return "success";

}else{

    request.setAttribute("msg","用户名或密码错误");//将user对象放到request作用域中

    return "error";

}
  1. 提供ActionContext类

  特点:Struts2将ServletAPI(HttpServletRequest,HttpSession,ServletContext)分别封装在Map中,完成了Action组件和ServletAPI的解耦。

所以如果ActionContext能实现我们的功能就不要去使用ServletActionContext,让我们的action尽量不要去直接访问servlet的相关对象,更符合面向对象编程的思想。

  注意:不要在构造函数当中使用ActionContext,因为此时ActionContext里面的值也许还没有设置。同理,ServletActionContext也一样不要在构造函数当中使用。这就有了我们的第三种访问方式。

//第二种方式:actioncontext类

ActionContext context=ActionContext.getContext();

Map<String,String> request=(Map<String,String>)context.get("request");//获得request对象 Map<String,Object> session=(Map<String,Object>)context.getSession();

Map<String,Object> application=(Map<String,Object>)context.getApplication();

request.put("user",uname);//将user对象放到request作用域中

if("ross".equals(this.uname) && "111".equals(this.upass)){

              request.put("user",uname);//将user对象放到request作用域中

              return "success";

         }else{

              request.put("msg","用户名或密码错误");//将user对象放到request作用域中

              return "error";

         }
  1. 实现RequestAware,SessionAware,ApplicationAware接口。【推荐使用】

  特点:装配request,session,application对象的时机早,在检测Action组件的实现接口时就完成了装配。

private Map<String, Object> request;

     private Map<String, Object> session;

     private Map<String, Object> application;

     @Override

     public void setApplication(Map<String, Object> arg0) {

         this.application=arg0;

     }

     @Override

     public void setSession(Map<String, Object> arg0) {

         this.session=arg0;

     }

     @Override

     public void setRequest(Map<String, Object> arg0) {

         this.request=arg0;

     }

     /**

      * 处理用户登录请求

      */

     public String execute() {

         // 模拟用户登录处理(登录正确)

         if ("ross".equals(uname) && "111".equals(upass)) {

              session.put("uname", uname);

              // 返回逻辑视图名

              return SUCCESS;

              // 登录失败

         } else {

              request.put("loginError", "登录名称或者密码错误");

              // 返回逻辑视图名

              return ERROR;

         }

     }

页面上使用el表达式${ loginError}获取即可。

Action访问ServletAPI的三种方式的更多相关文章

  1. Struts2访问ServletAPI的三种方式

    web应用中需要访问的ServletAPI,通常只有HttpServletRequest,HttpSession,ServletContext三个,这三个接口分别代表jsp内置对象中的request, ...

  2. struts2学习笔记之六:struts2的Action访问ServletAPI的几种方式

    方法一:通过ActionContext访问SerlvetAPI,这种方式没有侵入性 Action类部分代码 import com.opensymphony.xwork2.ActionContext; ...

  3. Struts2(四.注册时检查用户名是否存在及Action获取数据的三种方式)

    一.功能 1.用户注册页面 <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  4. 【深入Struts2】获取ServletAPI的三种方式

    一:获取servletAPI的三种方法 在传统的Web开发中,经常会用到Servlet API中的HttpServletRequest.HttpSession和ServletContext.Strut ...

  5. ssh框架总结之action接收参数的三种方式

    页面将参数传递给action的三种方式 一是通过属性传值: 将页面和action的的属性值保持一致,在action上写上该属性的set和get方法,这样在页面提交参数的时候,action就会调用set ...

  6. spring mvc 通过配置xml访问控制器的三种方式

    (一)通过 name 来一一映射(默认) (二)通过简单url 来指定映射,key 表示访问url value 是bean的ID (三)通过控制类的类名控制器,访问时类名首字母需要小写 <!-- ...

  7. Struts2学习(二)运行Action中方法的三种方式

    1.运行execute()方法 一般的能够直接在action中书写execute,调用action时会自己主动运行此方法 2.配置method方法 在struts.xml中配置action时.写met ...

  8. COS中访问文件的三种方式

    1.通过FID来访问文件(比如EF,DF) 2.通过SFI来访问文件(有些COS命令可以通过SFI来快速访问文件,而不需要事先选中文件) 3.通过文件名来访问文件(只能是DF文件)

  9. 解决dubbo注册zookepper服务IP乱入问题的三种方式

    最近做一个项目引入了dubbo+zookepper的分布式服务治理框架.在应用的发布的时候出现一个怪问题.zookepper服务是起在开发服务器192.168.23.180上.本机起应用服务提供者注册 ...

随机推荐

  1. Ajax json jquery实现菜单案例

    需求: 运用AJAX请求文件menu.json,配置菜单栏,并实现以下功能点: 1. 点击向左箭头,菜单向左移动,隐藏 2. 点击向右箭头,菜单向右移动,显示3. 点击一级菜单,被点击菜单的子菜单显示 ...

  2. Ajax发送XML请求案例

    Ajax发送XML请求需求: 根据输入的国家,输出这些国家下面的城市. 如果请求参数较多,而且请求参数的结构关系复杂,则可以考虑发送XML请求.XML请求的实质还是POST请求,只是在发送请求的客户端 ...

  3. BA-siemens-点位类型表

    X(超级点)  输入 0-10v 4-20ma(不可用) Ni 1000 Pt 1000 10k & 100k 热敏电阻 数字输入 脉冲计数输入 输出 0-10v 4-20ma(不可用) 数字 ...

  4. BA-siemens-insight报警设置

    以0007001(DDC-B3-09)为例,介绍insight报警的设置方法:

  5. oracle 有个xe版本

    oracle 有个xe版本 学习了:http://blog.csdn.net/angiexia/article/details/8615771

  6. android Service中多线程交互

    android 的service和activity是执行在UI主线程的. 在android线程中,仅仅有主线程即UI线程有自己的默认的消息队列.子线程须要创建自己的消息队列.并把消息发给队列,并循环起 ...

  7. java 递归实现删除或查询指定目录下的全部文件

    /** * 递归列举盘符下的全部文件的名称,如E:\HeartIsland * * @author HeartIsland * */ public class FileListDemo { /** * ...

  8. (转)c++ typedef 函数指针详细说明

    转自:http://blog.csdn.net/future200x/article/details/5350134 一个函数在编译时被分配一个入口地址,将这个入口地址称为函数的指针,可以用一个指针变 ...

  9. Gradle for Android 第三篇( 依赖管理 )

    依赖管理 这会是一个系列,所以如果你还没有看我之前的几篇文章,请先查看以下文章: Gradle for Android 第一篇( 从 Gradle 和 AS 开始 ) Gradle for Andro ...

  10. iOS开发中权限再度梳理

    前言 上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求.但是,这些方法并不全面,不能涵盖住所有权限访问的方法. ...