在javaWeb的世界中jsp+servlet构成了web层,而今天我要分享的内容就是struts2究竟干了什么。
Struts2框架——web层
Sping框架——业务层
Hibernate框架——数据层
你可以简单的这么理解,用一句很流行的话讲:没茅台!
第一个请求总是来自浏览器的的url中,它要请求我们服务器上某个项目的首页!
然后我们从首页上的超链接或者表单等继续发送请求,来完成用户的某项需求!
Struts2中最重要的一个组件进而被引出,过滤器!作用:简单说过滤请求!
Struts2中的过滤器异常强大,里面的init方法主要加载配置文件,通过配置文件信息来完成
action类对象创建、方法调用以及后面讲的拦截器配置文件的加载。
不明白过滤器是什么的可以查看我以前的javaweb文章,有详细介绍。
Struts2中使用action替代了servlet,注意action跟servlet有一个重要区别:action是多实例对象!
在Struts2中提供了一系列的获取表单数据的方法,以及封装表单数据到对象、list集合的方式!(一看就会)
同时Struts2还提供了一系列在jsp中获取域对象内容以及Struts2专属的值栈中数据的标签!(Struts2标签需要OGNL表达式联合使用=EL表达式)
这里引出了Struts2第二大组件值栈!
概念:栈是一种数据结构,堆栈是java程序员常常用的,栈区的特点就是后进先出或者说先进后出!(自己尝试写一个堆栈队列的数据结构容器)
作用:存储数据
结构:主要分为两大部分Root和Context
Root为List集合,默认存储一个action引用(我们主要使用它来存储数据到Jsp页面中)
Context为Map集合,里面存储Servlet三大域对象引用以及ServletCongfig引用等
注意:每个action都有且只有一个值栈
Struts2另一个大组件——拦截器
拦截器:Struts2在设计拦截器的时候,采用了Aop思想以及责任链设计模式!
那么拦截器什么时候出生,出生后干了什么呢?
拦截器在action对象创建后,调用方法之前,被加载,Struts2中有很多默认拦截器,这些拦截器都会被加载,但不会被调用,只有我们在配置文件中
进行配置以后才会被调用,其实每个拦截器都是一个方法的封装,也就是一个函数!一个功能!只不过这种对action扩展功能的方式不是通过创建对象调用方法
来实现的,而是通过修改配置文件完成——这个就是AOP思想!
至于什么是责任链,简单说跟过滤链很相似,都采用了放行机制!
真实项目中我们往往需要自定义拦截器,来实现功能扩展!(所以这部分还是很重要的)
注意:拦截器只拦截action,而过滤器什么都拦截比如jsp、servlet、action、图片路径等