Struts2入门
- Struts2框架的概述
- Struts2是一种基础MVC模式的轻量级Web框架,它自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中。目前掌握Struts2框架几乎成为Web开发者的必备技能之一。
- Struts2的优势
- 项目开源,使用扩展方面,天生优势。
- 提供Exception处理机制
- Result方法的页面导航,通过Result标签很方便的实现重定向和页面跳转
- 通过简单、集中的配置来调度业务类,使得配置和修改都非常容易
- 提供简单、统一的表达式语言来访问所有可供访问的数据
- 提供标准、强大的验证框架和国际化框架
- 提供强大的、可以有效减少页面代码的标签
- 提供良好的Ajax支持
- 拥有简单的插件,只需方旭相应的JAR包,任何人都可以扩展Struts2框架,比如自定义拦截器、自定义结果类型、自定义标签等,为Struts2定制需要的功能,不需要什么特殊配置,并且可以发布给其他人使用
- 拥有智能的默认设置,不需要另外进行繁琐的设置。使用默认设置就可以完成大多数项目程序开发所需要的功能。
- Struts2的文件夹目录结构
- apps:该文件夹用于存放官方提供的Struts2示例程序(可学习、可参考)
- docs:该文件夹用于存放官方提供的Struts2文档(文档+API)
- libs:该文件夹用于存放Struts2的核心类库,以及Struts2的第三方插件类库
- src:该文件夹用于存放该版本Struts2框架对应的源代码
- Struts2的基本开发包
- asm-版本.jar:操作java字节码的类库
- asm-commons-版本.jar:提供了基于事件的表现形式
- asn-tree-版本.jar:提供了基于对象的表象形式
- struts2-core-版本.jar:Struts框架的核心类库
- xwork-core-版本.jar:WebWork核心库,Struts的构建基础
- ognl-版本.jar:对象图导航语言(Object Graph Navigation Language),Struts框架通过其读写对象的属性
- freemarker-版本.jar:Struts2标签模板使用的类库
- javassist-版本.GA.jar:JavaScript字节码解释器
- commons-fileupload-版本.jar:Struts2文件上传组件依赖包
- commons-io-版本.jar:Struts2的输入输出,传文件依赖的jar
- commons-lang-版本.jar:包含一些数据类型工具,是对java.lang包的增强
- log4j.api-版本.jar:Struts2的日志管理组件依赖包的api
- log4j.core-版本.jar:Struts2的日志管理组件依赖包
Struts2的基本配置
Struts.xml配置
- struts
- package(此package非java中的package)
- 属性
- name:自定义package名称 #此名字是该包被其它包引用的key
- extends:它指定该包继承其它包(并继承其中的Action及拦截器) #struts-default(这个一般够用了)
- abstract:定义该包是否为抽象包(默认为false)#设置后可被别人继承
- namespace:访问路径
- 默认名称空间:namespace=""
- 根名称空间:namespace="/"
- 带名称的名称空间:namespace="/aaa"
- 标签
- action
- 属性
- name:访问路径(注:这个路径和namespace共同使用)
- class:包的全路径
- method:指定Action时调用的方法(默认是execute)
- converter:指定类型转换器的类
- 标签
- result
- name:页面返回的那个页面
- 中间的路径:要跳转的那个路径
- type
- chain
- :用来处理Action链,被跳转的Action中仍能获取上个页面的值(如request信息)
- dispatcher
- 用来转向页面,通常处理jsp,是默认的结果类型
- freemarker
- 用来整合FreeMarker模板结果类型
- httpheader
- 用来处理特殊的HTTP行为结果类型
- redirect
- 重定向到一个URL,被跳转的页面中丢失传递的信息
- redirectAction
- 重定向到一个Action,跳转的页面中丢失传递的信息
- stream
- 向浏览器发送InputStream对象,通常用来处理文件下载,还可用于Ajax数据
- velocity
- 用来整合Velocity模板结果类型
- xslt
- 用来整合XML/XSLT结果类型
- plainText
- 显示原始文件内容(例如文件源代码)
- postback
- 使得当前请求参数以表单形式提交
- chain
- result
- 属性
- action
- 属性
- package(此package非java中的package)
Struts2的执行流程
- 1)客户端发送请求
- 2)前端控制器 #核心过滤器 执行一组拦截器 #一般执行那些有关的拦截器的部分功能
- 3)进入配置文件中,寻找action标签中的class+method #来看执行哪个类中的方法
- 4)执行方法后,并返回一个路径(或不返回),再次进去配置文件中action标签下的result标签中的name属性 #name属性同返回的相同,跳转result下的路径(默认为转发)
Struts配置文件加载顺序
- 1)default.properties
- 2)struts-default.xml
- 3)struts-plugin.xml
- 4)struts.xml #配置Action以及常量
- 5)struts.properties #配置常量
- 6)web.xml #配置核心过滤器及常量
Struts的数据封装
- 属性驱动
- 提供属性的set方法的方式
- 页面提供表达式方法
- 页面使用OGNL表达式的方法
- 必须提供对象的get方法
- 模型驱动(ModelDriven)
- 继承ModelDriven
- 重写getModel()方法
- 封装集合类型的数据
- list
- list[0].xxx #拿数据
- Map
- map['one'].xxx #拿数据
- list
ActionContext
- Struts2框架提供了ActionContext类访问Servlet API,ActionContext是Action执行的上下文对象,在ActionContext中保存了Action执行所需要的所有对象,包括parameters,request,session,application等。
- 常用方法
- void put(String key,Object value)
- 将key-value键值对放入ActionContext中,模拟Servlet API中的HTTPServletRequest的setAttribute()方法
- Object get(String key)
- 通过参数key来查找当前ActionContext中的值
- Map<String , Object> getAppliction()
- 返回一个Application级的Map对象
- static ActionContext getContext()
- 获取当前线程的ActionContext对象
- Map<String , Object> getParameters()
- 返回一个包含所有HTTPServletRequest参数信息的Map对象
- Map<String , Object> getSession()
- 返回一个Map类型的HttpSession对象
- void setApplication(Map<String , Object>,application)
- 设置Application上下文
- void setSession(Map<String , Object>,application)
- 设置一个Map类型的Session值
- void put(String key,Object value)
值栈
- 概述
- struts2本身提供一存储机制,类似于域对象,可以存值和取值(值栈)
- servlet和action的区别
- Servlet:默认在第一次访问时创建,每次只创建一次(单实例对象)
- Action:访问时候创建,每次访问action的时候,都会创建action对象,可以创建多次(多实例对象)
- 值栈存储位置
- 1)每次访问action时,都会创建action对象
- 2)每个action对象里面都会有一个值栈对象(只有一个)
- 值栈对象的获取
- 使用ActionContext对象中的方法得到值栈对象
- 1)调用ActionContext类的对象
- ActionContext context = ActionContext.getContext();
- 2)调用方法得到值栈对象
- ValueStack stack = context.getValueStack();
- 1)调用ActionContext类的对象
- 使用ActionContext对象中的方法得到值栈对象
- 值栈内部结构
- root
- 结构是list集合,一般操作的是root里面的数据
- context
- 结构是map集合,一般操作的是context里面的数据
- root
- 向值栈中放数据
- 使用值栈对象的set方法
- stack.set()
- 调用值栈对象里面的push方法
- stack.push();
- 在action定义变量,生成变量的get方法
- 1)定义对象变量
- 2)生成变量的get方法
- 3)在执行的方法里面向对象中设置值
- 使用值栈对象的set方法
- 从值栈中获取数据
- 使用struts2的标签和OGNL表达式获取值栈数据
- <s:property value="OGNL表达式">
- 使用struts2的标签和OGNL表达式获取值栈数据
OGNL
- 概述
- ONGL是一种表达式,这个表达式功能更加强大
- 1)在Struts2里面操作值栈数据
- 2)一般把OGNL在Struts2操作:和Struts标签一起使用操作值栈
- OGNL不是Struts2的一部分,单独的项目,经常和Struts一起使用
- 使用OGNL时候首先导入jar包,Struts2提供jar包
- ONGL是一种表达式,这个表达式功能更加强大
- OGNL的使用
- 支持对象方法调用
- 使用Struts2标签
- 引入标签库
- <%@ taglib url="/struts-tags" prefix="s"%>
- 引入标签库
- OGNL的#和%使用
- # 获取context里面数据
拦截器
- 注:自定义拦截器,要把原本的拦截器加进去
- <interceptor-ref name="defaultStack">
- 在struts配置文件中配置
- interceptor
- 属性
- name:指定拦截器的名称
- class:用于指定拦截器的所有实现类
- 标签
- param
- name:指定参数的名称
- 中间的参数:表示参数的值
- param
- 属性
- interceptor
- 拦截器栈
- interceptors
- 标签
- interceptor-stack
- 属性
- name:栈的名称
- 标签
- interceptor-ref
- name:拦截器的名称
- interceptor-ref
- 属性
- interceptor-stack
- 标签
- interceptors