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.xml1)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.访问ServletAPIBaseAction
子类继续
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.利用ModelDriven1.实现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配置,利用表明