1.在控制器中如何获得:
ServletContext,HttpSession,HttpRequest,HttpResponse;
一种方式是通过:
1.通过ActionContext访问Servlet Api(ioc方式)
a.如:Map session=ActionContext.getSession();
Map application =ActionContext.getApplication();
Map request = (Map)context.get("request");
b.实现struts2容器的回调类 *Aware(RequestAware,SessionAware,ApplicationAware)
2.ServletActionContext(非ioc);
如: ServletActionContext.getRequest();
ServletActoinContext.getResponse();
ServletActionContext.getServletContext();
3. 实现ServletRequestAware, ServletContextAware(非ioc)
得到页面提交过来的值:ModelDriven接口的使用
2.界面如何获得在Session,Application中的值:ognl表达式只能用在标签内
值栈的使用:放的对象一般为: 临时对象,模型对象,action对象,作用域对象又叫命名对象
访问访问上下文中的内容:
作用域: 作用范围: OGNL
Parameters 包含当前请求中所有的HttpServletRequest参数 #parameters.name
Request 包含当前请求中所有的HttpServletRequest属性 #request.name
Session 包含当前请求中所有的HttpSession属性 #session.name: <s:property value="#session.user"/>
Application 包含当前请求中所有的ServletContext属性 #application.name <s:property value="#application.user"/>
Attr 包含前面四种作用域的所有属性 #attr.name
attr的会按照作用域的范围: Parameters的范围---->request...----》Application
3.返回的结果类型:
dispatcher,redirect,chain,freemarker
4.struts.properties的配置:
5.struts.xml的配置:
<constant name="struts.i18n.encoding" value="GBK"/>
配置异常映射:局部异常
<action name="register" class="org.sunxin.struts2.action.RegisterAction">
<!-- 配置异常映射,当RegisterAction抛出Exception异常时,向用户显示error.jsp页面 -->
<exception-mapping result="error" exception="java.lang.Exception"/>
<result name="error">/WEB-INF/pages/error.jsp</result>
</action>
6.action中多方法的调用:
action的name名称!方法名.action
7.拦截器及拦截器栈的使用:
a.系统拦截器及拦截器栈的配置:
<interceptors>
<!-- 部署timer拦截器 -->
<interceptor name="timer"
class="com.opensymphony.xwork2.interceptor.TimerInterceptor" />
<!-- 部署logger拦截器 -->
<interceptor name="logger"
class="com.opensymphony.xwork2.interceptor.LoggingInterceptor" />
<!-- 部署拦截器栈,命名为myStack,引入timer和logger拦截器 -->
<interceptor-stack name="myStack">
<interceptor-ref name="timer" />
<interceptor-ref name="logger" />
</interceptor-stack>
</interceptors>
b.拦截器及拦截器栈针对某个action的使用:
<action name="testAction" class="sunyang.interceptor.Action">
<result>/success.jsp</result>
<interceptor-ref name="myStack" />
</action>
c.拦截器的参数设置:
<interceptor-ref name="parameterInterceptor">
<param name="name">lixin</param>
</interceptor-ref>
d.自定义拦截器的使用:
实现: com.opensymphony.xwork2.interceptor.Interceptor接口 ;
继承: com.opensymphony.xwork2.interceptor.AbstractInterceptor
重写:
@Override
public String intercept(ActionInvocation actioninvocation) throws Exception {
System.out.println("========ParameterInterceptor拦截器开始调用========");
System.out.println("=========" + name);
String result =actioninvocation.invoke();
System.out.println("========ParameterInterceptor拦截器调用后========");
return result;
}
配置见a
e.多个拦截器的调用顺序:配置在前,则先执行;
f.对控制器中的方法进行有选择的拦截:
<param name="includeMethods">方法1,方法2</param>
<param name="excludeMethods">方法1,方法2</param>
如果一个方法既在incoudeMethods中,又在excludeMethods中,则优先 includeMethods
g.execAndWait拦截器的使用;
当我们为action添加拦截器后,<default-interceptor-ref>中的所指定的拦截器将不再对action起作用;必须用<interceptor-ref>导入默认的拦截器栈再添加自己的拦截器
国际化:
页面中如何使用:
<s:text name="welcome"/>等价于<s:property value="%{getText('welcom')}"/>
<s:textfield key="name"/>等价于<s:textfield label="name"/>
<s:param ></s:param>为资源中的占为符赋值
在action中使用:
addActionError(getText("error"));
在校验文件中使用:
<param>
<message>${getText("error.name.null")}</message>
注意:<s:i18n name="资源文件的名称">的使用
1.全局资源文件:
<constant name="struts.custom.i18n.resources" value="">
2.
与spring的集成:
<constant name="struts.objectFactory" value="spring" />