Struts2基础知识整理

Struts2

1.开发步骤:

1.在web.xml文件中定义核心Filter来拦截用户请求
		由于web应用是基于请求/响应架构的应用,因此MVC Web框架,都需要在web.xml中配置该框架的核心Servlet或filter
		这样才能让该框架介入Web应用中。
	2.如果以post方式提交请求,则定义包含表单数据的jip页面,若以get方式方发送请求,则不需要定义
	3.定义处理用户请求的Action类
		拦截所有用户请求,处理请求的通用代码由核心控制器完成
		实际业务控制(如调用model,返回处理结果)由Action(业务控制器)处理
	4.配置Action
		    a.包和命名空间
		<package name="".../>属性:
			name:必选属性
			aextends:
			namespace:主要为了处理同一个web中包含同名Action的情况
			abstract:
		配置文件从上到下处理,所以父包应该在子包前面定义
	     	b.Action配置
		<action name="名字即Action所处理的URL" class="默认为ActionSupport类" method="默认execute"/>
	5.配置处理结果和物理视图资源之间对应的关系
		<result name="默认为SUCCESS"></result>
	6.编辑视图资源
此时,基本完成Struts2处理流程开发,即执行一次完整的请求->响应过程

2.Struts2的常规配置
主要配置Action和请求之间对应关系,并配置逻辑视图名和物理视图资源之间的对应关系
struts.xml还可以额外功能:Bean配置,常量配置等等

常量配置:
			需要指定两个属性:常量name和常量value
			Struts2属性:Struts2常量相当于对struts2应用整体起作用的属性
			使用struts.properties文件来管理常量
			Properties文件:
				包含了系列的key-value对,每个key是一个struts2常量,value为常量值
			配置方式:
				1.struts.properties文件配置
					
				2.struts.xml文件配置(推荐方式)
					<constant name="属性名" value="属性值” />
				3.通过web应用的web.xml文件
					<init-param>
						<param-name>属性名</param-name>
						<param-value>属性值</param-value>
					</init-param>
			Struts2框架搜索常量加载顺序:
				struts-default.xml>struts-plugin.xml>struts.xml>struts.properties>web.xml
				如果在多个文件中配置了同一个struts2常量,后面配置的常量值覆盖之前的

3.Action
Action只是Struts2控制器的一部分,不能直接生成对浏览器的响应
负责处理请求,为jsp页面提供显示数据

实现Action(业务控制器)
	1.通常直接使用Action来封装http请求参数
		因此,Action类中应包含与请求参数对应的实例变量,并提供getter&setter方法
	2.通常包含一个无参数的execute()方法,用来处理用户请求的逻辑控制方法
	3.Action类的实例变量,不仅可以用于封装请求参数,还可以用于封装处理结果

	ActionSupport类:
		是一个默认Action实现类,提供许多默认实现的方法
		若配置Action类没有指定class属性,系统默认使用
		ActionSupport类作为处理类
	
	Action访问Servlet API:
		提供一个ActionContext类来访问ServletAPI
			getContext():获取系统的ActionContext实例
	Action直接访问Servlet API:
		1.提供如下接口来访问
			ServletContextAware实现该接口的action可以直接访问ServletContext实例
			ServletRequestAware实现该接口的action可以直接访问HttpServletRequest实例
			ServletResponseAware实现该接口的action可以直接访问HttpServletResponse实例
		2.或使用ServletActionContext类

Action基本配置
	使用Action的动态方法调用:
	允许一个Action内包含多个控制处理逻辑
	1.在struts.xml开启系统的动态方法调用
		通过设置struts.enable.DynamicMethodInvocation常量值为true完成
	2.指定表单action属性
		action="actionName!methodName"或...
	3,在struts.xml配置Action时指定<allowed-methods../>子元素
	
		允许在指定name属性时使用”*“(代表一个或多个字符串),
		接下来就可以在class,method属性及<result../>子元素中
		使用{N}的形式来代表前面第N个”*”所匹配的子串

对于动态调用方法,其方法声明与系统默认execute方法
应只有方法名不同,形参列表,返回值类型都应该完全相同

	配置默认Action
		当用户请求找不到对应的Action时,系统默认的Action即将处理用户请求
		配置方法:
			<package name="">
				<default-action-ref name="默认action名" />
				<action name="默认action名" class="">
					<result.../>
				</action>
			</package>
	
	配置Action默认处理类
		系统默认使用ActionSupport作为Action处理类
		配置action的默认处理类
			<default-class-ref class="默认类名"/>

4.配置处理结果
Action处理完用户请求后,返回一个普通的字符串,即为一个逻辑视图名
Struts2通过配置逻辑视图名和物理视图之间的映射关系,系统收到action返回
的逻辑视图名,就会把对应的物理视图返回给浏览者
配置结果
局部结果:将<result…/>作为<action…/>子元素配置
全局结果:对所有action有效
将<result…/>作为<global-results…/>子元素配置
局部结果覆盖全局结果

	<result../>属性:
		name:所匹配逻辑视图名
		type:该属性指定结果类型
			Struts2支持结果类型:
				dispatcher结果类型:默认结果类型,指定使用jsp作为视图的结果类型
				chain结果类型:action链式处理的结果类型
				freemarker,httpheader,redirect,redirectAction等等

Action属性值决定物理视图资源
	配置<result../>时,不仅可以使用${N}表达式形式来指定视图资源,
	还可以使用${属性名}里的属性名就是对应Action实例里的属性
	还可以完全使用OGNL表达式,即:
		${属性名.属性名.属性名...}

	OGNL语言
	Object-Graph Navigation Language,可以方便操作对象属性的开源表达式语言(EL)
	Struts2框架默认使用OGNL作为默认表达式语言
	三大要素:
		表达式:做什么
		根对象:对谁操作
		Context对象:是一个map类型对象 在表达式访问Context对象:"#对象名称"

