在struts2中访问servletAPI

在struts2中访问servletAPI,通俗点也就是使用servlet中的两个对象request对象和response对象。

前几天看到一个CRM项目的源码,里面使用request对象和response对象方式和我以前使用的方式有点不同,于是便上网查询一些相关资料。特此记录于此,有兴趣的也可以参考参考。

  • 以往使用struts2往网页填充数据通常采用往值栈存放数据,也就是ActionContext.getContext().****();后面的方法类似与request对象和response对象的方法。
  • 这几天看到的是实现接口ServletRequestAware,ServletResponseAware。通过这两个接口实现两个方法setServletResponse(HttpServletResponse
    response)与setServletRequest(HttpServletRequest request)。然后访问用户请求的HttpServletRequest实例与服务器响应的HttpServletResponse实例。
  • 进过上网查找还有一种ServletActionContext,这个类直接继承了ActionContext。

接下来介绍一下ActionContext和ServletActionContext各自的方法:

  1. ActionContext:
      • Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(String name)方法;
      • Map getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例;
      • static ActionContext getContext():静态方法,获取系统的ActionContext实例;
      • Map getParameters():获取所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap方法;
      • Map getSession():返回一个Map对象,该Map对象模拟了HttpSession实例;
      • void setApplication(Map application):直接传入一个Map实例,将该Map实例里的key-value对转换成application的属性名,属性值;
      • void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换成session的属性名,属性值
  1. ServletActionContext
      • static PageContext getPageContext():取得Web应用的PageContext对象;
      • static HttpServletRequest getRequest():取得web应用的HttpServletRequest对象;
      • static HttpServletResponse getResponse():取得web应用的HttpServletResponse对象;
      • static ServletContext getServletContext():取得web应用的ServletContext对象;

那么这几种方式有什么区别呢?原来使用ActionContext和ServletActionContext这两个类是属于非IOC方式来访问request对象和response对象。而Action实现ServletRequestAware和ServletResponseAware接口是属于IOC方式的。关于IOC请点击这里

我贴上代码来看看吧。

ServletRequestAware,ServletResponseAware

package cn.crm.web.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

import com.opensymphony.xwork2.ActionSupport;

public class BaseAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{

	protected HttpServletRequest request;
	protected HttpServletResponse response;
	@Override
	public void setServletResponse(HttpServletResponse response) {
		// TODO Auto-generated method stub
		this.response=response;
	}

	@Override
	public void setServletRequest(HttpServletRequest request) {
		// TODO Auto-generated method stub
		this.request=request;

	}

}

ActionContext

ActionContext context = ActionContext.getContext();
Map params = context.getParameters();
String username = (String) params.get("username");

ServletActionContext

HttpServletRequest request = ServletActionContext. getRequest();
HttpSession session = ServletActionContext. getRequest().getSession();
				
时间: 2024-10-12 12:42:50

在struts2中访问servletAPI的相关文章

Struts2中访问web元素的四种方式

Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.SessionAware.ApplicationAware接口来访问Map类型的request.session.application对象(IoC方式). 通过ServletActionContext来访问Servlet API类型的HttpServletRequest. HttpSession. Serv

struts2中访问servlet API

Struts2中的Action没有与任何Servlet API耦合,,但对于WEB应用的控制器而言,不访问Servlet API几乎是不可能的,例如需要跟踪HTTP Session状态等.Struts2中提供了一个ActionContext类,Struts2的Action可以通过该类来访问Servlet API. ActionContext类中包含的几个常用方法: Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(Str

Struts2的Action中访问servletAPI方式

struts2的数据存放中心为ActionContext,其是每次请求来时都会创建一个ActionContext,访问结束销毁,其绑定在ThreadLocal上,由于每次访问web容器都会为每次请求创建一个独立的线程ThreadLocal,而ActionContext绑定在ThreadLocal上,所以各个ActionContext是相互独立和安全的,在ActionContext中还持有其他的域对象引用,如application,session等,ActionContext销毁时只销毁自己内部创

Struts2中访问web元素

有很多时候我们都需要访问web元素,比如说用户管理系统,用户登录成功了需要往session中放置一个值,然后要在前台拿到这个值,常用的web元素包括request.session和application等. Struts2中有四种方式可以访问到web元素: 1.通过ActionContext来访问Map类型的request.session.application对象. 2.通过实现RequestAware.SessionAware.ApplicationAware接口来访问Map类型的reque

struts学习笔记(3)---Action中访问ServletAPI获取真实类型的元素

一.源代码: struts.xml文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <

Action中访问ServletAPI获取Map类型的Servlet元素

源代码: strust.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <strut

Struts2之访问和添加request、session、application属性

Struts2中访问和添加request.session.application属性 public String execute() {// 如果仅仅往这三个范围放入属性,建议使用这种方法 ActionContext actionContext = ActionContext.getContext(); // 往ServletContext里放application actionContext.getApplication().put("application", "appl

struts2中耦合访问servlet- API

struts2中耦合访问servlet- API有三种,推荐使用第二种.当然,尽量用解耦合的方式访问,解耦合方式访问内容在上一篇文章中有解释,需要者请查看. 方法一:.[一般推荐使用](只能获得request,而response则得不到) Struts2提供了一个ActionContext类,Struts2中的Action可以通过它进行访问. 其方法有:get(),getApplication(),getContext(),getParameters(),getSession(),setAppl

struts2中如何根据请求路径定位到详细的访问action

在struts2中在访问一个菜单链接时,我们只需要将相应的package 命名空间和 action的name进行组合,并加上相应的后缀,就可以直接访问到相应的Action了,那么这个过程是如何进行的,多个相同命名空间的 package是如何满足互不冲突的呢,这就需要详细了解struts2中是如何解析路径信息,并根据访问路径寻找相应的action配置了. 整个过程我们可以分成以下几个步骤进行处理 解析xml,将所有可以访问到的路径信息进行保存 根据访问请求信息,取其中可用的路径 根据路径进行查找,