serveltAPI里面有什么?
Web容器提供的各种内置对象,request,session,application等。
struts2要获取这类对象需要:1.ActionContext(推荐)
2.ServletActionContext(可以获取HttpServletRequest等)
3.特定接口
ActionContext
包含了每个请求的参数
值栈:struts2提供的一个存储区域,是一个栈结构,用来存储Action实例。
OGNLO(对象图导航语言),类似于JSTL,用来访问值栈中的数据。
局部类型转换:
定义一个类继承“DefaultTypeConvert”,然后重写“public Object convertValue(Object value, Class toType)”
注意:value是一个字符串数组,如果要转换的类型是Date,需要手动导入java.util.Date.
定义好转换器后,需要在Action同目录下创建与该Action对应的配置文件“Action类名-conversion.properties”
例如:birthday = com.converter(包名).DataConverter(类名)
以上只能转换指定Action中的数据类型。
局部类型转换:
全局类型的配置文件需要“work-conversion.properties”命名,然后需要将此文件放入src根目录。
例如:java.util.Date = com.converter.
DataConverter
有时需要自定义拦截器:一般继承AbstracInterceptor抽象类。
注意:在 action中加入了自定义的拦截器后,需要在后面还要加上默认的拦截器“defaultStack”.
action拦截只能拦截部分代码,并且当action过多会出现大量重复代码,这时候需要出现全局拦截。
注意:在使用全局拦截器时,由于拦截器的值只能由一个,因此在所有被拦截的Action中都需要配置与拦截器返回值相同的result,也就是说需要将此返回值配置为全局结果集(global-result),否则拦截器会拦截所有的action。
另外:有些action不希望被拦截,例如登陆,登出,注册等。
两种办法;1.将这些功能直接放入jsp页面,不放入action。不要暴露实际操作的jsp页面。
2.将这些功能的action直接放入另外一个包中,或者使用方法拦截。(定义拦截器执行MethodFilterInceptor,另外,在interceptor-ref的子节点中,在param name=“includeMethods 中添加指定的被拦截的方法 param name=“includeMethods 中指定不拦截哪些方法)