struts2怎么查版本(好久不见的Struts2大家还记得么)

1.struts2介绍

Struts2和SpringMVC一样,都是基于MVC封装的框架

Struts1和Struts2没有关系。。。有的也只是名称上的相似

Struts2是在xwork的基础上升级来的,想占个名称的便宜

Struts2的核心是过滤器

2.框架搭建

1)导包

拷贝Struts2案例中的jar包

struts2怎么查版本(好久不见的Struts2大家还记得么)(1)

2)配置文件

1.web.xml中配置核心过滤器

参考案例中web.xml的配置

struts2怎么查版本(好久不见的Struts2大家还记得么)(2)

struts2怎么查版本(好久不见的Struts2大家还记得么)(3)

2.struts.xml

拷贝案例中的struts.xml到src目录下

struts2怎么查版本(好久不见的Struts2大家还记得么)(4)

struts2怎么查版本(好久不见的Struts2大家还记得么)(5)

3.部署,启动

struts2怎么查版本(好久不见的Struts2大家还记得么)(6)

解析struts.xml成功,说明Struts2是默认到classpath目录下找struts.xml配置文件解析

4.配置DTD约束

struts2怎么查版本(好久不见的Struts2大家还记得么)(7)

struts2怎么查版本(好久不见的Struts2大家还记得么)(8)

3.入门案例

需求: 浏览器访问/hello,页面跳转到hello.jsp

1)要一个Action(Springmvc中的Controller)来处理/hello请求

struts2怎么查版本(好久不见的Struts2大家还记得么)(9)

2)hello.jsp

3)Action类和请求地址之间的映射关系

struts.xml配置文件中配置一个action

struts2怎么查版本(好久不见的Struts2大家还记得么)(10)

4)浏览器请求/hello

struts2怎么查版本(好久不见的Struts2大家还记得么)(11)

action配置,name属性指向的请求地址,去掉/

struts2怎么查版本(好久不见的Struts2大家还记得么)(12)

重新启动访问,OK

4.请求地址后缀

struts2怎么查版本(好久不见的Struts2大家还记得么)(13)

struts2怎么查版本(好久不见的Struts2大家还记得么)(14)

两个请求地址都可以正常访问服务器,进行页面跳转,Struts会自动截取.action后缀

struts2怎么查版本(好久不见的Struts2大家还记得么)(15)

Struts2默认截取的后缀只有.action

请求地址,可以携带后缀,也可以不带。但是一般来说,请求地址中,肯定会携带后缀,因为框架的过滤器拦截不可能拦截所有的请求(.js,.jsp,.css….),一般拦截.action

如果要支持.do,需要修改默认配置

struts2怎么查版本(好久不见的Struts2大家还记得么)(16)

在struts.xml中修改默认配置

struts2怎么查版本(好久不见的Struts2大家还记得么)(17)

请求:

struts2怎么查版本(好久不见的Struts2大家还记得么)(18)

一般来说不改默认配置,Struts2中的请求地址,就以.action结尾

5.执行流程

1.tomcat启动的时候,加载web.xml,解析,然后实例化Struts2的核心过滤器

2)核心过滤器在初始化的过程,会加载解析配置文件struts.xml,解析所有的标签,将action标签解析放到容器中,key为当前action所属的package的namespace action标签的name属性

struts2怎么查版本(好久不见的Struts2大家还记得么)(19)

3)浏览器请求/hello

4)tomcat接收到浏览器请求,解析应用名称,然后到对应的应用的web.xml中找,没有过滤器、servlet等需要拦截处理这个请求。这时,tomcat发现,核心过滤器需要拦截处理这个请求,tomcat就会把请求丢给核心过滤器

5)核心过滤器根据请求地址,找对应的action配置,然后找到class地址,实例化,反射调用指定方法。

6)方法执行完成会返回字符串,核心过滤器再根据返回字符串找对应的跳转地址,跳转的方式(默认转发),最后做页面跳转

6.struts.xml1)constant标签

修改struts中的默认配置

struts2怎么查版本(好久不见的Struts2大家还记得么)(20)

2)package

package指的是包,struts.xml中可以添加多个package,但是,一般一个配置文件,就只有一个package,对所有的action进行分类管理

属性

name : 分类的包名,或者说package的模块名,一般命名需要见名知意、

struts2怎么查版本(好久不见的Struts2大家还记得么)(21)

namespace : 属于请求地址(url)的组成部分。一般如果有指定name,那么namespace会和name保持一致

struts2怎么查版本(好久不见的Struts2大家还记得么)(22)

那么action的请求地址,需要在action的name属性之前,加上namespace

struts2怎么查版本(好久不见的Struts2大家还记得么)(23)

在同一个namespace中,action的name,不能重复

extends: 继承,值为其他package的name属性,一般来说,自定义的package没有互相继承,只会继承自Struts的默认package,即struts-default,默认。

struts2怎么查版本(好久不见的Struts2大家还记得么)(24)

struts2怎么查版本(好久不见的Struts2大家还记得么)(25)

