Struts2 框架:
1、作用:封装了 jsp servlet ,按照 mvc 的开发模式 进行了封装。
2、Mvc: model one model two (mvc) model view controller 控制层
3、Struts1 struts2(xwork webwork (framework))
这里面这个故事的版本貌似是这样的:显示 apache 开发了 struts1 然后 渐渐地另一拨人开发了xwork ,然后 不断地升级,越来越多的人发现这个好用,于是apache就把 这个 xwork连人带东西 都并购了。然后 改了个名字 叫做 struts1.
4、搭建一个struts2环境:
1)导入struts2 的jar包
2)Web.xml 进行struts2 的核心控制 配置, 用来 告诉 tomcat 有一个mvc框架
3)下一个 普通的 aciton类,里面必须有 execute 而且这个方法必须有一个 string的返回值
4)Struts2的核心配置文件,:请求路径action之间的关系,返回字符串和jsp页面之间的关系
5)这个配置文件就由 核心控制器 读取,并且使用。
5、在struts2 请求的流程中,携带数据,在相应的过程中,也携带数据回来。
总结:
1、struts框架概述
2、搭建环境(工作机制)重点
3、这样的环境下 数据的传递:属性驱动 对象驱动
4、作业:1、struts2登录 新增 修改 展现 删除
定义 action的方式 ,在 action中访问 servlet api ,在 action中 如果有多个方法的话,可以进行方法调用配置
1、导入jar包。
2、
<!-- 配置struts2 核心控制器 --> <filter> <filter-name>struts2</filter-name> <!-- 这个 应该 是高级版本的。 --> <!-- org.apache.struts2.dispatcher.FilterDispatcher 好像是说这个也行,回头试试 --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
//这控制台上的输出有毒【囧】
这个当然是行。不过人家不建议使用了
这个 约束文件是要加上的。就是 那个 dtd文件。
工作原理:
Struts 工作原理:
From letben 先自己写一遍再抄老师的。
配置流程:
1、导入对应的jar包
2、到web.xml 中进行配置,配置时候,是以过滤器的形式。
3、写对应的action。
4、为相应的action配置 struts.xml 文件。
工作原理:
1、启动tomcat服务器。加载配置文件。发现在web.xml 中配置了对应的struts的核心控制器。并且让struts的核心控制器接管每一个当前工程目录结构下的路径。【如果没有配置,则struts不可以工作。】
1、随着请求的到来,【通常都是jsp页面的请求,当然也有来自 action。】tomcat服务器会去对应当前这个 请求是否对应到核心控制器的范围。【显然我们配置过了,会走这个配置器的工作路径】,页面一般会直接响应。【因为本质上struts是对servlet的封装。当然也包括一部分的jsp的封装。使之应用起来更加方便。】1)当请求的路径对应到struts.xml里面对应的package 里面namespace下的 action下的name 这样一个路径的时候,action对应的class的对象将被创建。2)随后执行里面的execute方法。然后返回一个string类型的结果。如果该结果对应到了action里面result的name,那么就会跳转到对应标签体那个里面的路径。如果是一个页面,那么就反馈新的这个页面给客户端。否则的话就继续到新的action里执行对应的方法。
来自老师:
1、当向tomcat发送请求的时候【通常都是jsp】。Tomcat接收到这个请求,并把这个请求给核心控制器
2、核心控制器拿到这个请求路径。通过过滤器,判定一次这个上面是否以.action结尾。如果有就把.action 去掉。
3、核心控制器就用这个掐头去尾的路径到struts.xml里面的action配置中做对应,匹配到之后,创建路径对应的action的对象
4、调用action中的execute()方法
5、调用该方法前,要经过一系列的过滤器,【做很多的通用功能,比如转码,参数拦截,checkbox拦截 等等。】
6、通过方法名进行对应,进入指定的方法,并执行相应的函数。执行这个函数时,当前action里面的各个属性已经根据反射得到了从页面或者 对应action的值。
7、在execute方法中,可以使用封装的model做数据的处理
8、根据处理结果作出相应,这个响应实质上是一个string类型的标识
9、经过拦截器把action中所有的属性,都存储到Request的作用域中
10、把标识给控制器。
11、核心控制器通过这个标识到struts.xml中找到一个 跟action里面result的name对应的结果,并执行这个结果。如果是.jsp就到对应页面,如果action,就到对应的action中继续执行。继续对应,直到反馈一个界面给客户端。
李飞和这个描述,差一个 参数拦截器。差一个method的对应
定义action的方式:
1、就是一个普通类,必须要有一个String返回值类型的 execute。
2、必须实现一个 action的接口。在这个接口中,有五个常量【分别是 success、error、none、login、input】,和一个 execute方法
3、必须集成一个 Actionsupport类。它实现【还是继承?】了action,validate,I18n 等 一共5个大类。还有一个 序列化,还有一个 忘记了
【方法3最多见,毕竟是继承,方法 提供的全面】
在 action中访问 servlet 的api:也提供了3种方式
1、ActionContext 直接通过该类 进行访问 因为是 map的集合形式,所以应用也不是很多。但是这种封装的确是还不错。
2、Implements ServletRequestAware ServletResponseAware 实现这两个接口进行访问,但是弊端在于这个方法的冗余太大。本身我们这个 action就有对应的 接受信息和反馈,现在又多了这两个,的接口,所以 实现起来很是冗余。不过确实有这样的方法。
3、ServletActionContext,这就体现了这个 ActionSupport 的优势了。这个里面封装了这个ServletActionContext这个对象。
如果在action中有多个 方法,可以通过 方法调用配置 利用 属性:method来对应
分别采用符号 ! * {}
一共三种