Struts2
1, struts官方网址:http://struts.apache.org/
2, Struts是
3, Struts的概念和体系结构
4, MVC模式的优点
5, JSP model1
6, JSP model2
7, Struts2必须使用的最小jar文件
commons-fileupload-1.2.2.jar ;commons-io-2.0.1.jar;commons-lang3-3.1.jar ;ognl-3.0.5.jar ;struts2-core-2.3.4.jar ; xwork-core-2.3.4.jar ;freemarker-2.3.19.jar ;
javassist-3.11.0.GA.jar ;(该jar包不在lib中,可以到例子中找到)
8, struts是通过过滤器(Filter)与应用关联的,在web.xml文件中加入
9, struts还必须配置自己的文件,struts.xml,一定要在src目录下建立,其中开始的dtd可以到例子中拷贝
10, 登录页面和结果显示页面都是jsp页面,比较简单,就不在赘述
11, 关联源代码方法:项目名右键àBuild PathàConfigure Builder PathàLibrariesà点开struts2-core-2.3.4.jaràSource attachment (None)àEditàExternal Folderà”E:/WEB-jar包/struts-2.3.4/src/core/src/main/java”
12, 根据开源项目源代码生成javadoc帮助文档
1)新建一个普通的java项目,如struts_doc
2)将目录\struts-2.3.4\src\core\src\main\java里面内容拷贝到新建项目的src目录下
3)导入需要的jar文件,选择Add External Jars,除了struts2-core-2.3.4.jar都加入
4)在Tomcat中servlet-api.jar和jsp-api.jar同样加入进来
5)菜单栏ProjectàGenerate javadoc
13,整个执行流程:表单输入完数据提交给login.action,流程转到struts.xml文件中,它里面会有多个action,逐一去匹配;接着流程转到匹配到的login对应的class:LoginAction,实例化LoginAction对象,将页面提交过来的信息调用set方法逐个赋值给成员变量,接着自动调用execute方法,这个方法的返回值就是一个String,不能随便写,return的结果会跟action的子元素result进行匹配,流程转到result元素对应的页面result.jsp,该jsp页面显示用户提交的数据。
13, struts2不是单实例的,每一次请求都会生成一个Action对象。而struts1,Servlet都是单实例的。
14, Struts2的类型转换,对于8种基本类型以及String,Date等常见类型,Struts2可以使用内建的类型转换器实现自动转换;但对于自定义的对象类型来说,需要我们自己制定转换方式。
15, 1)表单页面
2)JavaBean
3)struts.xml中进行配置,并且创建对应的Action类UserAction,UserAction类继承自ActionSupport类,对于实际开发来说,都要继承ActionSupport类,它提供了诸如国际化,类型转换,服务器端验证等等。
4)编写类型转换器converter,所有的类型转换器都应该继承自DefaultTypeConverter(ognl)
5)属性与类型转换器关联文件 Action名-conversion.properties,如UserAction-conversion.properties
6)user01_output.jsp页面
16, 对于自定义的类型转换器来说,需要提供3方面的信息:Action名字、Action中待转换的属性名以及该属性对应的类型转换器
17, 对于自定义的转换器,我们可以继承StrutsTypeConverter,它有两个抽象的方法convertFromString(Map context,String[] values,Class toClass) ,convertToString(Map context,Object o),实际上就是将DefaultTypeConverter类中的convertValue()方法进行了拆分。
18, 批量转换,跟普通的转换没有区别,只是原来使用的属性是User类型,现在使用List<User>;
19, 全局类型转换用的比较少,局部类型转换的“***-conversion.properties”与Action在同一包下面,而全局类型转换文件是在src下,文件名固定“xwork-conversion.properties”
实际开发中,更多的还是使用局部转换器。
20, Action类中的execute()方法,类似于Servlet中的doGet(),doPost()方法,默认执行的是execute()方法,我们也可以指定我们自己的方法进行处理。即在struts.xml中action元素中定义属性method,属性值即为待执行的方法,其中该方法要与execute保持一致,但是不推荐使用,因为容易造成Action混乱。
21,输入验证举例
1) 注册页面
2) struts.xml中注册
3) RegisterAction的处理
22,两种级别错误信息的使用方式及标签库的显示方式
23,struts2标签的使用
24,输入校验总结:
1) 首先进行类型转换
2) 然后进行输入校验(validate方法)
3) 如果在上述步骤中出现了任何错误,都不会执行execute方法,会转向struts.xml中该action的名为input的result所对应的页面。
4) 当上述过程没有任何错误时,才会执行execute方法。
注意:如果在类型转换过程中出现了错误,struts2会将该错误放到filed错误级别。
25,ActionSupport类的addActionError()方法的实现:首先创建一个ArrayList对象,然后将错误消息添加到该ArrayList中。
26,当调用getActionErrors()方法返回Action级别的错误信息列表,返回的实际上是集合一个副本而不是集合本身,因此对集合副本调用clear()方法清除的依旧是副本中的元素而非原集合的元素。我们可以调用
this.clearErrors();//两种级别的错误都会被清除
或者分别调用两种级别的错误消息
this.clearActionErrors();
this.clearFieldErrors();
27,FieldError级别的错误信息底层是用LinkedHashMap实现的,该Map的key是String类型的,value是List<String>类型的,这就表示一个Field Name可以对应多条错误信息,这些错误信息都放置在List<String>集合当中。