Action详解

访问ServletAPI(3种方式)

  1. 使用com.opensymphony.xwork2.ActionContext
    • Object get(Object key)类似于调用HttpServletRequest的getAttribute(String name)的方法
    • static ActionContext getContext() 获取系统的ActionContext实例
    • Map getParameters() 获取所有的请求参数,类似于调用HttpServletRequest对象的getParameterMap方法
    • Map getSession() 返回一个Map,该Map模拟了HttpSession实例
    • Map getApplication() 返回一个Map,该Map模拟了ServletContext实例
    • void setApplication(Map application) 直接传入一个Map实例,Map中的key-value直接转换成Application中的key-value
    • void setSession(Map session)
    • void setParameters(Map request)
  2. 通过实现接口
  3. struts2通过实现接口,可以直接获得servlet对象
    实现:
    • org.apache.struts2.util.ServletContextAware 可访问用户请求的HttpServletRequest实例
    • org.apache.struts2.util.ServletResponseAware 可访问服务器响应的HttpServletResponse实例
  4. 通过org.apache.struts2.ServletActionContext的静态方法
    • static PageContext getPageContext()
    • static HttpServletRequest getRequest()
    • static HttpServletResponse getResponse()
    • static ServletContext getServletContext()

动态Action:
  1. DMI(Dynamic Method Invocation)动态方法调用
  2. actionName!methodName.action 形式将请求映射到Action上的相应方法进行处理
    注意:使用DMI之前请设置系统允许进行动态方法调用。设置struts.enable.DynamicMethodInvocation常量为true
  3. 为action元素指定Method属性
  4. 不推荐:这样需多处配置逻辑视图,影响可修改性
  5. name / class / method属性都支持通配符(*)
  6. 第一个出现的*,表达式为{1}.以此类推,可以实现通过动态属性名,实现对其它属性的动态指定
    对于多个Action可以同时匹配同一请求时,如果在Action映射中有完全匹配的,则选定此为之匹配,否则以先出现的包含通配符匹配的Action进行匹配


附:
  • Action配置
  • <action name="actionName" class="package.ActionName">
  • 配置默认Action:配置一个Action为容器默认的Action
  • <default-action-ref name="actionName"/>

你可能感兴趣的:(apache,struts,servlet)