struts2怎么查版本(好久不见的Struts2大家还记得么)(26)

因为继承自默认的配置,所以struts在加载配置文件的时候,一定是先加载struts-dufault.xml配置文件

3)action

请求地址和处理请求的类,方法之间的映射,以及方法返回值和跳转页面之间的映射

属性

name: 请求地址

class:处理请求的类地址

method: 处理请求的类中的方法名

struts2怎么查版本(好久不见的Struts2大家还记得么)(27)

4)result

方法返回值和跳转页面之间的映射

name:匹配的是方法返回值

标签中的text文本: 跳转的页面

type: 跳转的方式

struts2怎么查版本(好久不见的Struts2大家还记得么)(28)

type默认取值:dispatcher: 转发

chain:转发到其他Action

redirect: 重定向

redirectAction:重定向到其他Action

stream: 一般用于ajax,或者文件下载

使用chain

struts2怎么查版本(好久不见的Struts2大家还记得么)(29)

5)global-results

struts2怎么查版本(好久不见的Struts2大家还记得么)(30)

全局的返回配置

当方法返回值,没有在对应的action中找到相应的result标签,那么会去全局配置中找,只能用于当前的package,或者是继承了当前package的请求。

平级关系的package,不可用

struts2怎么查版本(好久不见的Struts2大家还记得么)(31)

当浏览器请求/resultTest.action时,核心过滤器会拿resultPage 字符串到action标签中找对应的result,发现没有,那么会继续去global-results配置中去匹配

最终的结果,就是浏览器请求/resultTest.action ,页面会跳转到index.jsp

6)include

struts2怎么查版本(好久不见的Struts2大家还记得么)(32)

项目中,action很多,为了分类管理,会整理成N个配置文件,这个时候,一般主配置文件会引入其他的配置文件(当然,也可以在核心过滤器启动的时候,告诉它加载多个配置文件)

路径变化,include也需要指定

struts2怎么查版本(好久不见的Struts2大家还记得么)(33)

7)struts.xml配置文件目录

如果重命名或者是路径有改变,需要在核心过滤器中配置

struts2怎么查版本(好久不见的Struts2大家还记得么)(34)

路径变化,include也需要指定

struts2怎么查版本(好久不见的Struts2大家还记得么)(35)

7.Action定义1)自定义对象

struts2怎么查版本(好久不见的Struts2大家还记得么)(36)

配置使用:

struts2怎么查版本(好久不见的Struts2大家还记得么)(37)

如果配置的时候,没有指定method,那么struts流程??

2)实现Action接口

struts2怎么查版本(好久不见的Struts2大家还记得么)(38)

配置:

struts2怎么查版本(好久不见的Struts2大家还记得么)(39)

在实现了Action接口的HelloAction2中,也还是支持第一种配置方式,自定义方法,配置action中指定method

struts2怎么查版本(好久不见的Struts2大家还记得么)(40)

struts2怎么查版本(好久不见的Struts2大家还记得么)(41)

3)继承ActionSupport类

--推荐

struts2怎么查版本(好久不见的Struts2大家还记得么)(42)

可以指定method,也可以不指定,不指定,默认调用execute方法

struts2怎么查版本(好久不见的Struts2大家还记得么)(43)

ActionSupport类,集成了Struts中的校验框架,如果要使用struts中的校验框架,那么Action就一定高继承ActionSupport

一般来说,使用Struts2,都会有一个BaseAction

BaseAction extends ActionSupport{

private HttpServletrequest request;

private HttpServletResponse response;

private HttpSession session;

}

自定义Action 继承BaseAction

8.访问ServletAPI

struts2怎么查版本(好久不见的Struts2大家还记得么)(44)

BaseAction

struts2怎么查版本(好久不见的Struts2大家还记得么)(45)

子类继承

struts2怎么查版本(好久不见的Struts2大家还记得么)(46)

9.Action动态调用actionName!methodName.action

struts-company.xml

struts2怎么查版本(好久不见的Struts2大家还记得么)(47)

Action配置相似,减少重复的配置,struts提供了actio动态访问,访问的时候动态指定需要调用的method

1)定义公共的action

struts2怎么查版本(好久不见的Struts2大家还记得么)(48)

2)打开动态调用

struts2怎么查版本(好久不见的Struts2大家还记得么)(49)

3)访问

actionName!methodName.action

struts2怎么查版本(好久不见的Struts2大家还记得么)(50)

使用占位符动态调用

struts-company-all.xml 页面请求地址:index.jsp

查询流程:

struts2怎么查版本(好久不见的Struts2大家还记得么)(51)

更新流程,操作之后,需要转发到其他的action

struts2怎么查版本(好久不见的Struts2大家还记得么)(52)

10.前后台传参,数据传递1)jspAction,传参a.简单类型String,int

定义全局变量,以及框架调用赋值的set方法

struts2怎么查版本(好久不见的Struts2大家还记得么)(53)

b.自定义实体类

定义全局变量,提供set方法

