早期开发模型Servlet+JSP+JavaBean(Model2)显得力不从心,流程凌乱、数据传递无序、缺乏辅助功能。所以,使用structs2来解决问题。
struts2开发步骤
1.拷贝/apps/struts2-blank/WEB-INF/lib中的jar到项目的lib中.
2.在web.xml中配置Struts2的前端控制器-StrutsPrepareAndExecuteFilter.
3.拷贝struts.xml文件到项目的source folder中.
-----------------------上述三步在准备开发环境---------
4.定义一个POJO类:HelloAction,并提供一个公共无参数的sayHello方法.
5.在struts.xml文件中,配置HelloAction.(把HelloAction交给Struts2框架管理).
6.访问Action.
格式:http://ip:port/contextPath/namespaceName/actionName[.action]
http://ip:port/contextPath/crm/hello[.action]
action获取请求参数的三种方法
第一种:Action本身作为Model对象,通过setter方法封装(属性注入):在Action中提供setXxx方法来接受xxx参数的值(xxx表示参数名称).
**第二种:创建独立Model对象,页面通过ognl表达式封装(属性注入)使用最多的方式;
**
**第三种:使用ModelDriven接口,对请求数据进行封装(模型驱动):
**
访问ServletApi三种方式
方式1:通过让Action类去实现感知接口.
此时项目依赖:servlet-api.jar.
ServletRequestAware:感知HttpServletRequest对象;
ServletResponseAware:感知HttpServletResponse对象;
ServletSessionAware:感知HttpSession对象;
问题,和ServletAPI藕合严重;
一般的,我们不要,留给框架自己使用的.
方式2.使用ServletActionContext类,该类提供很多静态方法可以返回Servelet API对象.
可以这样来理解,ServletActionContext就是Servlet API的工具类.
使用的非常频繁,因为简单易用.
static HttpServletRequest getRequest() :返回HttpServletRequest对象
static HttpServletResponse getResponse() :返回HttpServletResponse对象
static ServletContext getServletContext() :返回ServletContext对象.
方式3.使用ActionContext类,本身是Struts2对Servlet API的封装.
什么是ActionContext: Action的环境对象,每一次请求都是一个新的Action对象,一个ActionContext对象封装了这一次请求的相关数据.
ActionContext使用了ThreadLocal模式,所以说是线程安全的.
创建ActionContext对象:
ActionContext ctx = ActionContext.getContext();
ActionContext的常用方法:
此时把作用域对象全部使用Map来表示.
获取请求参数:
以前: String request.getParameter(String name);
String[] request.getParameterValues(String name);
现在:
Map
操作request作用域对象:
以前:
设置共享数据:request.setAttribute(String name,Object value);
获取共享数据:Object value = request.getAttribute(String name);
现在: ActionContext本身就是对一次请求的封装.
设置共享数据:ActionContext.getContext().put(String name,Object value);
获取共享数据:Object vale = ActionContext.getContext().get(String name)
操作session作用域对象:
以前:
设置共享数据:request.getSession().setAttribute(String name,Object value);
获取共享数据:Object value = request.getSession().getAttribute(String name);
现在: 只需要得到Session的Map对象即可.
Map
设置共享数据:sessionMap .put(String name,Object value)
获取共享数据:Object value = sessionMap .get(String name)
操作application作用域对象:
以前:
设置共享数据:request.getServletContext().setAttribute(String name,Object value);
获取共享数据:Object value = request.getgetServletContext().getAttribute(String name);
现在: 只需要得到application的Map对象即可.