1.struts2的源代码的导入:
对于struts2框架它的源代码我们主要使用三部分
truts2核心部分源代码 org.apache.struts2
要查找的是core目录下的源代码
struts2的xwork核心部分源代码
\struts-2.3.37\src\xwork-core\src\main\java\com\opensymphony\xwork2
struts2的插件的源代码
src/plugins
2.关于 Struts.xml配置文件中提示问题:
- 添加dtd文件 File-setting-Laguages & Frameworks-Schemas and DTDs
3.执行流程介绍
当浏览器发送一个请求
会被StrutsPrepareAndExecuteFilter拦截
会调用struts2框架默认的拦截器(interceptor)完成部分功能
根据struts.xml文件调用指定action
再执行Action中操作
根据Action中方法的执行结果来选择来跳转页面Result视图
一般StrutsPrepareAndExecuteFilter叫做前端控制器(核心控制器)只有配置了这个filter我们的struts2框架才可以使用。
Struts2的默认拦截器(interceptor)他们是在struts-default.xml文件中配置
注意:这上xml
4.Struts2配置详解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bFJgdg7E-1615458822050)(C:\Users\chujunjie\AppData\Roaming\Typora\typora-user-images\image-20210311114446682.png)]
第一个加载的是default.propertier文件
位置: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的相关配置
重点掌握:
- Default.properties
- Struts-default.xml
- struts-plugin.xml
- struts.xml
- web.xml
5.struts.xml文件配置介绍
package配置
- name属性 作用:定义一个包的名称,它必须唯一
- namespace属性 作用:主要是与action标签的属性联合使用来确定一个action的访问路径
- extends属性 作用:指定继承哪个包,一般是指struts-default struts-default包是在struts-default.xml文件中声明的
- abstract属性,他代表当前包是一个抽象,主要用于被继承
action
- name属性 作用:主要是与package的那么space联合使用来确定一个action的访问路径
- class属性 作用:用于指示当前的action类
- method属性 作用:用于指示当前action类中执行哪个方法
result配置
它主要是指示我们的结果视图
name属性 作用:是与action类的method方法的返回值进行匹配,来确定跳转路径
重定向(这个情况就应该跳转到相应的页面)和请求转发两种跳转
type属性 作用:用于指定跳转方式
关于action配置中的class和method的默认值问题以及result中的name和type的默认值问题
原因:struts-default.xml文件中配置
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />它的作用就是当一个请求来时如果查找不到指定的class及对应的method方法就会执行ActionSupport类中的execute方法,在这个方法中默认返回的是字符长“success”
也就是说,result的那么属性默认值是success默认的跳转方式是请求转发 dispatcher
常量配置
default.properties文件中定义了struts2框架常用常量
问题:我们怎样可以定义常量
可以在src下创建一个struts.properties配置文件
可以在web.xml文件中配置(常用)
可以直接在struts.xml文件中定义常量(推荐的方法)
我们是在总进行常量配置
注意:后加载的配文件中的常量会将先加载的常量覆盖
6.Struts2的Action详解
struts2中的action,主要是完成业务逻辑操作,action替代在servlet中完成的作用。
Action的学习有两点:
- 如何创建一个struts2的action
- 如何访问一个struts2的action
Action类的创建方式(三种)
创建一个pojo类
pojo(plani Ordinary java object)简单的对象
pojo类就是没有实现任何借口没有继承任何类
优点:无耦合
缺点:所有的功能都要自己完成
创建一个类实现一个Action接口
import com.opensymphony.xwork2.Action;
在Action接口中定义了五个常量 字符串,他们是默认的结果视图
String SUCCESS = "success";正确视图 String NONE = "none";代表null表示什么都不做 String ERROR = "error";错误视图 String INPUT = "input";他是struts2框架中interceptor中发现问题后访问的一葛视图 String LOGIN = "login";他是一个登陆的视图,可以在权限操作中使用 String execute() throws Exception;优点:耦合度低
缺点:还是需要自己来完成功能
创建一个类继承ActiongSupport类
import com.opensymphony.xwork2.ActionSupport;
ActionSupport也实现了Action接口
我们再开发中一般会使用这种方案
优点:具有丰富的功能,例如表单效验 错误信息设置 国际化
缺点:耦合度高
3.action的访问方式
直接通过标签来配置,通过method来指定访问的方法,如果method方法没有默认的就是访问execute方法
简化的antion访问方式,可以使用*通配符来访问
这种方法的缺点:不建议使用过多的*号,它带 来程序阅读障碍,不便于理解
使用*来简化操作方案,它对名称规范必须进行 一个统一
struts2的动态方法调用
localhost:80/struts2-day01/struts2!show
这是struts2提供的动态方法调用
注意:对于struts2的动态方法调用,要想使用我们必须配置一个常量来开启动态方法的调用
struts.enable.DynamicMethodInvocation = false 这表示我们的动态方法调用没有开启
(不建议使用动态方法调用!!!!有漏洞)
7.Struts2框架封装数据
主要解决的问题是在action中如果获取请求参数
主要有两种方式:
属性驱动
直接在action类中提供与请求参数匹配属性,提供get/set方法
在action类中创始一个javaBean,对其提供get/set,在请求时页面要进行修改例如 user.uername user.password 要使用ognl表达式
以上两种方式的优缺点:
第一种比较简单,在实际操作我们需要将action的属性赋值给模型javaBean去做操做
第二种不需要将值赋给jabaBean的过程,因为直接将数据封装到了javaBean中。它要求在页面上必须使用ognl表达式,就存在页面不通用的问题
模型驱动
步骤:
- 让Action类要实现一个指定的接口ModelDriven
- 实例化模型对象(就是要new出来javaBean)
- 重写getModel方法将实例化的模型返回
public class LoginAction2 implements Action,ModelDriven<User> { //模型驱动 private User user = new User(); @Override public User getModel(){ return user; }
对于模型驱动他和属性驱动对比,在实际开发中使用比较多,模型驱动的缺点,他只能对一个模型数据进行封装。
va
public class LoginAction2 implements Action,ModelDriven {
//模型驱动
private User user = new User();
@Override
public User getModel(){
return user;
}
对于模型驱动他和属性驱动对比,在实际开发中使用比较多,模型驱动的缺点,他只能对一个模型数据进行封装。