xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
struts2
org.apache.struts2.dispatcher.FilterDispatcher
struts2
/*
struts2不是servlet而是一个过滤器
4、在src目录下创建struts2的配置文件struts.xml,内容:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
"http:
//struts.apache.org/dtds/struts-2.0.dtd">
/result.jsp
注:
package里的extends与类的继承相似,struts-default是struts2里已经存在的包action里的name与页面里表单里的action的值,这个值除掉.action;class与struts1里的type属性一样。
result转到的页面,里面的name默认值为sucess;如果name为input表示出现错误时返回到输入页面。
action类会自动力执行execute的方法
拦截器是struts2的核心部分
代码执行流程:
表单提交数据->struts.xml->标签指定的逻辑处理类->跳转到指定的页面
5、struts2里action不须要继承那个类开实现它是一个简单的pojo,不须要依赖struts2的任何一个类文件。
6、struts2里替除了一些不须要的标签,标签文件的描述符是核心包里面的META-INF里。
struts2是用maven来构建,它比ant还要强大。
struts2的form标签action值默认以action结尾,它还集成了错误验证的机制。
7、struts2提交一个父类:
ActionSupport。
webwork本身是xwork与webwork两个工程的合并,struts2引入了xwork。
ActionSupport对通用的行为进行了实现,实际是对一些接口的实现。
也可以自己写。
8、ActionSupport:
如果子类想实现验证要实现ActionSupport的validate方法。
当验证失败时用ActionSupport的addFieldError(StringfieldName,StringerrorMessage)方法添加错误信息。
fieldName表单里控件的名字,errorMessage错误信息,出现错误时返回到input页面。
第二章struts2类型转换
一、struts2类型转换一
1、struts2的类型转换是基于ognl的类型转换。
主要实现TypeConverter这个类,它对于类型转换的实现,它描述了一种最通用的情况,所以一般不去实现这个接口,它提供了一个接口实现的类DefaultTypeConverter。
自己的类继承DefaultTypeConverter重写convertValue方法来完成类型转换。
2、convertValue(Mapcontext,Objectvalue,ClasstoType)web应用程序分为两种情况,一:
客户端字符串到自定义类型的转换;二:
在页面进行输出时,是从服务器到客户端的转换,即是从自定义类型到字符串的转换。
toType是目标类型即如果是String则是第二种情况否则是第一种情况。
3、ActionSupport类实现了接口Action。
Action定义了struts2的一个基本模型,里面有ERROR:
有错误、INPUT:
验证没有成功、LOGIN:
没有成功,因为用户没有登录、NONE:
表示action操作成功但是不显示任何视图、SUCCESS:
成功,它们都对应struts.xml里里的name属性的值最好显示写出;最好用Action里的字符串来返回。
4、写一个属性文件来设定struts2的转换工作。
这个属性文件一定要与action在同一个包内。
这个属性文件名是:
”action类名-conversion.properties”。
5、在属性文件里是以key与value的性质,key是struts2要转换的属性名,value是转换这个属性的类。
当用户要转换多个属性里可以换行加多个。
二、struts2类型转换二
1、当需要转换多个自定义类型的类的化需要全局类型转换。
局部类型转换是对某一个特定的类进行转换,而全局的是在当前系统里所有符全要求的进行类型转换。
全局类型转换需要在classes目录下建立一个名为xwork-conversion.properties的属性文件(名字不可以更改),在里面写配置信息。
形式是:
要转换类的名=作为转换器的类。
2、在属性文件里注释一行用的是“#”号。
3、不管是全局的类型转换还是局部的类型转换都是用一个类extendsDefaultTypeConverter类里的convertValue方法来转换的。
而DefaultTypeConverter则是实现了TypeConverter接口来实现类型转换的。
4、struts2类型转换是基于ognl的。
struts2提供了一个更加简化的类型转化方式,它本身也是基于ognl实现的。
就是类型转换类继承org.apache.struts2.util包里的StrutsTypeConverter类。
它是继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter类。
StrutsTypeConverter是一个抽象类,在它里是面有convertToString(Mapcontext,Objecto)与convertFromString(Mapcontext,String[]values,ClasstoClass)两个抽象方法,分别是从字符串开始转换与转换到字符串。
它是struts2类型转换的核心,真正项目是继承StrutsTypeConverter的,而不是继承DefaultTypeConverter。
5、StrutsTypeConverter继承DefaultTypeConverter后要去重写convertValue方法,里面toClass与String.class进行比较,如果为真则调用convertToString方法否则调用convertFromString方法。
6、如果用户实现完继承StrutsTypeConverter的类后,只需要添加到属性文件即可。
7、在struts2中页面也可以把控件的名字写为:
类对象名.属性名,这个方式这个类必须提供一个没有参数的构造方法。
这种写法对表单会很麻烦,绝对不能有它。
8、在页面显示一个类的时候,它会默认调用这个类的toString()方法。
第三章struts2校验
1、类型转换就是客户端用户输入的参数转化为服务器端java的对象,不管用户输入什么样的内容,到客户端都是以字符串的形式存在。
2、int与Date的转换是struts2的内置拦截器自动转换的。
3、输入校验是验证用户输入的信息是否合法是否有效。
4、输入校验是建立在类型转换的基础之上的误显示的功能,。
5、struts2的标签库已经内置了错但是必须使用struts2的标签fielderror>
fielderror>才能显示错误信息。
6、ActionSupport在com.opensymphony.work2下。
ActionSupport实现的Action,而Action里面的常量代表的是与它相对应的小写字符串。
7、如果返回页面没有input页面的话当类型转换或校验出错的时候会出现404Noresultdefinedforactionaction类andresultinput错误。
8、struts2一但发现类型转换或输入校验失败它会去寻找一个名字叫做input的页面,然后转到这个页面。
9、验证方法validate是ActionSupport实现接口Validateable里的方法。
在ActionSupport里这个方法没有实现任何东西,是让子类重写此方法来实现自己想要的验证。
10、为了防止用户直接从浏览器的地址栏里输入action地址,action里的属性就为null,所以要进行非空验证。
11、Calendarc1=Calendar.getInstance();
c1.setTime(birthday);
Calendarc2=Calendar.getInstance();
c2.setTime(graduation);
让时间与Calendar关联起来。
c1.before(c2)时间c1是否在c2之间。
12、在HTML表单里可以用EL方式得到错误信息时返回用户原来的信息。
13、在struts.xml里有一个转发的方式一般情况下是dispatcher,也是默认方式,它有很多种。
14、如果用fielderror>来显示错误信息,它会以
15、遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面。
16、当年龄不可以转换的时候,struts2有内置的错误显示:
"Invalidfieldvalueforfield'age'",age对应表单里的数据,这种错误信息一定要被替换掉。
17、struts2提供一个资源文件来解决这个问题,用于类型转换的错误信息,这个文件是用于类型转换的。
18、全局:
struts.xml里加上一个constant标签,它不在package里。
它表示在struts整个框架里要使用那些常量就把它写进去。
要替换struts2自带的错误信息应加上它就把struts里源有的资源文件替换成为message的资源文件,不需要加properties,message.properties文件放在src目录下,即放在classes目录下。
19、在建立的属性文件里定下xwork.default.invalid.fieldvalue={0}error它前面不变的,xwork.default.invalid.fieldvalue当任何的一个属性转换出问题的时候就会显示后面的信息,后面表示的是“属性名error”显示在页面上。
20、类型转换也有全局和局部的,上面的是全局的。
局部的是验证某一个action里的局性。
如果要验证某一个action里的属性,在action的包下建一个“Action类名.properties”属性文件,内容格式:
invalid.fieldvalue.属性名=要现实的信息。
显示信息若是中文时不能直接在文件中写中文,否则会出错,应该将中文转换为encoder的编码方式,可以用jdk中bin目录下的native2ascii.exe工具进行转换。
21、当局部与全局转换同在的时候局部会替换掉全局的错误信息。
22、struts2里的表单默认提交方式为post,它默认的有自动显示错误信息功能,也可以保存用户原来输入的数据。
23、当时间转换失败时给时间属性添加一个null值,所以就不需要添加null值判断。
int类型的属性如果转换不成功将默认是0;
24、类型转换与输入校验的流程
1.首先Struts2对客户端传来的数据进行类型转换
2.类型转换完毕后再进行输入校验
3.如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)
注意:
如果类型转换不成功,也同样要进行输入校验
25、实际应用中从不用struts内置的错误信息。
26、addFieldError用于存放类型转换的错误信息或验证的错误信息。
addFieldError是ActionSupport实现ValidationAware里的方法,还有一种addActionError方法,实现上action有两种错误级别一种是field级别的错误信息显示的时候用struts的form表单或fielderror>标签,别一种是action级别的错误信息显示的时候只可以用actionerror/>标签显示。
27、addFieldError是把错误信息存放在Map里面,addActionError是把信息存放到Collection里面去。
28、struts的form标签只可以显示field级别的信息,它不可以显示action级别的信息。
29、有时会同时出现field与action级别的错误信息,如类型转换写验证同时出问题,解决这一个问题把每一个struts标签里加上一个theme="simple"表示不让struts对标签进行封装,它也不生成多于的代码,也就没有struts给的错误提示。
theme=”simple”如果在form>标签中,则会使struts的标签格式取出,自己生成的表格页消除,便于自定义格式。
30、struts生成的控件id是:
form的action值_控件名。
31、struts2里没有像struts1里的dispatchaction类,它是在struts.xml里的action里加一个method属性,它的值就是对应的逻辑方法名,如果有多个业务逻辑方法,就把这个类写成多个标签。
当method出现时就不走execute方法。
如:
class="com.test.action.RegisterAction"method="abc">
32、应该是一个业务逻辑方法对应一个验证方法,它是用validate+业务逻辑方法,方法名的第一个字母大写。
其中在action类中不管有多少个验证方法都会执行validate方法。
如:
public void validateAbc()。
33、当多个验证方法时validate是验证所有。
而validateExecute方法是专用于来验证execute方法的。
34、校验也可以用xml来校验,xml是通用的,建议在一般情况下用xml验证,只有当业务校验非常非常复杂时才用validate来校验。
35、xml校验方法:
在action包下建xml文件,程序运行时会自动寻找此xml校验文件,命名规则为“Action类名-validation.xml”,xml的格式如下:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN""
true
usernameshouldnotbeblank!
6
10
usernameshouldbebetween${minLength}and${maxLength}
passwordshouldnotbeblank!
6
10
passwordshouldbebetween${minLength}and${maxLength}
repasswordshouldnotbeblank!
6
10
repasswordshouldbebetween${minLength}and${maxLength}
ageshouldnotbeblank!
1
150
ageshouldbebetween${min}and${max}
birthdayshouldnotbeblank!
2001-01-01
2003-12-31
birthdayshouldbebetween${min}and${max}
graduationshouldnotbeblank!
2005-01-01
2007-12-31
graduationshouldbebetween${min}and${max}
36、struts2也