早期開發(fā)模型Servlet+JSP+JavaBean(Model2)顯得力不從心,流程凌亂滤祖、數(shù)據(jù)傳遞無序定踱、缺乏輔助功能棍潘。所以,使用structs2來解決問題崖媚。
struts2開發(fā)步驟
1.拷貝/apps/struts2-blank/WEB-INF/lib中的jar到項目的lib中.
2.在web.xml中配置Struts2的前端控制器-StrutsPrepareAndExecuteFilter.
3.拷貝struts.xml文件到項目的source folder中.
-----------------------上述三步在準備開發(fā)環(huán)境---------
4.定義一個POJO類:HelloAction,并提供一個公共無參數(shù)的sayHello方法.
5.在struts.xml文件中,配置HelloAction.(把HelloAction交給Struts2框架管理).
6.訪問Action.
格式:http://ip:port/contextPath/namespaceName/actionName[.action]
http://ip:port/contextPath/crm/hello[.action]
action獲取請求參數(shù)的三種方法
第一種:Action本身作為Model對象亦歉,通過setter方法封裝(屬性注入):在Action中提供setXxx方法來接受xxx參數(shù)的值(xxx表示參數(shù)名稱).
**第二種:創(chuàng)建獨立Model對象,頁面通過ognl表達式封裝(屬性注入)使用最多的方式;
**
**第三種:使用ModelDriven接口畅哑,對請求數(shù)據(jù)進行封裝(模型驅(qū)動):
**
訪問ServletApi三種方式
方式1:通過讓Action類去實現(xiàn)感知接口.
此時項目依賴:servlet-api.jar.
ServletRequestAware:感知HttpServletRequest對象肴楷;
ServletResponseAware:感知HttpServletResponse對象;
ServletSessionAware:感知HttpSession對象荠呐;
問題赛蔫,和ServletAPI藕合嚴重;
一般的,我們不要,留給框架自己使用的.
方式2.使用ServletActionContext類,該類提供很多靜態(tài)方法可以返回Servelet API對象.
可以這樣來理解,ServletActionContext就是Servlet API的工具類.
使用的非常頻繁,因為簡單易用.
static HttpServletRequest getRequest() :返回HttpServletRequest對象
static HttpServletResponse getResponse() :返回HttpServletResponse對象
static ServletContext getServletContext() :返回ServletContext對象.
方式3.使用ActionContext類,本身是Struts2對Servlet API的封裝.
什么是ActionContext: Action的環(huán)境對象,每一次請求都是一個新的Action對象,一個ActionContext對象封裝了這一次請求的相關數(shù)據(jù).
ActionContext使用了ThreadLocal模式,所以說是線程安全的.
創(chuàng)建ActionContext對象:
ActionContext ctx = ActionContext.getContext();
ActionContext的常用方法:
此時把作用域?qū)ο笕渴褂肕ap來表示.
獲取請求參數(shù):
以前: String request.getParameter(String name);
String[] request.getParameterValues(String name);
現(xiàn)在:
Map<String,String[]> getParameters();
操作request作用域?qū)ο?
以前:
設置共享數(shù)據(jù):request.setAttribute(String name,Object value);
獲取共享數(shù)據(jù):Object value = request.getAttribute(String name);
現(xiàn)在: ActionContext本身就是對一次請求的封裝.
設置共享數(shù)據(jù):ActionContext.getContext().put(String name,Object value);
獲取共享數(shù)據(jù):Object vale = ActionContext.getContext().get(String name)
操作session作用域?qū)ο?
以前:
設置共享數(shù)據(jù):request.getSession().setAttribute(String name,Object value);
獲取共享數(shù)據(jù):Object value = request.getSession().getAttribute(String name);
現(xiàn)在: 只需要得到Session的Map對象即可.
Map<String,Object> sessionMap = ActionContext.getContext().getSession();
設置共享數(shù)據(jù):sessionMap .put(String name,Object value)
獲取共享數(shù)據(jù):Object value = sessionMap .get(String name)
操作application作用域?qū)ο?
以前:
設置共享數(shù)據(jù):request.getServletContext().setAttribute(String name,Object value);
獲取共享數(shù)據(jù):Object value = request.getgetServletContext().getAttribute(String name);
現(xiàn)在: 只需要得到application的Map對象即可.