本帖最后由 小石姐姐 于 2018-2-1 15:34 编辑
>概述:
○ Struts2是一个MVC设计模式的web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(controller)来建立模型与视图的数据交互.
>核心点:
○ 1.拦截器 interceptor
○ 2.Action
○ Ognl 与valuestack
>现在开发中与Struts2比较类似的框架
○ Struts1 webwork springMVC jsf
>使用Struts2框架
○ 1,导入jar包
○ 2,需要再web.xml文件中配置一个filter
○ 3,Struts.xml配置
○ 4,创建action来完成逻辑操作
>对于Struts2框架的源代码主要使用三个部分:
○ Struts2核心部分源代码 org.apache.struts2xx
§ Src\core\src\main\java
a. struts2的xwork核心部分源代码
src\xwork-core\src\main\java\com\opensymphony\xwork2
b. struts2的插件的源代码
src\plugins
>Struts2的执行流程:
○ 当通过浏览器发送一个请求
○ 会被StrutsprepareandExecuteFilter拦截
○ 会调用Struts2框架默认的拦截器(interceptor)完成部分功能
○ 在执行Action中操作
○ 根据Action中方法的执行结果来选择来跳转页面Resutl视图
一般管StrutsPrepareAndExecuteFilter 叫做前端控制器(核心控制器),只有配置了这个filter我们的strtus2框架才能使用。
Strtus2的默认拦截器(interceptor)它们是在struts-default.xml文件中配置
注意:这上xml文件是在strtus-core.jar包中。
默认的拦截器是在defaultStack中定义的。
>Struts2的加载顺序:
1. Struts2配置文件加载顺序
第一个加载的是default.properties文件
位置:strtus2-core.jar包 org.apache.struts2包下
作用:主要是声明了struts2框架的常量
第二个加载的是一批配置文件
Strtus-default.xml
位置:struts2-corl.jar
作用:声明了interceptor result bean
Strtus-plugin.xml
位置:在strtus2的插件包中
作用:主要用于插件的配置声明
Strtus.xml
位置:在我们自己的工程中
作用:用于我们自己工程使用strtus2框架的配置
第三个加载的是自定义的strtus.properties
位置:都是在自己工程的src下
作用:定制常量
第四自定义配置提供
第五加载的是web.xml配置文件
主要是加载strtus2框架在web.xml文件中的相关配置.
第六 bean相关配置
?
重点掌握:
1. Default.properties
2. Struts-default.xml
3. Struts-plugin.xml
4. Strtus.xml
5. web.xml
>Struts2.xml文件配置的介绍:
○ Package配置
§ 1.name属性: 作用:定义一个包的名称,必须唯一
§ 2.namespace属性 作用:主要是与action标签的name属性联合使用来确定一个action的访问路径
§ 3.extends属性 作用:指定继承自哪个包.一般值是Struts-default
□ Struts-default包是在Struts-default.xml文件中声明的
§ 4.abstruct属性 它代表当前包是一个抽象的主要是用于被继承的.
○ Action 配置
§ 1.name属性 作用:主要是与package的namespace联合使用来确定一个action的访问路径
§ 2.class属性 作用:用于指示当前的action类
§ 3.method属性 作用:用于指示当前的action类中哪个方法执行
○ Result 配置
§ 主要是用于指示结果视图的
§ 1.name属性 作用: 是与action类的method方法的返回值进行匹配,来确定跳转路径
§ 2.type属性 作用: 是用于指定跳转方式
>关于action配置中的class与method的默认值的问题:
○
○ 原因:Struts-default.xml文件中配置
□
○ 它的作用就是当一个请求来时,如果查找不到指定的class及对应的method就会执行actionsupport类中的execute方法.
○ 在这个类中execute默认值是success也就是说,result的name属性默认值是success默认的跳转方式是请求转发 dispatcher
>常量配置:
○ Default.properties文件中定义了Struts2框架常用常量
§ 定义常量的方式:
□ 可以在src下创建一个Struts.properties文件
□ 在web.xml中配置
□ 可以直接在Struts.xml文件中定义常量(推荐的)
§ 注意: 后加重的配置文件中的常量会将先加载的常量覆盖
>Struts2的action
○ action主要是完成业务逻辑操作,action替代servlet
§ action学习主要有两点:
□ 创建一个action
□ 如何访问一个action
>创建action类的方式(三种)
>创建一个pojo类:
} Pojo(plani ordinary java object)简单的java对象
} pojo类就是没有实现任何接口没有继承任何类
– 优点:无耦合
– 缺点:所有的功能需要自己完成
>创建一个类实现一个action接口:
} com.opensymphony.xwork2.action中的action类
– 在action接口中定义了五个常量,一个execute方法
w
w 五个常量(它们是默认的五种结果视图):
w Error:错误的视图
w Input:是Struts2框架中interceptor发现问题访问的视图
w Login:是一个登陆视图,可以在权限操作中使用
w None是代表null,什么都不做(也不会做跳转操作)
w Success:这个一个成功视图
– 优点:耦合度低
– 缺点:还是需要自己来完成功能
>创建一个类继承actionsupport类
} Com.oprnsymphony.xwork2.action support
} Actionsupport 类也实现了action接口
– 我们在开发中一般会使用这种方案
w 优点:具有吩咐的功能,例如表单校验,错误信息设置等
w 缺点:耦合度高
>action的访问方式:
>直接通过<action>标签配置,通过method来指定访问的方法,如果method没有,默认访问execute方法
>使用通配符访问
>
>缺点:不建议使用过多的*号,会带来阅读障碍,不便于理解
>使用*来简化操作方法,他对名称规范要求命名规范
>动态方法调用(有bug不建议使用)
>浏览器访问localhost:8080/…项目名!show
} 这个是strut2提供的动态方法调用
– 注意:对于Struts2的动态方法滴啊用,想要使用我们必须配置一个常量来开启动态方法调用
–
□ Strust2框架封装数据:
>主要解决的问题:是在action中如何获取请求参数
>两种方式
} 属性驱动
– 直接在action类中提供与请求参数匹配属性,提供get/set方法
– 在action类中创建一个javabean对其提供get/set,在请求是页面上要进行修改
– 例如user.username user.password ognl表达式
w 以上两种方法的优缺点:
w 第一种比较简单,在实际操作我们需要将action的属性在复制给模型Javabean去操作
w 第二种不需要再直接将值给javabean过程,因为直接将数据封装到了javabean中,它要求在页面上必须使用ognl表达式,就存在页面通用问题.
} 模型驱动
– 步骤:
w 让action实现指定接口modeldrver
w 实例化模型对象(就是要new出javabean)
w 重写getmodel方法将实例化的模型返回
w
w 对于模型驱动与属性驱动对比,在实际开发中使用较多,
w 模型驱动缺点:
w 只能针对一个模型数据进行封装
>总结:
○ 关于Struts2框架的环境搭建
○ 关于Struts2框架的配置
○ 关于Struts2框架请求参数的封装
○ 关于Struts2的路径跳转
§ 关于action访问的配置
□ <package name="" namespace="">
><action name="" class="" method="">
><result name="" type="">路径</result>
></action>
□ </package>
关于路径跳转问题:
是通过<result>来配置跳转的路径
它的name属性是与action中的方法的返回值进行比较的.
他的type属性可以取哪些值
默认值是dispatcher它代表的是请求转发
redirect代表的是重定向 针对于jsp页面
Chain 类似于请求转发,只不过是针对于action跳转
redirectaction类似于重定向, 针对于action
路径跳转的配置:
可以直接在<package>下创建全局的result
<global-results>
<result name="" type=""></result>
</global-results>
|
|