文章目录
概念
前端处理框架
运行在web层,负责处理请求的
struts代替servlet处理访问服务器的请求
优势
struts2具有更加先进的架构以及思想
- 自动封装参数
- 参数校验
- 结果的处理(转发/重定向)
- 国际化
- 显示等待页面
- 表单的防止重复提交
Struts2历史
servlet是线程不安全的
(每次请求Servlet时都会产生一个Servlet对象,所以多个对象访问一个Servlet,会造成参数的覆盖,所以解决方法是将接收参数的线程变量放在方法中)
struts1基于线程不安全的servlet基础上构建
struts1基于线程安全的filter基础上构建
struts2与struts1区别就是技术上没有什么关系
struts2的前身是webwork框架
Struts2的核心就是拦截器(Interceptors),因为拦截器中体现了很多优秀的架构思想,首先,struts2帮我们封装了很多功能方法;其次,拦截器优秀的设计,如可插拔式设计(不是写死的);以及优秀思想体现,如aop思想
AOP思想
面向切面编程
体现在Filter,Interceptors
过滤器技术:架构上来讲,Filter能覆盖到所有的Servlet
拦截器技术:架构上来讲,Interceptors能覆盖到所有的Action,将接受参数功能放到拦截器
将纵向重复代码横向抽取
前处理->放行->后处理
Struts2框架的搭建
- 导包
- 书写Action类
- 书写src/struts.xml
- 将struts2核心过滤器配置到web.xml
Struts2访问流程&Struts2架构
配置详解
核心配置struts.xml
Result类是一个接口,由转发和重定向实现
struts2常量配置
struts2默认常量配置位置
修改struts2常量配置
常用常量配置
struts2配置进阶
struts.xml
struts2的默认配置
Action类详解
- Action的书写方式
Action方法
public String xx() throws Exception
结果跳转方式
struts.xml 中 action 元素 result 中的 type参数
转发
重定向
转发到Action
重定向到Action
访问servletAPI方式
原理
ActionContext 数据中心
|-request
|-response
|-ServletContext
|-requestScope
|-sessionScope
|-applicationScope
|-params
|-attrs
…
//获得ActionContext
ActionContext.getContext();
|-requestScope
|-sessionScope
|-applicationScope
|-params
|-attrs
//获得ActionContext中原生对象的工具类
ServletActionContext
|-request
|-response
|-ServletContext
通过ActionContext
通过ServletActionContext
struts2框架的使用就是脱离原生servlet对象,与servletAPI彻底解耦
通过实现接口方式
如何获得参数
Action是线程安全的,可以使用成员变量来接收参数
每次请求时都会创建新的Action实例对象(生命周期)
属性驱动获得参数不推荐
StrutsMVC
MVC设计思想
M 业务模型 V视图 C控制
JAVAEE三层架构体现了MVC思想
V:客户端层 HTMLCSS JAVAscript
C:web层 Servlet JSP
M:Service层,Dao层 数据访问
Struts MVC
C:Filter:获得请求并且调用后台Action(线程安全,每次请求对应单独的Action)
M:Action:业务方法,参数接收都可以在Action中做
V:Result:转发重定向
集合类型参数封装
OGNL表达式
对象视图导航语言
${user.addr.name}
OGNL不仅仅可以视图导航,支持比EL(表达式语言)表达式更加丰富的功能
OGNL与Struts2的结合
Struts2为OGNL提供了一个OGNLContext—ValueStack
原理
参数接收
如何获得值栈对象,值栈对象与ActionContext对象是互相引用的
配置文件
自定义拦截器
拦截器生命周期
随项目的启动而创建,随项目的关闭而销毁
拦截器API
拦截器配置
struts.xml
拦截器拦截方法指定
Struts2标签
标签体系
Struts2标签结构
- 控制标签
- 数据标签
- 表单标签
- 非表单标签