struts2怎么查版本(好久不见的Struts2大家还记得么)(54)

自定义实体类,需要同时定义get/set方法,只有set不行,框架在赋值的时候,需要调用Action的getCompany方法获取对象

struts2怎么查版本(好久不见的Struts2大家还记得么)(55)

方法中直接使用company变量

struts2怎么查版本(好久不见的Struts2大家还记得么)(56)

jsp中传参,name=Action中的全局变量名.属性名

struts2怎么查版本(好久不见的Struts2大家还记得么)(57)

c.包装类

自定义对象中含有自定义对象。也是使用导航符 属性名.属性名.属性名

d.使用ModelDriven

struts2怎么查版本(好久不见的Struts2大家还记得么)(58)

1.实现ModelDriven接口,指定类型

struts2怎么查版本(好久不见的Struts2大家还记得么)(59)

2.提供getModel方法,方法中对company进行实例化

struts2怎么查版本(好久不见的Struts2大家还记得么)(60)

3.jsp页面,控件的name属性直接匹配实体类的属性名

struts2怎么查版本(好久不见的Struts2大家还记得么)(61)

2)Actionjsp 数据传递

request.setAttribute,session.setAttribute

Springmvc ,使用ModelAndView,ModelMap

Struts数据传递相对来说,更简单一点。只要Action中的全局变量有值,并且提供了get方法,跳转的页面就可以使用el取值-----》针对的是转发的跳转方式。

如果是重定向,需要使用session进行传值

struts2怎么查版本(好久不见的Struts2大家还记得么)(62)

方法中赋值

struts2怎么查版本(好久不见的Struts2大家还记得么)(63)

jsp中

struts2怎么查版本(好久不见的Struts2大家还记得么)(64)

或者赋值不是方法中,是前台提交的参数,后面跳转的页面,也可以el取值

11.校验

1)Action,需要继承ActionSupport

struts2怎么查版本(好久不见的Struts2大家还记得么)(65)

2)重写validate方法

struts2怎么查版本(好久不见的Struts2大家还记得么)(66)

此方法,在所有的方法被调用之前

struts2怎么查版本(好久不见的Struts2大家还记得么)(67)

在validate方法中,对参数做校验

struts2怎么查版本(好久不见的Struts2大家还记得么)(68)

struts只要发现你调用过addFieldError,也就是说,流程中添加过错误信息,那么,流程到validate就结束,不会继续调用方法,不继续调用方法,就拿不到方法的返回值,struts提供了默认返回值input,所以result标签需要另外配置

struts2怎么查版本(好久不见的Struts2大家还记得么)(69)

jsp页面拿错误信息,使用struts标签库

struts2怎么查版本(好久不见的Struts2大家还记得么)(70)

struts2怎么查版本(好久不见的Struts2大家还记得么)(71)

针对某个特定的方法做的校验, 方法名= validate 需要针对的方法的名称,第一个字母大写

struts2怎么查版本(好久不见的Struts2大家还记得么)(72)

struts2怎么查版本(好久不见的Struts2大家还记得么)(73)

s标签需要struts框架解析返回。

struts2怎么查版本(好久不见的Struts2大家还记得么)(74)

12.struts2 spring mybatis

1)导包

1.struts所有的包。拷贝teacher_struts2下的所有包

2.spring mybatis所有的包。拷贝teacher_spring_mybatis04版本下的包

3.struts和spring的集成包

struts2怎么查版本(好久不见的Struts2大家还记得么)(75)

2)配置

1.struts.xml

struts2怎么查版本(好久不见的Struts2大家还记得么)(76)

2.applicationContext.xml

struts2怎么查版本(好久不见的Struts2大家还记得么)(77)

3.sqlMapConfig.xml

struts2怎么查版本(好久不见的Struts2大家还记得么)(78)

4.log4j.properties

5.web.xml

struts2的核心过滤器

struts2怎么查版本(好久不见的Struts2大家还记得么)(79)

spring的监听配置

struts2怎么查版本(好久不见的Struts2大家还记得么)(80)

mapper action配置版本

根据企业编码查询企业信息

1.Company.java,company.xml,CompanyMapper.java,

CompanyServiceImpl.java,CompanyService.java

CompanyAction.java

index.jsp,companyDetail.jsp

2. company.xml需要注册到sqlMapConfig.xml中,还需要配置别名

3. applicationContext.xml中需要配置bean

service使用注解

struts2怎么查版本(好久不见的Struts2大家还记得么)(81)

action使用bean配置

struts2怎么查版本(好久不见的Struts2大家还记得么)(82)

action需要配置成多例

4.struts.xml中的action配置

action中的class属性值为bean节点的ID值

struts2怎么查版本(好久不见的Struts2大家还记得么)(83)

5.index.jsp确认请求地址

struts2怎么查版本(好久不见的Struts2大家还记得么)(84)

mapper action注解版本

将Action的bean配置,使用注解

struts2怎么查版本(好久不见的Struts2大家还记得么)(85)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页