Struts2概述-2.Struts2详解

一、 Struts2框架执行流程

1. Struts2源码导入


对于struts2框架它的源代码我们主要使用三部分

1.      struts2核心部分源代码  org.apache.struts2xx

src\core\src\main\java

2.      struts2的xwork核心部分源代码

src\xwork-core\src\main\java\com\opensymphony\xwork2

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

注意:断网去配置,必要时拔网线,配置过后重启eclipse

配置完DTD可能会导致Struts.xml第一行不好使,但是不影响执行,重新配置几次即可

注意版本要对应,如果你可以上网,那么会自动缓存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(struts框架所用常量)

2.Struts-default.xml(Struts框架默认的配置文件)

3.Struts-plugin.xml(Struts框架插件配置文件)

4.Strtus.xml(Struts框架用户自定义配置文件,位置在src文件夹下)

5.web.xml

 

 

2. struts.xml文件配置介绍

2.1. package配置

1.name属性  作用:定义一个包的名称,它必须唯一。

2.namespace属性 作用:主要是与action标签的name属性联合使用来确定一个action      的访问路径,/aa/test访问,如果访问不到则找/test,找了两次,第一次为/aa/test,第二次为/test,Struts2的查找机制,全路径匹配不到则匹配跟路径.

3.extends属性作用:指定继承自哪个包。一般值是strtus-default
                   strtus-default包是在strtus-default.xml文件中声明的。

4.abstruct属性它代表当前包是一个抽象的,主要是用于被继承

2.2. action配置

1.name属性作用:主要是与package的namespace联合使用来确定一个action的访问路 径,不写则默认执行success

2.class属性  作用:用于指示当前的action类,如果不写则默认执行ActionSupport

3.method属性  作用:用于指示当前的action类中的哪个方法执行

2.3. result配置

它主要是用于指示结果视图

1.name属性作用是与action类的method方法的返回值进行匹配,来确定跳转路径

2.type属性作用是用于指定跳转方式,默认是转发

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文件中定义常量 (推荐),constant标签用来配置常量,

4.如果三种都配置了则web.xml会执行

<constantname="struts.devMode"value="true"></constant>

         <!--这项是开发者模式,配置这项后,它会提供更加详细报错信息,以及在struts.xml文件修改后不在需要重启服务器,项目上线之后一定要把开发者模式关闭-->


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

 

三、 Struts2的Action详解

Struts2中的action,主要是完成业务逻辑操作。Action替代在servlet中完成的作用。

Action的学习主要有两点

1.      如何创建一个struts2的action

2.      如果访问一个struts2的action

 

1. Action类创建方式(三种)

1. 1     创建一个pojo类

Pojo(planiOrdinary java object)简单的java对象

Pojo类就是没有实现任何接口没有继承任何类

优点:无耦合

缺点:所有的功能都要自己完成

异步请求比较发达,所以这种方法在开发当中也会被使用

 

1.2    创建一个类实现一个Action接口

com.opensymphony.xwork2.Action


在Action接口中定义了五个常量,一个execute方法

五个常量:它们是默认的五个结果视图<resultname=””>:

ERROR : 错误视图

INPUT: 它是struts2框架中interceptor中发现问题后会访问的一个视图

LOGIN:它是一个登录视图,可以在权限操作中使用

NONE:它代表的是null,什么都不做(也不会做跳转操作)

SUCCESS:这是一个成功视图

优点:耦合度低

缺点:还是需要自己来完成功能

 

1.3     创建一个类继承ActionSupport类

com.opensymphony.xwork2.ActionSupport

ActionSupport类也实现了Action接口。

我们在开发中一般会使用这种方案:

优点:具有丰富的功能,例如  表单校验 错误信息设置  国际化,文件上传

缺点:耦合度高

还有一种pojo这种方式在开发中也是比较流行的,一般来说要么使用pojo,要么使用actionsupport这种方式

2. action的访问方式

1.直接通过<action>标签来配置,通过method来指定访问的方法,如果method没有,默认访问的是execute方法。

2.简化的action访问方式,可以使用*通配符来访问。

这种方式的缺点:不建议使用过多的*号,它带来程序阅读障碍,不便于理解

使用*来简化操作方案,它对名称规范必须进行一个统一。



3. 扩展--动态方法调用


这是strtus2提供的动态方法调用。

 

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

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


个人不建议使用动态方法调用,Struts2有个关于动态方法调用的漏洞.

四、 Struts2框架封装数据

主要解决的问题:是在action中如果获取请求参数

 

主要有两种方式:

1.属性驱动

a.直接在action类中提供与请求参数匹配属性,提供get/set方法

b.在action类中创始一个javaBean,对其提供get/set ,在请求时页面上要进行修改,    例如 user.username  user.password,要使用ognl表达式

以上两种方式的优缺点:

第一种比较简单,在实际操作我们需要将action的属性在赋值给模型(javaBean)        去操作
         第二种:不需要在直接将值给javaBean过程,因为直接将数据封装到了javaBean        中。它要求在页面上必须使用ognl表达式,就存在页面不通用问题。

 

2.模型驱动

步骤:

1.让Action类要实现一个指定接口ModelDriven

2.实例化模型对象(就是要new出来javaBean)

重写getModel方法将实例化的模型返回。


对于模型驱动它与属性驱动对比,在实际开发中使用比较多,模型驱动缺点,它只能对         一个模型数据进行封装。

两个驱动同时存在,且name相同,不能同时使用,属性驱动没有值,模型驱动有值,当我们使用属性驱动接受参数时,并不需要提供给方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值