一、Struts2的国际化(了解)
1、配置全局国际化消息资源包
- 配置全局消息资源包
b、如何访问
- 在动作类中:
前提,动作类继承ActionSupport
- 在页面中:
或者
<s:text name="hello"></s:text>
- 自由指定消息资源包,借助struts2的有关国际化的标签:
如果消息资源包在com.itheima.resources.msg_zh_CN.properties
- 配置局部消息资源包
一定要经过Action才行:
书写规范:在动作类所在包中,建立名字”动作类名-zh-CN.properties”的配置文件。动作类中访问,发现局部的比全局的优先级高。
3、包范围的消息资源包
也得经过action访问
书写有规范的,名称为package_zh_CN.properties,放在类的包中。可以被包中及子包的所有动作类来访问。
总结:
二、Struts2中的拦截器(很重要AOP)
1、Struts2的很多核心功能都是由拦截器完成的。
staticParam、params、conversionError、modelDriven、validation、workflow、servletConfig等
2、在执行动作方法前或执行结果后,做拦截处理。AOP编程思想。
ObjectFactory:框架提供的默认的动作类创建工厂,返回的是动作类的代理子类。
3、自定义拦截器
a、定义一个类,继承AbstractInterceptor或者实现Interceptor
b、在struts.xml中进行定义
c、在动作中使用
4、Struts2框架的拦截器继承体系
三、文件的上传和下载(很重要,记住。拦截器和结果类型Stream)
1、文件的上传是一个由fileUpload的拦截器实现的。
前提:method必须是post;enctype=multipart/form-data;提供type=file的上传输入域
2、单文件上传
a、定义动作类
b、拦截器的参数配置:
maximumSize:限制上传文件的大小。优先级比全局那个要低
<param name="fileUpload.allowedExtensions">.bmp,.jpg,.png</param>:限制的文件扩展名
allowedTypes:限制上传文件的MIME类型。多个类型也是通过逗号分隔。
3、多文件上传
用数组或List
4、参数配置及不符合要求时的错误提示
a、如果出现上传失败的情况,框架自动转向一个input的逻辑视图。
b、更改默认的消息提示:
在哪里?struts2-core.jar org.apache.struts2.struts-message.properties
改变:配置一个全局消息资源包
5、文件的下载:结果类型
a、动作类
b、配置stream结果类型
四、OGNL表达式(很重要)
1、OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,
它是一个开源项目
2、OGNL相对其它表达式语言具有下面几大优势
前提:在Struts2用OGNL表达式,需要用到标签。
- 支持对象方法调用,如xxx.doSomeSpecial();
- 支持类静态的方法调用和值访问
- 支持赋值操作和表达式串联
- 访问OGNL上下文(OGNL context)和ActionContext(很重要)
- 操作集合对象
五、ValueStack(很重要)
1、ValueStack的声明周期
每次动作访问都会创建一个ValueStack。动作类的实例声明周期也是每次访问时都创建。
2、ValueStack和ActionContext的关系
对于我们来说:
通过ValueStack操作Map和栈(根)。
具体看到这个值栈:<s:debug/>
明确概念:OGNL的contextMap。ValueStack是作为他的一个叫做根(实际上是一个List)的形式存在的。
3、ValueStack常用的方法
void set(String key,Object value):先获取根栈栈顶的Map,如果不存在,压入一个新的Map,把key和value放到这个Map中。如果存在,直接放key和value。
void setValue(String ognlExp ,Object):String是一个OGNL表达式。如果表达式以#开头,操作contextMap。如果不是,设置根栈中对象的某个属性,从顶到尾依次搜寻
- Object findValue(String expr):参数是一个OGNL表达式。如果以#开头,从contextMap中找key值所对应的对象。如果不是以#开头,搜索根栈中对象的属性(getter方法)
特别注意:如果编写的表达式不是以#开头,先搜索根栈对象的所有属性,如果没有找到,会把它当做key值到contextMap中找。
- String findString(String expr):和findValue功能一样,但把OGNL表达式获取的对象转换成String
六、Struts2的标签