一、访问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接口,对请求数据进行封装(模型驱动)