• Struts2 学习(三)


    一、访问Servlet API 的三种方式

    1、什么是 Action 访问 Servlet 的 API

    1、访问 Servlet 的API:

    1、获取 request 对象。

    2、接受请求参数。

    3、获取 session,appliction。

    4、获取 response对象。

    5、使用 Cookie。

    6、获取作用域对象,设置共享数据(setAttribute)。

    2、Action访问Servlet  API,有三种方式:

    1、通过感知接口。

      若 Action 想获取哪一个ServletAPI对象,则实现该对象对应的感知接口。

    如:

      想获取 request 对象,则 Action 应该实现 ServletRequestAware。

      想获取 response 对象,则Action应该实现 ServletResponsetAware。

      并且要覆盖对应 setter 方法。

    2、通过ServletActionContext工具类。

      在该类中提供了很多静态方法,可以直接获取Servlet的API对象。

      HttpServletRequest request = ServletActionContext.getRequest();

      HttpServletResponse response = ServletActionContext.getResponse();

      在开发中使用非常频繁,简单,直接。

      但是依然和Servlet的API有耦合。

    3、通过使用 ActionContext 工具类。

      表示 Action 的上下文对象,也就是Action存在的环境。ActionContext 是 ServletActionContext 的父类。

    1、创建 ActionContext 对象:

    ActionContext ctx = ActionContext.getContext();

    Map<String,Object> getParameters():获取参数的Map集合。

    2、操作 request 作用域:

    void put(String key,Object value):类似于request.setAttribute(String key,Object value);

    Object get(String key): 类似于request.getAttribute(String key);

    3、操作session作用域:

    Map<String,Object> sessionMap  = ctx.getSession();

    在session中存放数据:void put(String key,Object value)

    取出session中的数据:Object get(String key)

    4、操作application作用域:

    Map<String,Object> applicationMap = ctx.getApplication();

    注:官方建议使用第三种方式,可以和 Servlet 的 API 完成解除耦合,在实际开发中第二种运用非常广泛。

    二、Action 获取请求参数的三种方式

    1、J2EE的最佳实践:

      按照功能职责,分层开发(表现层,业务层,持久层):

    表现层:职责是和用户做交互

    1、接受请求数据。

    2、把数据封装Model对象。

    3、调用业务逻辑方法处理请求。

    4、控制界面跳转。

    2、MVC思想:

    M:数据模型对象(封装数据,封装操作,可重复使用)

    V:JSP

    C:StrutsPrepareAndExecuteFilter(前端控制器)

    问题:Action 到底充当什么角色?

    Action的职责,处理请求。

    3、Action获取请求参数三种方式:

    第一种:Action本身作为Model对象,通过setter方法封装(属性注入)

      前端页面提交登录信息。

    第二种:创建独立Model对象,页面通过ognl表达式封装(属性注入)

    第三种:使用ModelDriven接口,对请求数据进行封装(模型驱动)

  • 相关阅读:
    SQL Server数据库查询区分大小写、全半角——排序规则的应用
    C#中查询字符串中是否包含指定字符/字符串,使用IndexOf还是Contains?
    【WM6.5】三星I8000按键码及窗体消息发送的方法备忘
    UoBlog 支持 MetaWeblog Api,可以使用 Windows Live Writer 离线发表日志
    C#中如何获取一个字符串的实际字符数
    使用HttpWebRequest发送HTTP请求,同时支持GET/POST方式提交。
    c#.NET中开发可用于Web网页的ActiveX控件
    CorePlex开发手记:一、Winform窗体皮肤及简单换肤机制
    .NET中简易实现线程安全
    在C#中截取指定长度的中文字符串(效率提高2500倍)
  • 原文地址:https://www.cnblogs.com/zt19994/p/8603546.html
Copyright © 2020-2023  润新知