SSH框架入门(2)——struts2(2)
来源:互联网 发布:英雄联盟匹配算法 编辑:程序博客网 时间:2024/06/07 01:57
一、 Struts2框架执行流程
1. Struts2源码导入
对于struts2框架它的源代码我们主要使用三部分
1. struts2核心部分源代码 org.apache.struts2xx,在src\core\src\main\java下
2. struts2的xwork核心部分源代码,src\xwork-core\src\main\java
3. struts2的插件的源代码,src\plugins
2. 关于struts.xml配置文件中提示问题
第一步:在eclipse的window下首选面中查找xml catalog
第二步:Location:配置本地的dtd文件路径
key type:选择URI
Key: http://struts.apache.org/dtds/struts-2.3.dtd
注意版本要对应,如果你可以上网,那么会自动缓存dtd,具有提示功能。
3. 执行流程介绍
1.当通过浏览器发送一个请求
2.会被StrutsPrepareAndExecuteFilter拦截
3.会调用strtus2框架默认的拦截器(interceptor)完成部分功能
4.在执行Action中操作
5.根据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:主要是声明了struts2框架的常量
2.Struts-default.xml:声明了interceptor result bean
3.Struts-plugin.xml::主要用于插件的配置声明
4.Strtus.xml:在自己工程的src下,用于我们自己工程使用strtus2框架的配置
5.web.xml:主要是加载strtus2框架在web.xml文件中的相关配置
2. struts.xml文件配置介绍
2.1. package配置(可以配置多个package,但是name值不能相同)
1.name属性
作用:定义一个包的名称,它必须唯一。
2.namespace属性
作用:主要是与action标签的name属性联合使用来确定一个action的访问路径
3.extends属性
作用:指定继承自哪个包。一般值是strtus-default
strtus-default包是在strtus-default.xml文件中声明的。
4.abstruct属性
作用:它代表当前包是一个抽象的,主要是用于被继承
2.2. action配置
1.name属性
作用:主要是与package的namespace联合使用来确定一个action的访问路径
2.class属性
作用:用于指示当前的action类
3.method属性
作用:用于指示当前的action类中的哪个方法执行
2.3. result配置 它主要是用于指示结果视图
1.name属性
作用是与action类的method方法的返回值进行匹配,来确定跳转路径
2.type属性(不写这个属性默认为转发)
作用是用于指定跳转方式,redirect为重定向
2.4. 扩展:关于action配置中的class与method的默认值以及result中的name与type 默认值问题
原因:strtus-default.xml文件中配置
它的作用就是当一个请求来时,如果查找不到指定的class及对应的method就会执行ActionSupport类中的execute方法。在这个类的execute方法中默认返回的是”success”也就是说,result的name属性默认值是success,默认的跳转方式是请求转发 dispatcher。
3. 常量配置
default.properties文件中定义了struts2框架常用常量 .
问题:我们怎样可以定义常量(三种方法)
1.可以在src下创建一个strtus.properties配置文件
2.可以在web.xml文件中配置
3.可以直接在strtus.xml文件中定义常量 (推荐)
注意:后加载的配置文件中的常量会将先加载的常量覆盖
三、 Struts2的Action详解
Struts2中的action,主要是完成业务逻辑操作。Action替代在servlet中完成的作用。
Action的学习主要有两点
1. 如何创建一个struts2的action
2. 如何访问一个struts2的action
1. Action类创建方式(三种)
1. 创建一个pojo类
Pojo(planiOrdinary java object)简单的java对象
Pojo类就是没有实现任何接口没有继承任何类的简单的Java类
优点:无耦合
缺点:所有的功能都要自己完成
2. 创建一个类实现一个Action接口
com.opensymphony.xwork2.Action,在Action接口中定义了五个常量,一个execute方法
五个常量:它们是默认的五个结果视图<resultname=””>:
ERROR : 错误视图
INPUT: 它是struts2框架中interceptor中发现问题后会访问的一个视图
LOGIN:它是一个登录视图,可以在权限操作中使用
NONE:它代表的是null,什么都不做(也不会做跳转操作)
SUCCESS:这是一个成功视图
优点:耦合度低
缺点: 还是需要自己来完成功能
3. 创建一个类继承ActionSupport类
com.opensymphony.xwork2.ActionSupport,ActionSupport类也实现了Action接口。
我们在开发中一般会使用这种方案:
优点:具有丰富的功能,例如 表单校验 错误信息设置 国际化文件上传等功能
缺点:耦合度高
注:第三种方式用的最多,但是第一种方式现在用的也是比较多的。
2. action的访问方式
1.直接通过<action>标签来配置,通过method来指定访问的方法,如果method没有,默认访问的是execute方法。
2.简化的action访问方式,可以使用*通配符来访问。这种方式的缺点:不建议使用过多的*号,它带来程序阅读障碍,不便于理解;使用*来简化操作方案,它对名称规范必须进行一个统一。
3. 扩展--动态方法调用
(不需要在action中设置method这个属性,就可以直接调用这个方法,动态方法调用对数据安全有影响,所以不建议使用)这是strtus2提供的动态方法调用。
注意:对于strtus2的动态方法调用,要想使用我们必须配置一个常量来开启动态方法调用,这代表动态方法调用
有开启,个人不建议使用动态方法调用,因为这里有一个动态方法调用的漏洞
四、 Struts2框架封装数据
主要解决的问题:是在action中如果获取请求参数
主要有两种方式:
1.属性驱动
a.直接在action类中提供与请求参数匹配属性,提供get/set方法(第一种)
b.在action类中创始一个javaBean,对其提供get/set ,在请求时页面上要进行修改, 例如 user.username user.password,要使用ognl表达式(第二种)
以上两种方式的优缺点:
第一种比较简单,在实际操作(将参数向下传递时)我们需要将action的属性再赋值给模型(javaBean)去操作
第二种:不需要在直接将值给javaBean过程,因为直接将数据封装到了javaBean 中。它要求在页面上必须使用ognl表达式,这样就存在页面不通用问题。(只有在支持ognl的框架里才能用,当换到不支持的框架里时,页面就不能使用了)
2.模型驱动(实际开发中主要用这种)
步骤:
1.让Action类要实现一个指定接口ModelDriven
2.实例化模型对象(就是要new出来javaBean)
3.重写getModel方法将实例化的模型返回。
对于模型驱动它与属性驱动对比,模型驱动在实际开发中使用比较多。
模型驱动缺点:它只能对一个模型数据进行封装。
我们在同时使用属性驱动和模型驱动的时候,有相同的name时候,模型驱动有值属性驱动没有值,所以在有相同的name时候不能同时使用属性驱动和模型驱动。(因为在进行封装的时候是先匹配模型,因为他在栈顶,当匹配到后将不再向下匹配,所以就属性驱动就失效了)
当我们使用属性驱动接收参数时,并不需要提供get方法,只需提供set方法就可以获取值
- SSH框架入门(2)——struts2(2)
- SSH框架入门(1)——struts2(1)
- SSH框架入门(3)——struts2(3)
- SSH框架学习之Struts2(2):接收参数
- SSH框架入门(一)——Struts2基础及查错步骤
- 带你逐步深入了解SSH框架——struts2入门
- SSH框架——走进Struts2
- 学习SSH框架记录片1----Struts2入门
- SSH:Struts2框架(简介)
- SSH:Struts2框架(总结)
- 学习SSH框架记录片2----Herbinate入门
- JavaEE框架——struts2入门
- Struts2入门——3,框架配置文件
- 【JavaEE—Struts2】Struts2概述以及框架入门
- SSH框架问题——struts2 action result type类型
- SSH框架手动整合——Struts2+Hibernate4+Spring4
- 【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.2
- 【SSH框架实现】Struts2【2】 传值 以及 validation 实现
- Java基础--运算符
- Django blog
- 利用命令行执行java时,无法加载主类执行方法
- List,Set,Map是否继承自Collection接口? 答:List,Set是,Map不是。 Collection是最基本的集合接口,一个Collection代表一组Object,即Colle
- 初识linux 中的fork()
- SSH框架入门(2)——struts2(2)
- 对开根号判断素数的优化
- java并发编程-PriorityBlockingQueue
- CentOS7.0以上版本linux防火墙问题
- springboot整合mybatis,动态数据源配置
- eclipse和jdk历史版本下载地址
- 第十章 会话管理(六) sessionFactory
- ionic运行问题
- CentOS下JDK 1.8的安装