`
azrael6619
  • 浏览: 580977 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Struts2学习笔记-Action访问ServletAPI

阅读更多

Action访问ServletAPI

    struts2的Action并未直接与任何Servlet API耦合。但可以访问:Web应用中通常需要访问的Servlet API就是HttpServletRquest、HttpSession、ServletContext,分别代表JSP内置对象中的request、session、application。

    非IOC:

     一、struts2可以根据自身提供的com.opensymphony.xwork2.ActionContext.ActionContext类访问Servlet API。

1.Object get(Object key) :通过参数key来查找当前ActionContext中的值,该方法类似于调用HttpServletRequest的getAttribute(String name) 方法。
2.Map getApplication() :返回一个Application级的Map对象 ,模拟了该应该的ServletContext实例。
3.Static ActionContext getContext() :获得当前线程的ActionContext对象
4.Map getParameters() :获取所有的请求参数,返回一个包含所有HttpServletRequest参数信息的Map对象,类似于调用HttpServletRequest对象的getParameterMap()方法。
5.Map getSession() :返回一个Map类型的HttpSession对象
6.Void put(Object key,Object value) :向当前ActionContext对象中存入名值对信息
7.Void setApplication(Map application) :设置Application上下文,直接传入一个Map实例,将该Map实例里的key-value对转换成application的属性名、属性值。
8.Void setSession(Map session) :设置一个Map类型的Session值 ,直接传入一个Map实例,将该Map实例里的key-value对转换成session的属性名、属性值。

    二、可以直接使用org.apache.struts2.ServletActionContext类访问这些API

 1.HttpServletRequest request = ServletActionContext.getRequest();
 2.HttpServletResponse response = ServletActionContext.getResponse();
 3.HttpSession session = request.getSession(); 

    IOC:耦合性比较差

    三、struts2还可以通过如下接口访问:

 1.ServletContextAware:实现该接口的Action可以直接访问Web应用的ServletContext实例。

 2.ServletRequestAware:实现该接口的Action可以直接访问用户请求的HttpServletRequest实例。

 3.ServletResponseAware:实现该接口的Action可以直接访问服务器响应的HttpServletResponse实例。

注意:要重写他们里面的方法才可以用。

 

public class IoCServlet extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
    private String message;
    private Map att;
    private HttpServletRequest request;
    private HttpServletResponse response;

    public String getMessage() {
    return message;
    }

    public void setSession(Map att) {
    this.att = att;
    }

    public void setServletRequest(HttpServletRequest request) {
    this.request = request;
    }

    public void setServletResponse(HttpServletResponse response) {
    this.response = response;
    }

    @Override
    public String execute() {
    att.put("msg", "Hello World from Session!");

    HttpSession session = request.getSession();

    StringBuffer sb =new StringBuffer("Message from request: ");
    sb.append(request.getParameter("msg"));
    sb.append(" Response Buffer Size: ");
    sb.append(response.getBufferSize());
    sb.append("Session ID: ");
    sb.append(session.getId());

    message = sb.toString();
    return SUCCESS;
    }
    }

 

    在struts.xml的action中配置拦截器
    <interceptor-ref name="servletConfig"></interceptor-ref>

 

注意:即使在Struts2的Action类中获得了HttpServletResponse对象,也不要尝试直接在Action中生成对客户端的输出!例如:response.getWriter().println("Hello World");在标准Servlet中会生成对客户端的输出,但在Struts2的Action中,没有任何实际意义。

 

分享到:
评论

相关推荐

    Struts2学习笔记

    根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...

    牧紫小岩的Struts2学习笔记

    在**牧紫小岩的Struts2学习笔记**中,提到了Struts1和Struts2在实例化Action上的关键差异。Struts1在启动时创建Action实例,并在整个应用程序运行期间复用该实例,这意味着所有用户请求共享同一实例,这可能导致线程...

    struts2学习笔记

    尽管Struts2提供了一套独立于Servlet API的MVC实现,但仍然可以通过配置与Servlet API集成,比如使用FilterDispatcher或者StrutsPrepareAndExecuteFilter来处理请求。这种灵活性使得Struts2能更好地融入已有的...

    struts2综合笔记

    而 Struts2 与 Servlet API 的耦合度较低,提供了更多的灵活性。 - **发展历程**: Struts2 是在 WebWork 框架的基础上发展起来的,因此学习 Struts2 实际上也是学习 WebWork。 #### 二、Struts2 的核心组件分析 **...

    struts2框架学习笔记整理

    ### Struts2框架学习笔记整理 #### 一、Struts2框架概述 ##### 1.1 Struts2框架定义 Struts2是一个基于MVC(Model-View-Controller)架构模式的开源Java web应用框架,它能够帮助开发者构建可扩展且易于维护的...

    Struts2.1学习笔记

    ### Struts2.1学习笔记 #### Struts2的来源与优点 - **来源**:Struts2是在WebWork2的基础上发展起来的,它继承了WebWork2的优点,并且进行了改进,使其更适合现代Web应用程序的需求。与Struts1相比,Struts2的...

    Unmi 的 Struts2 学习笔记

    ### Unmi的Struts2学习笔记关键知识点解析 #### 一、Struts2与Struts1的主要区别 1. **架构上的变化**:Struts2并非Struts1的直接升级版,而是基于WebWork框架发展而来,这导致两者在设计哲学和技术实现上有很大...

    传智播客struts2全程学习笔记

    ### 传智播客Struts2全程学习笔记 #### Struts2的优点 1. **无侵入式设计**:与Struts1相比,Struts2的设计更为先进,它不依赖于Servlet API或Struts API,这使得Struts2更加灵活且易于集成到其他环境中。在代码...

    struts2课程笔记

    本课程笔记主要涵盖了Struts2的基础概念、核心功能及其工作流程。 首先,Struts2的处理流程是通过一系列的组件协作完成的,包括Filter Dispatcher(过滤器调度器)、Action、Interceptor(拦截器)和Result。当用户...

    Struts2 - 学习笔记

    1. **无侵入式设计**:与Struts1不同,Struts2没有紧密地耦合到Servlet API和Struts API。这意味着开发者可以不依赖这些API来构建应用,提供了更好的灵活性和可维护性。 2. **拦截器机制**:Struts2引入了拦截器,...

    Struts2超详细学习笔记分享(献给自学新人)

    本篇超详细学习笔记将带你逐步深入理解Struts2的核心概念和运作机制。 首先,让我们了解Struts2的基本特性。Struts2是一个基于Servlet的框架,它通过将JSP作为视图(View),Servlet作为控制器(Controller),并将...

    struts项目学习笔记

    Action的execute 默认方法不再与Servlet API耦合,更易测试 支持更多视图技术(JSP(转译java文件,编译成class文件,才可以运行)、(模板技术,html,把数据和模板html一起以流方式输出)FreeMarker、Velocity) 基于AOP...

    struts2学习笔记三

    在本篇“Struts2学习笔记三”中,我们将探讨Struts2中处理文件上传的核心组件和拦截器,以及如何在实际应用中实现文件上传。 1. 文件上传组件: - jspSmartUpload:这是一个早期用于模型1的上传组件,现在已经被更...

Global site tag (gtag.js) - Google Analytics