`

Struts2之在Action中访问 WEB资源

 
阅读更多
在Action中访问  WEB资源  
一、什么是WEB资源?
   HttpServletRequest,HttpSession,ServletContext等原生的Servlet API
二、为什么访问WEB资源?
   B\S的应用的Controller中必须需要访问WEB资源
   向域对象中读写属性,读写Cookie,获取realPath
三、如何访问?      
   1、:和Servlet API解耦的方式:只能访问有限的Servlet API对象,且只能访问有限的方法。(读取请求参数,读写域对象的属性,使session失效)
        具体请参照博文:Struts2之Session
    (1)使用ActionContext 
    通过import com.opensymphony.xwork2.ActionContext;
    (2)实现XxxAware接口       
    通过Action实现如下接口
   
import org.apache.struts2.dispatcher.SessionMap;
	import org.apache.struts2.interceptor.ApplicationAware;
	import org.apache.struts2.interceptor.SessionAware;

    (3)选用的建议:若一个Action类中有多个action方法,且多个方法都需要使用域对象的Map或parameters,则建议使用Aware接口的方式
    (4)session对应的Map实际上是SessioMap类型的,强转后若调用invalidate()方法,可以使其session失效。
   2、和Servlet API耦合的方式 :可以访问更多的Servlet API对象,且可以调用原生态的方法。 
    (1)使用ServletActionContext
     
 public String execute(){
		//ServletActionContext:可以从中获取到当前Action对象需要的一切Servlet API 相关的对象
		//1、获取HttpServletRequest:ServletActionContext.getRequest();
		//2、获取HttpSession:ServletActionContext.getRequest().getSession();
		//3、获取ServletContext
		HttpServletRequest request=ServletActionContext.getRequest();
		HttpSession session=ServletActionContext.getRequest().getSession();
		ServletContext servletContext=ServletActionContext.getServletContext();
		
		System.out.println("execute...");
		return "success";
	}

    (2)实现ServletXxxAware接口
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

//通过实现ServletXxxAware接口的方式可以由Struts2注入需要的Servlet相关的对象
//ServletRequestAware:注入HttpServletRequest对象(比较常用)
//ServletContextAware:注入ServletContext对象(比较常用)
//ServletResponseAware:注入HttpServletResponse对象

public class TestServletAware implements ServletRequestAware,ServletContextAware,ServletResponseAware{

	public void setServletRequest(HttpServletRequest request) {
		System.out.println(request);
	}
	private ServletContext context;
	public void setServletContext(ServletContext context) {
		System.out.println(context);
		this.context=context;
	}

	public void setServletResponse(HttpServletResponse response) {
		System.out.println(response);
	}
	public String execute(){
		System.out.println("ServletContext:" + context);
		return "success";
	}
}
分享到:
评论

相关推荐

    struts2访问application、session以及request等web资源的示例代码

    在Struts2中,访问Web资源,如application、session和request,是常见的操作,这有助于实现数据共享和传递。本示例代码将帮助开发者更好地理解和运用这些功能。 一、Application域对象 Application域对象在所有用户...

    struts2 web项目

    2. **Action和ActionMapping**:在Struts2中,Action是业务逻辑处理的中心,它执行特定的任务并返回一个结果。ActionMapping则定义了Action与URL之间的映射关系。 3. **配置文件**:项目中可能包含`struts.xml`或`...

    Struts2实战(Struts2 In Action中文版)

    6. **国际化与本地化**:学习如何在Struts2中实现多语言支持,提供全球化用户体验。 7. **Tiles布局**:结合Tiles插件,创建复用性强、结构化的页面布局。 8. **异常处理**:理解Struts2的异常处理机制,如何...

    精通Struts 2:Web 2.0开发实战

    以下将详细介绍Struts 2框架的核心概念、主要功能以及在Web 2.0开发中的应用。 1. **Struts 2框架基础** Struts 2是由Apache软件基金会维护的开源项目,它是Struts 1的升级版本,引入了许多新特性。它基于拦截器...

    Struts2 in action中文版+配套源代码

    1. **Action类**:在Struts2中,Action类是业务逻辑的核心,它接收用户请求,执行相关操作,并返回结果。Action类可以被配置在struts.xml文件中,指定其对应的URL和返回的结果类型。 2. **拦截器(Interceptors)**...

    基于用户登陆的struts2中action的分类实例

    在Struts2中,Action是核心组件之一,它负责处理用户的请求,并将业务逻辑的结果返回给视图进行展示。本实例将深入探讨在基于用户登录场景下,如何在Struts2中对Action进行分类和设计。 首先,我们需要了解Struts2...

    Struts2_访问web元素_accessWebElements_s

    在这个主题“Struts2_访问web元素_accessWebElements_s”中,我们将深入探讨如何在Struts2中有效地访问和操作web元素。 首先,了解Struts2的生命周期至关重要。当一个HTTP请求到达服务器时,Struts2框架会接管请求...

    struts2资源包

    在Struts2中,OGNL被用于Action和ActionContext之间数据的传递,以及视图层的数据绑定。它可以方便地访问和修改模型对象的属性,简化了视图和控制器之间的交互。 6. **commons-logging-1.0.4.jar**:Apache Commons...

    Struts2_Action学习笔记、通配符{1},{2}

    - 在web.xml中添加Struts2的过滤器配置: ```xml <filter-name>struts2 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher <filter-name>struts2 <url-pattern>/* ``` - 上述配置表示...

    Struts2学习教程之Action类如何访问WEB资源

    本教程将深入讲解如何在Struts2的Action类中访问Web资源,如HttpServletRequest、HttpServletResponse和ServletContext。 首先,Web资源在B/S应用开发中扮演着关键角色。HttpServletRequest对象包含了客户端请求的...

    留言板留言板struts2留言板struts2

    2. **Action与ActionMapping**:在Struts2中,业务逻辑通常封装在Action类中。一个Action类对应一个用户请求,处理来自客户端的请求并返回结果。ActionMapping则负责配置Action与URL的映射关系,使得请求能正确路由...

    Struts2Demo2

    在Struts2中,我们可以使用OGNL(Object-Graph Navigation Language)表达式来访问Action中的属性并展示在页面上。 4. **拦截器(Interceptors)**:Struts2提供了一种机制,允许在Action执行前后执行一些通用任务...

    struts1和struts2的区别

    - **Struts2**: Struts2中的Action更像是工厂模式下的产品,每个Action实例都是线程安全的。Struts2提供了ActionSupport基类来简化Action的实现。Action本身可以是任何实现了特定接口的Java对象,甚至是普通的POJO。...

    Struts2SpringUnitDemo单元测试

    4. **Action和Service的测试**:在Struts2中,Action类是处理用户请求的实体,它通常调用Service层来执行业务逻辑。Service层封装了与数据库或其他外部资源的交互。在单元测试中,Action的测试主要检查其接收请求、...

    struts2 in action

    总的来说,《Struts2 in Action》这本书覆盖了从基础到进阶的Struts2知识,是Java Web开发者不可多得的学习资源。通过学习这本书,初学者可以逐步掌握如何利用Struts2构建高效、健壮的Web应用。

    马士兵Struts2笔记2013

    在Struts2中,你可以创建领域对象,通过setter和getter方法来接收和设置请求参数,这些对象可以在多个Action之间共享,提高了代码的复用性。 4. **Struts2_2.1.6版本的中文问题** 在某些版本的Struts2中,可能出现...

    Struts2 创建简单步骤

    当用户访问`/hello.action`时,Struts2会调用这个Action,如果执行成功,将会跳转到`/HelloWorld.jsp`页面。 ### 创建Action类 在`src/main/java/com/example`目录下创建`HelloWorldAction.java`,实现一个简单的...

    Struts2中直接和间接访问ServletAPI以及动态方法调用之感叹号

    然而,在Struts2中,我们通常不直接与Servlet API交互,而是通过Action类和Struts拦截器来处理请求。直接访问Servlet API可能涉及使用`HttpServletRequest`、`HttpServletResponse`和`ServletConfig`等对象,这可能...

Global site tag (gtag.js) - Google Analytics