黑马程序员技术交流社区

标题: 【石家庄校区】学习笔记-Struts2(1) [打印本页]

作者: htb52110    时间: 2018-1-9 12:42
标题: 【石家庄校区】学习笔记-Struts2(1)
本帖最后由 htb52110 于 2018-1-9 12:49 编辑

框架-Struts2
1、框架的介绍
1.1、概念
框架(framework)是一个基本概念上的结构,用于去解决或者处理复杂的问题。
框架,即 framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。
框架是在特定的领域内解决问题。
优点
重用代码大大增加,软件生产效率和质量也得到了提高
使用框架开发,它提供统一的标准,大大降低了我们的后期维护
1.2、java开发中常用的框架
1.2.1、内容
SSH        :struts2 spring hibernate
SSM(SSI): springmvc spring mybatis(ibatis)

1.2.2、作用:
SSH:是企业开发中比较主流的一套架构
SSM:在开发中所处的位置:

2、Struts2框架
2.1、介绍
Struts2 是一个基于 MVC 设计模式的 Web 应用框架,它本质上相当于一个servlet,在 MVC 设计模式中,Struts2 作为控制器(Controller)来建立模型与视图的数据交互
Struts2=struts1+webwork
2.2、核心点
1、拦截器        interceptor
2、action
3、ognl与valueStack
2.3、Struts2 框架流程

2.4、使用Struts2的使用步骤
1.导入相关的 jar 文件(可根据样例工程里jar包进行导入)
2.需要在 web.xml 文件中配置一个 Filter(只有配置了它才可以使用 struts2 框架)
需要在 web.xml 文件中配置 StrutsPrepareAndExecuteFilter
3.struts.xml 配置(它的位置是可以放置在 src 下)
4.创建 Action 来完成逻辑操作

2.5、使用Struts2的简单的流程分析图

2.6、Struts2的执行流程
流程:
1.当通过浏览器发送一个请求
2.会被 StrutsPrepareAndExecuteFilter 拦截
3.会调用 struts2 框架默认的拦截器(interceptor)完成部分功能
4.在执行 Action 中操作
5.根据 Action 中方法的执行结果来选择来跳转页面 Resutl 视图
解释:
一般管 StrutsPrepareAndExecuteFilter 叫做前端控制器(核心控制器),只有配置了这个 ilter
我们的 struts2 框架才能使用。
Struts2 的默认拦截器(interceptor)它们是在 struts-default.xml 文件中配置
注意:这上 xml 文件是在 struts-core.jar 包中。
默认的拦截器是在 defaultStack 中定义的。
2.7、Struts2配置文件加载顺序

解释:
第一个加载的是 default.properties 文件
位置:struts2-core.jar 包 org.apache.struts2 包下
作用:主要是声明了 struts2 框架的常量
第二个加载的是一批配置文件
Struts-default.xml
位置:struts2-corl.jar
作用:声明了 interceptor result bean
Struts-plugin.xml
位置:在 struts2 的插件包中
作用:主要用于插件的配置声明
Struts.xml
位置:在我们自己的工程中
作用:用于我们自己工程使用 struts2 框架的配置
第三个加载的是自定义的 struts.properties
位置:都是在自己工程的 src 下
作用:定制常量
第四自定义配置提供
第五加载的是 web.xml 配置文件
主要是加载 struts2 框架在 web.xml 文件中的相关配置.
第六 bean 相关配置

重点掌握:
1.Default.properties
2.Struts-default.xml
3.Struts-plugin.xml
4.Struts.xml
5.web.xml
2.8、struts.xml文件配置介绍
2.8.1、package配置
1).name 属性
作用:定义一个包的名称,它必须唯一。
2).namespace 属性
作用:主要是与 action 标签的 name 属性联合使用来确定一个 action的访问路径
3).extends 属性
作用:指定继承自哪个包。一般值是 struts-default
struts-default 包是在 struts-default.xml 文件中声明的。
4).abstruct 属性
它代表当前包是一个抽象的,主要是用于被继承
2.8.2、 action配置
1).name属性
作用:主要是与package的namespace联合使用来确定一个action的访问路径
2).class 属性
作用:用于指示当前的 action 类
3).method 属性
作用:用于指示当前的 action 类中的哪个方法执行
2.8.3、result配置
它主要是用于指示结果视图
1).name 属性
作用是与 action 类的 method 方法的返回值进行匹配,来确定跳转路径
2).type 属性
作用是用于指定跳转方式
2.8.4、扩展
关于 action 配置中的 class 与 method 的默认值以及 result 中的 name 与 type 默认值问题

