Action访问ServletAPI的三种方式

一、前言

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}获取即可。

时间: 2024-10-13 02:29:12

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

Struts2访问ServletAPI的三种方式

web应用中需要访问的ServletAPI,通常只有HttpServletRequest,HttpSession,ServletContext三个,这三个接口分别代表jsp内置对象中的request,session,application,Struts2没有与任何Servlet接口耦合,所以很方便的访问Servlet API. 第一种: Struts2提供了一个ActionContext类,顾名思义,Action的上下文,该类提供了很多方法,比如getApplication(),getSessi

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

方法一:通过ActionContext访问SerlvetAPI,这种方式没有侵入性 Action类部分代码 import com.opensymphony.xwork2.ActionContext; public String execute() throws Exception { if("admin".equals(user.getUsername()) && "admin".equals(user.getPassword())){ //获取Ma

5.struts2中Action类中获取ServletAPI的三种方式

**Servlet的API的访问(开发中偶尔会使用到)** 1.在Action类中也可以获取到Servlet一些常用的API,有如下三种方式获取 * 完全解耦合的方式 * 使用接口注入的方式 * 使用ServletActionContext中静态方法直接访问Servlet的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的页面上. * 提供JSP注册的页面,演示下面这三种方式: <h3>注册页面</

Struts2访问servlet的三种方式

第一种方式:使用ActionContext类实现 //获取对象 ActionContext context = ActionContext.getContext(); //获取页面提交数据 Map<String, Object> parameters = context.getParameters(); //操作域对象相关的方法 context.put(String,Object);//相当于HttpServletRequest的setAttribute方法 context.getApplic

Struts2中Action接收参数的三种方式

Struts2中Action接收参数的方法主要有以下三种:1.使用Action的属性接收参数:    a.定义:在Action类中定义属性,创建get和set方法:    b.接收:通过属性接收参数,如:userName:    c.发送:使用属性名传递参数,如:user1!add?userName=zhangsan:2.使用DomainModel接收参数:    a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法:    b.接收

struts2中Action访问servlet的两种方式

一.IoC方式 在struts2框架中,可以通过IoC方式将servlet对象注入到Action中,通常需要Action实现以下接口: a. ServletRequestAware: 实现该接口的Action可以直接访问Request对象,该接口中提供void setServletRequest(HttpServletRequest request) 方法,实现此接口的Action控制类通过setServletRequestHttpServlet(HttpServlet request)方法将r

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

(一)通过 name 来一一映射(默认) (二)通过简单url 来指定映射,key 表示访问url value 是bean的ID (三)通过控制类的类名控制器,访问时类名首字母需要小写 <!-- 配置Controller --> <bean id="loginController" name="/login.do" class="com.beifeng.controller.LoginController"></be

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

1.运行execute()方法 一般的能够直接在action中书写execute,调用action时会自己主动运行此方法 2.配置method方法 在struts.xml中配置action时.写method属性设置方法.例如以下所看到的.这样写能够在一个action类中写多个运行的方法.简化结构. <package name="user" extends="struts-default" namespace="/user"> <

abap中访问domain的三种方式

1.直接访问表 dd07l和dd07T select * from dd07l where domname = 'domname' and as4local = active. 2.使用SAP的标准函数 call function 'DD_DOMVALUES_GET' exporting domname = p_domname importing rc = l_subrc tables dd07v_tab = l_dd07v exceptions wrong_textflag = 1 other