好久不见的Struts2大家还记得么?一起再回顾一下吧

1.Struts2介绍

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

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

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

Struts2的核心是过滤器

2.框架搭建

1)导包

拷贝Struts2案例中的jar包

2)配置文件

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

参考案例中web.xml的配置

2.struts.xml

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

3.部署,启动

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

4.配置DTD约束

3.入门案例

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

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

2)hello.jsp

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

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

4)浏览器请求/hello

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

重新启动访问,OK

4.请求地址后缀

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

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

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

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

在struts.xml中修改默认配置

请求:

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

5.执行流程

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

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

3)浏览器请求/hello

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

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

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

6.struts.xml

1)constant标签

修改struts中的默认配置

2)package

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

属性

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

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

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

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

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

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

3)action

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

属性

name: 请求地址

class:处理请求的类地址

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

4)result

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

name:匹配的是方法返回值

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

type: 跳转的方式

type默认取值:dispatcher: 转发

chain:转发到其他Action

redirect: 重定向

redirectAction:重定向到其他Action

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

使用chain

5)global-results

全局的返回配置

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

平级关系的package,不可用

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

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

6)include

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

路径变化,include也需要指定

7)struts.xml配置文件目录

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

路径变化,include也需要指定

7.Action定义

1)自定义对象

配置使用:

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

2)实现Action接口

配置:

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

3)继承ActionSupport类

--推荐

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

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

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

BaseAction extends ActionSupport{

private HttpServletRequest request;

private HttpServletResponse response;

private HttpSession session;

}

自定义Action 继承BaseAction

8.访问ServletAPI

BaseAction

子类继承

9.Action动态调用

actionName!methodName.action

struts-company.xml

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

1)定义公共的action

2)打开动态调用

3)访问

actionName!methodName.action

使用占位符动态调用

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

查询流程:

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

10.前后台传参,数据传递

1)jspAction,传参

a.简单类型String,int

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

b.自定义实体类

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

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

方法中直接使用company变量

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

c.包装类

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

d.使用ModelDriven

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

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

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

2)Actionjsp 数据传递

request.setAttribute,session.setAttribute

Springmvc ,使用ModelAndView,ModelMap

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

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

方法中赋值

jsp中

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

11.校验

1)Action,需要继承ActionSupport

2)重写validate方法

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

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

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

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

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

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

12.struts2+spring+mybatis

1)导包

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

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

3.struts和spring的集成包

2)配置

1.struts.xml

2.applicationContext.xml

3.sqlMapConfig.xml

4.log4j.properties

5.web.xml

struts2的核心过滤器

spring的监听配置

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使用注解

action使用bean配置

action需要配置成多例

4.struts.xml中的action配置

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

5.index.jsp确认请求地址

mapper + action注解版本

将Action的bean配置,使用注解

展开阅读全文

页面更新:2024-03-03

标签:赋值   后缀   一下吧   过滤器   框架   属性   核心   标签   页面   地址   方法

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top