原因:struts-default.xml 文件中配置

它的作用就是当一个请求来时,如果查找不到指定的 class 及对应的 method 就会执行
ActionSupport 类中的 execute 方法。
在这个类的 execute 方法中默认返回的是”success”
也就是说,result 的 name 属性默认值是 success,默认的跳转方式是请求转发 dispatcher
2.9、常量配置
default.properties 文件中定义了 struts2 框架常用常量 .
问题:我们怎样可以定义常量
1.可以在 src 下创建一个 struts.properties 配置文件
2.可以在 web.xml 文件中配置
3.可以直接在 struts.xml 文件中定义常量 (推荐)

注意:后加载的配置文件中的常量会将先加载的常量覆盖

3、Action类的创建方式
3.1、创建一个 pojo 类
Pojo(plani Ordinary java object)简单的 java 对象
Pojo 类就是没有实现任何接口没有继承任何类
优点:无耦合
缺点:所有的功能都要自己完成
注意:Pojo类必须要有无参的构造方法!!!
3.2、创建一个类实现一个 Action 接口
com.opensymphony.xwork2.Action
在 Action 接口中定义了五个常量,一个 execute 方法
五个常量:它们是默认的五个结果视图<result name=””>:
ERROR : 错误视图
INPUT: 它是 struts2 框架中 interceptor 中发现问题后会访问的一个视图
LOGIN:它是一个登录视图,可以在权限操作中使用
NONE:它代表的是 null,什么都不做(也不会做跳转操作)
SUCCESS:这是一个成功视图
优点:耦合度低
缺点:还是需要自己来完成功能
3.3、创建一个类继承 ActionSupport 类
com.opensymphony.xwork2.ActionSupport
ActionSupport 类也实现了 Action 接口。
我们在开发中一般会使用这种方案:
优点:具有丰富的功能,例如 表单校验 错误信息设置 国际化
缺点:耦合度高
4、Action的访问方式
4.1.直接通过<action>标签来配置,通过 method 来指定访问的方法,如果 method 没有,默认访问的是 execute 方法。

4.2.简化的 action 访问方式,可以使用*通配符来访问。
这种方式的缺点:不建议使用过多的*号,它带来程序阅读障碍,不便于理解
使用*来简化操作方案,它对名称规范必须进行一个统一。

·4.3、扩展--动态方法调用

这是 struts2 提供的动态方法调用。
注意:对于 struts2 的动态方法调用,要想使用我们必须配置一个常量来开启动态方法调用

这代表动态方法调用没有开启

不建议使用动态方法调用

4、Struts2框架封装数据( action 中如果获取请求参数)
4.1、属性驱动
a.直接在 action 类中提供与请求参数匹配属性,提供 get/set 方法
b.在 action 类中创始一个 javaBean,对其提供 get/set ,在请求时页面上要进行修改,
例如 user.username user.password ,要使用 ognl 表达式
以上两种方式的优缺点:
第一种比较简单,在实际操作我们需要将 action 的属性在赋值给模型(javaBean)
去操作
第二种:不需要在直接将值给javaBean过程,因为直接将数据封装到了javaBean
中。它要求在页面上必须使用 ognl 表达式,就存在页面不通用问题。
4.2、模型驱动
步骤:
1.让 Action 类要实现一个指定接口 ModelDriven
2.实例化模型对象(就是要 new 出来 javaBean)
3.重写 getModel 方法将实例化的模型返回。

对于模型驱动它与属性驱动对比,在实际开发中使用比较多,模型驱动缺点,它只能对一个模型数据进行封装。
5、总结与补充
5.1、关于 action 访问的配置
<package name=”” namespace=”” extends=””>
<action name=”” class=”” method=””>
<result name=”” type=””>路径</result>
</action>
</package>
5.2、关于路径跳转问题:
是通过<result>来配置跳转的路径.
它的 name 属性是与 action 中的方法的返回值进行对比的。
它的 type 属性可以取哪些值?

默认值是 dispatcher 它代表的是请求转发。针对于 jsp 页面
redirect 它代表的是重定向 针对于 jsp 页面
chain 它类似于请示转发,只不过它是针对于 action 跳转.
redirectAction 它类似于重定向 针对于 action
5.3、关于路径跳转的配置
可以直接在<package>下创建全局的 result

D0FBBE5AB51A472C8EBD085BB8A804AA.jpg (6.08 KB, 下载次数: 20)

D0FBBE5AB51A472C8EBD085BB8A804AA.jpg

作者: sunshine5683    时间: 2018-1-9 15:19
讲的很透彻




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2