使用PreResultListener
	监听器接口,通过ActionInvocation的addPreResultListener()方法完成,
	在action完成控制处理后,系统转入实际的物理视图之前回调该监听器beforeResult()方法,
	一旦为拦截器添加了PreResultListener监听器,该监听器会对拦截器所拦截的所有Action都起作用

5.配置Struts2的异常处理
通过声明的方式管理异常
使用Struts2的异常处理机制,必须打开Struts2的异常映射功能,开启异常映射功能需要一个拦截器
struts-default.xml配置文件中开启了Struts2的异常映射

	1.声明异常捕捉
	


1.在struts.xml中配置<exception-mapping.../>元素完成,需要指定以下两个属性:
		exception:指定该异常所设置的异常类型
		result:指定action出现异常时,返回result属性值对应的逻辑视图名
	2.异常映射种类
		局部异常映射:将<exception-mapping../>元素作为<action../>元素子元素配置
		全局异常映射:将<exception-mapping../>元素作为<global-exception-mapping>元素子元素配置
		Action内局部异常映射会覆盖全局异常映射

	
2.输出异常信息
		<s:property value="exception.message"/>:输出异常本身
		<s:property value="exceptionStack"/>:输出异常堆栈信息

6.Convention插件与"约定”支持
Convention插件主要解决Action管理,Result管理等常见配置,而不是完全舍弃struts.xml
约定优于配置
1.Action的搜索和映射约定
1.安装Convention插件
将Struts2项目下struts2-convention-plugin-…jar文件复制到WEB-INF\l ib路径下
Convention插件把两种java类当作Action处理:
1.所有实现了com.opensymphony.xwork2.Action的java类
2.所有类名以Action结尾的java类
2.找到Action后,插件按约定部署Ation
actions,action,struts,struts2包会映射成为根命名空间
这些包下子包被被映射成对应的命名空间
Action的name属性(也就是Action所要处理的URL)
根据该Action类名映射遵循规则:
1.若Action类包含Action后缀,将后缀去掉,否则不做任何处理
2.将Action类名的驼峰写法转换成中划线写法
eg:LoginAction映射Action的name属性为login
GetBooks映射的Action的name属性为get-books
AddEmployeeAction映射的Action的name属性为add-employee
3.采用Convention插件之后,Action类的代码依旧不需要任何额外变化

2.按约定映射Result	
	默认情况下,Convention总会到Web应用的WEB-INF/content路径下定位物理资源,
	定位资源约定:actionName+resultCode+suffix。当某个逻辑视图找不到对应的
	资源时,Convention会自动视图使用actionName+suffix作为物理视图资源
	
	Config Browser插件:
	有利于开发者调试,使用该插件可以更清楚看出Struts2应用下部署哪些Action
	,以及其详情的映射信息。
	安装:Struts2 lib下struts2-config-browser-plugin-jar复制到web应用WEB-INF\lib下
3.Action链的约定
	一个Action处理结束后进入另一个Action形成Action链
通过Convention遵守三个约定:
			1.第一个Action返回逻辑视图名字符串没有对应的视图资源
			2.第二个Action与第一个Action处于同一包下
			3.第二个Action映射的URL为:firstactionName+resultcode
4.自动重加载映射
	配置应用处于开发者模式
	<constant name="struts.devMode" value="true"/>
	配置Convention插件自动重加载映射
	<constant name="struts.convention.classes.reload" value="true"/>
5.convention的常量
6.Convention插件相关注解
	还允许使用注解管理Action和Result的配置,从而覆盖Convention
	的约定

7.Struts2的国际化
步骤:
1.系统加载国际化文件
自动加载:Action范围的国际化资源文件,包范围国际化资源文件由系统自动加载
手动加载:jsp范围的国际化资源文件,全局范围国际化资源文件,分别使用标签
<s:il8n…/>,配置常量的方式手动加载

2.输出国际化
	在视图页面上输出国际化消息,需要使用struts2的标签库
	在action类中输出国际化消息,需要使用actionSupport的getText()方法完成

8.Struts2的标签库
1.概述
Struts2标签库不依赖于任何表现层技术,大部分标签可以在所有表现层技术中使用
所有标签定义在uri为“/sruts-tags”下,简单分类:
UI(用户界面)标签:生成html元素标签
表单标签:生成html的form元素及普通表单元素的标签
非表单标签:生成页面上的树,tab页等标签
非UI标签:数据访问,逻辑控制标签
流程控制标签:实现分支循环等流程控制的标签
数据访问标签:包含用于输出Value,完成国际化等功能标签
2.使用Struts2标签
自定义标签开发,struts2提供标签处理类,也提供了标签库定义文件
struts2-core-.jar下META-INF路径下找到struts-tags.tld(标签库定义文件)
导入标签库,在jsp中导入Struts2标签库:
<%@ taglib prefix=“s” uri="/struts-tags"%>

9.Struts2的类型转换
http请求都是字符串类型,java是强类型语言,因此mvc框架必须转换这些字符串参数
1.Struts2内建的类型转换器,可以自动完成大多数常用类型转换
2.Struts2的类型转换可以基于OGNL表达式,以另一种简单方式将请求参数转换成复合类型
3.允许开发者通过局部类型转换文件(*.properties)来指定集合元素类型
4.实现自定义类型转换器需要重写DefaultTypeConverter类的convertValue()方法
5.注册类型转换器

10.struts2的输入校验
11.Struts2控制文件上传
12.Struts2控制文件下载
13.Struts2拦截器机制
14.Struts2的Ajax支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值