Struts2各分类流程与Struts1区别.docx
- 文档编号:1892690
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:35
- 大小:114.13KB
Struts2各分类流程与Struts1区别.docx
《Struts2各分类流程与Struts1区别.docx》由会员分享,可在线阅读,更多相关《Struts2各分类流程与Struts1区别.docx(35页珍藏版)》请在冰点文库上搜索。
Struts2各分类流程与Struts1区别
Struts2各分类流程、与Struts1区别
1、类型转换
下面就类型转换的一些基本内容和相关的流程进行分析
1。
构建项目
这个也不用多说,大家都知道,我学习STRUTS2相关的项目文件都放在一个工作区下(workspace),这样便于管理
,同时我觉得很好的一点就是能够创建一个公用的用户库,这样创建一个项目时可以导入这个用户库即可(目前需
要用到的几个JAR包分别是struts-core.jar,ognl.jar,xwork.jar,freemarker.jar,common-logging.jar,创建一个
用户库,将他们加入即可,以后每次项目中导入该用户库即可,这样比较方便
2。
编写web.xml文件
xmlversion="1.0"encoding="UTF-8"?
>
xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation=" org.apache.struts2.dispatcher.FilterDispatcher 3,编写JSP页面input.jsp formaction="PointConverter"method="post"> textfieldname="point"label="point"/> textfieldname="age"label="age"/> textfieldname="username"label="username"/> textfieldname="date"label="birthday"/> submitlabel="submit"/> form> 这里使用了STRUTS2的标签库,故需要在JSP页面中指定<%@taglibprefix="s"uri="/struts-tags"%> 页面中主要是提示用户输入各个值,其中Point点需要用户用逗号隔开两个坐标值 3。 创建相应的POJO对象 类Point packagecom.yxy.bean; publicclassPoint{ privateintx; privateinty; publicintgetX(){ returnx; } publicvoidsetX(intx){ this.x=x; } publicintgetY(){ returny; } publicvoidsetY(inty){ this.y=y; } publicStringtoString(){ return"x="+x+"y="+y; } } 这里重写了Point类的TOSTIRNG方法,主要是在后面的一个事例中要用到 接着我们要创建action来处理用户的输入数据 4创建action privatePointpoint; privateintage; privateStringusername; privateDatedate; publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicDategetDate(){ returndate; } publicvoidsetDate(Datedate){ this.date=date; } publicPointgetPoint(){ returnpoint; } publicvoidsetPoint(Pointpoint){ this.point=point; } publicStringexecute()throwsException{ returnSUCCESS; 这里Action最好是继承ActionSupport类publicclassPointConverterActionextendsActionSupport 因为ActionSupport本身已经实现许多我们经常要实现的功能,这样可以给我们省很多事情,有时只需简单的覆盖它 的一些方法就可以实现相应的功能 5,创建类型装换器 我们可以通过查看struts2的api获得以下信息 java。 lang。 object |---ognl。 DefaultTypeConverter |--org.apache.struts2.util.StrutsTypeConverter 最原始的的转换器需要实现TypeConverter 而ognl下的defaulttypeconverter已经给我们实现了这个接口,而struts2又提供给了我们一个更加简单的实现类 StrutsTypeConveter 所以我们有两种基本的方法编写类型转换器 1.继承DefaultTypeConverter类 2。 继承StrutsTypeConverter类 下面分别给出两种方法的实现 1. packagecom.yxy.converter; importjava.util.Map; importcom.yxy.bean.Point; importognl.DefaultTypeConverter; publicclassPointConverterextendsDefaultTypeConverter{ publicObjectconvertValue(Mapcontext,Objectvalue,ClasstoType){ if(Point.class==toType){ Pointpoint=newPoint(); String[]paramValue=(String[])value; String[]pointValue=paramValue[0].split(","); intx=Integer.parseInt(pointValue[0]); inty=Integer.parseInt(pointValue[1]); point.setX(x); point.setY(y); returnpoint; } if(String.class==toType){ Pointpoint=(Point)value; intx=point.getX(); inty=point.getY(); Stringresult="[x="+x+",y="+y+"]"; returnresult; } returnnull; } } 2. packagecom.yxy.converter; importjava.util.Map; importorg.apache.struts2.util.StrutsTypeConverter; importcom.yxy.bean.Point; publicclassPointConverter2extendsStrutsTypeConverter{ publicObjectconvertFromString(Mapcontext,String[]values,ClasstoClass){ Pointpoint=newPoint(); String[]paramValues=values[0].split(","); intx=Integer.parseInt(paramValues[0]); inty=Integer.parseInt(paramValues[0]); point.setX(x); point.setY(y); returnpoint; } publicStringconvertToString(Mapcontext,Objecto){ Pointpoint=(Point)o; intx=point.getX(); inty=point.getY(); Stringresult="[x="+x+",y="+y+"]"; returnresult; } } 这两个方法可以实现双向的转换,即从用户端到服务器端和服务器端到用户端,其实很明显也是需要这样设计的 6,编写属性文件 现在已经编写好了相应的类型转换器,我们需要将利用属性文件使用它 在action的同一个目录下面放置属性配置文件,命名规则是***-conversion。 properties,其中***为action的名字 ,后面的对于所有局部类型转换器都一样(关于局部和全局稍后再讲) 在属性文件里面编写下面一行代码,其中point指定的是action中需要被转换的属性名,后面很明显表示转换器所在 的完整类 point=com.yxy.converter.PointConverter 这里强调主要是考虑到与后面全局类型转换器进行编写上的比较 7,编写struts。 xml文件 因为所有应用的业务文件都已经编写完了,这时我们需要将所有的流程进行控制,这样就需要用到struts.xml, xmlversion="1.0"encoding="UTF-8"? > DOCTYPEstrutsPUBLIC "-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" "http: //struts.apache.org/dtds/struts-2.0.dtd"> 代码如上,这里定义了返回页面,对应于相应的返回字符串 8,编写输出页面output。 jsp 转换后的信息需要输出, point: propertyvalue="point"/> age: propertyvalue="age"/> username: propertyvalue="username"/> birthday: propertyvalue="date"/> 这样,所有的工作就完成了,呵呵 补充: 对于全局类型转换配置文件: 命名规则: xwork-conversion.properties 内容: com.yxy.bean.Point=com.yxy.converter.PointConverter2 其中前面表示在应用中需要转换的类,在局部类型转换中表示的是某个action中需要被转换的属性,注意比较, 后面表示完成这个类类型转换的类,同局部类型转换一样 Struts2学习笔记 ******类型转换: ****** 一.在JSP页面定义一个表单,输入将来要在服务器转化为自定义类的数据。 二.局部的类型转换: 在PojoAction.java类里创建一个或多个自定义的类变量。 并生成get,set方法。 在PojoAction.java类里Struts2执行execute()方法时会跟据JSP页面表单里的name="XXX"属性去匹配 PojoAction.java类里的get,set方法后的名字来给相应的属性赋值。 如: name="username",匹配: setUsername (Stringusername)orgetUsername()方法。 注: 在调用set,get方法之前Struts2会去执行类型转换。 类型转换时 Struts2会去匹配有没有息定义的类型转换器。 单个类型转换时需要三个文件: PojoAction.java类、PojoAction- conversion.preporties文件(1.命名要像这样。 2.要与PojoAction.java类在同一个包内。 3.内容 XXX=com.XXX.XXX.PojoConverter类型转换器名)、PojoConverter.java类型转换器。 PojoConverter.java类型转换器的编写: 可以继承DefaultTypeConverter这个类。 @override重写public ObjectConvertValue(Mapcontext,Objectvalue,ClasstoType){}这个方法。 其中有简化的三个参数,其意分 别为: Mapcontext: 应用的上下文。 Objectvalue: 得到的request.getParameters的一个数组。 ClasstoType: 数据 类型,是将要转换成什么类型。 一般有两种情况: 1.从if(String.class==toString};2.从if(Object.class== toType){}; 在JSP里Struts标签里输出 propertyvalue="object"/> 三.全局性的类型转换: 对单前系统符合要求的进行类型转换。 *.src目录会映射到WEB-INF下classes目录下。 在SRC目录下建立xwork-conversion.properties文件。 写法如: com.xxx.Object(自定义类型) =com.XXX.XXX.PojoConverter类型转换器名。 *.在属性文件里注释用#号。 四.Struts2内置的精简化类型转换器: StrutsTypeConverter(抽象) StrutsTypeConverter继承了DefaultTypeConverter类。 内置方法有: 1.convertFromString(Mapcontext, String[]values,ClasstoClass)返回Object,从字符串换化为对象;2.converToString(Mapcontext,Objecto) 返回String从对象换化为字符串;*.只要重写这两个方法就OK了。 五.如果有多个同样的自定义类型对象。 1.可以把它们放到集合里,如: List 一定要用泛型要不然还要写配置 。 2.把JSP里struts标签改成 textfieldname="object">;name同名。 反回的pemeter就是一个数组了。 3.把converter类里写转换成List对象。 六.在JSPJSP里struts标签里可以给bean类的属性直接赋值: 如: textfieldname="object.xxx1"label="xxx1"> textfieldname="object.xxx2"label="xxx2"> ... "object"会直接找到PojoAction.java类里相对应的属性。 注: bean类要提供没有参数的构造方法。 struts用到 反射的功能。 *.六这种方法不建议使用。 还是要用类型转换来写比较好 如果需要转换的类型为Map,List等集合类,将相应的类型转换类改变即可 2、输入校验 一.手动输入完成校验 1.普通的处理方式: 只需要在action中重写validate()方法 2.一个action对应多个逻辑处理方法: 指定校验摸个特定方法的方式: 重写validateXxxx()方法。 Eg: 如果,只校验login方法,则只需重写validateLogin(). 二.输入校验流程: 1.类型转换器负责对字符串的请求参数执行类型转换。 并将这些值设置成Action的属性值。 2.转换过程中若出现异常,则将异常信息保存到ActionContext中,conversionError拦截器将其封装到fieldError 中。 3.通过反射调用validateXxx()方法。 4.调用validate(). 5.如果未出现异常,则转入用户请求的处理方法,如果出现异常,则转入inout视图所指定的视图资源(所以,对 于验证的方法,必须要在配置文件中为其指定input)。 三.基于验证框架的输入校验 1.编写校验配置文件: 命名规则: action类名-validatin.xml. 2.一个action对应多个逻辑处理方法: 指定校验摸个特定方法的方式: action类名-name属性名-validatin.xml.(name属性名: 在strtus配置文件中的) 3.配置文件存放位置: 放在与Action相同的文件夹内。 4.验证规则: 先加载action类名-validatin.xml,然后加载action类名-name属性名-validatin.xml文件。 5.校验器的配置风格: 两种: 字段校验器,非字段校验器。 字段校验器配置格式: --此处需要为不同校验器指定数量不等的校验规则--> .................... --校验失败后的提示信息,其中key指定国际化信息的key--> --校验失败后的提示信息: 建议用getText("I18Nkey"),否则可能出现Freemarkertemplate Error--> --如果校验字段满足多个规则,下面可以配置多个校验器--> 非字段校验器配置格式: --此处需要为不同校验器指定数量不等的校验规则--> --校验失败后的提示信息,其中key指定国际化信息的key--> --校验失败后的提示信息: 建议用getText("I18Nkey"),否则可能出现FreemarkertemplateError--> 非字段校验: 先指定校验器: 由谁来校验,来校验谁! 字段校验器: 先指定校验的属性: 我来校验谁,由谁来校验! 6.校验器: struts2提供了大量的内置校验器: 你可以在xwork-core-2.1.6.jar的 com.opensymphony.xwork2.validator.validators下找到如下配置文件: default.xml.里面列出了所有的内置校验 器。 ---------------------------------------------------------- struts2表单验证里field-validatortype值: int整数; double实数; date日期; expression两数的关系比较; emailEmail地址; url visitor conversion regex正则表达式验证; required是否为空; requiredstring必须字符; stringlength输入字符长度限制; urlweb地址 visitor访问 conversion转换 ------------------------------------------------------------- —必填校验器--> class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> —必填字符串校验器--> class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> --整数校验器--> ----> class="com.opensymphony.xwork2.validator.validators.LongRangeFie
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts2 分类 流程 Struts1 区别