Struts2的使用步骤
手动导入:
1. 创建Web项目。
2. 导入Strutrs的几个必须包(7个jar)。
3. 在src目录下,创建struts.xml配置文件(名字和路径都不能改)。
4. 在web.xml配置文件中,添加Struts的支持(配置一个filter过滤器)。
自动导入(Myeclipse8.0以上的版本):
类型转换
1. Struts2中类型转换分为两种:
a) 手动(自定义)转换器
b) 自动转换器
2. 手动(自定义)转换器(针对特殊属性)
a) 在action的类中,必须继承ActionSupport类。
b) 定义转换器的类,继承DefaultTypeConvert,重写convertValue()方法。
c) 创建配置文件(注意:1.文件名必须是:Action的类名-conversion.properties ; 2. 必须将配置文件存放在Action所在的包中。)
3. 自动转换器(常用的方式)
|
基本数据类型+String类型都是可以自动转换。 对象类型自动转换:在input中使用:对象名.属性名 |
Struts2的输入验证
一.验证分类:
1. 服务器端验证(Java代码来完成验证(Struts的内置验证框架,可以完成服务器端验证))。
2. 客户端验证(js验证——在客户端执行,执行的时候依赖与客户度(手动js验证,jquery验证框架进行验证))
二.Struts的内置验证框架:
Struts2中验证有两种方式:
1. 手动验证。
2. 配置验证框架,自动验证。
三.内置验证框架使用步骤:
1. 需要验证的Action必须继承自ActionSupport类。
2. 创建验证配置文件。
要求:a) 配置文件必须和action在同一目录。
b) 文件名的格式必须是:Action类名-validation.xml(验证Action中的所有方法)
Action类名-访问Action的名字-validation.xml(只会验证Action中指定的方法)
3. 查看内置验证器:xwork-XXXXX.jar目录中(找到default.xml配置文件)
特别需要注意:
1. 使用了验证器之后,如果验证失败;必须配置<result name=”input”></result>表示验证失败之后,跳转的页面。
2. 如果jsp页面中使用了,Struts的标签;那么必须让这个jsp页面必须经过struts的核心过滤器,进行过滤;否则页面不能正常解析struts的标签。(web.xml 中配置过滤器,过滤 *.jsp)
3. 基本数据类型,不能使用Struts的内置验证,建议使用包装类。
四.手动验证步骤:
1. 继承ActionSupport,重写validate()方法。
在执行Action中具体的方法之前,会先执行validate()方法;如果有错误,则返回input指定的页面。(有错误:super.addFiledError())
手动验证总结:
1. 可以在实体中的setXxx()方法进行控制。
2. 在validate()方法中进行验证。
深入Struts2
Struts2运行原理:
请求 --- >自定义过滤器----> filterdispatcher ------> ActionProxy(代理,读取struts.xml的配置文件)---->ActionInvocation(action的调用者,调用具体的Action;在调用之前经过一系列的拦截器)——>执行完Action之后,跳转到对应的页面。
注意:struts中的所有编码处理都是i18n拦截器处理,所有的表单数据处理都是在系统默认拦截器中获取。
Struts.xml配置文件详解:
|
<constant name="" value=""></constant> |
|
<!-- 常量:系统默认配置的量(名字不可改) --> <!-- 常用的常量:struts.custome.i18n.resources(国际化常量) --> <!-- 常用的常量:struts.i18n.encoding(编码方式常量,系统默认采用utf-8编码) --> |
动态方法调用:
注意:1. 在配置<action>的时候,不用指定具体的方法(不用写method=“XXX”);
2. 在请求action的路径指定需要执行的方法名即可。(格式:action名!方法名.action)
使用通配符进行模糊匹配:
|
<action name="*Calc" class="com.zuxia.action.TestAction" method="{1}" > <result name=”名字”>{1}.jsp</result> </action> 注意:使用“*”号表示模糊匹配的值。{1}表示占位符,在运行的过程中,被通配符所代替。 在这个Action的配置文件中,都可以使用{1}占位。 |
Struts2对返回结果页面进行配置:
|
<result name=”方法的返回值” type=””>页面路径</result> |
|
type=”” 表示页面跳转的方式,默认表示内部跳转。 type=”redirect” 表示页面使用外部跳转,注意外部跳转request中的数据将会丢失。 type=”redirectAction” 表示跳转的页面将会是一个Action。 <result type=” redirectAction”> <param name=”actionName”>action的名字</param> <param name=”namespace”>命名空间的名字</param> </result> |
|
原样输出指定的页面: <result name="ok" type="plainText"> <param name="location">test.jsp</param> <param name="charSet">utf-8</param> </result> |
全局结果配置:
|
<!-- 配置全局的结果,跳转页面 --> <global-results> <result name="error">test.jsp</result> <result name="ok">index.jsp</result> </global-results> 注意:必须在action的最前面。 |
|
全局异常处理: <global-exception-mappings> <exception-mapping result="返回的结果名" exception="异常类型"></exception-mapping> </global-exception-mappings> 在异常处理页面,显示异常的信息: <%@ taglib uri="/struts-tags" prefix="s" %> 异常的信息: <s:property value="exceptionStack"/> |
|
<interceptors> <interceptor name="firstinter" class="com.zuxia.interceptor.FristInterceptor" /> <interceptor-stack name="testStack"> <interceptor-ref name="firstinter" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> 在actin中调用使用如下方式: <action …………> <interceptor-ref name="testStack" /> </action> |

















