Struts1原理及知识总结1.Struts1是Apache推出的java web开发领域一个比较早,同时也是使用最广泛的MVC开源
Struts1原理及知识总结
1.Struts1是Apache推出的java web开发领域一个比较早,同时也是使用最广泛的MVC开源框架,对于Struts1的基础不再做说明,本文只总结Struts1开发中的一些小技巧。
2.Struts配置文件中支持通配符:
如:
<init-param> <param-name>ConvertNULL</param-name> <param-value>true</param-value> </init-param>
(2).Struts中的动态FormBean:
动态FormBean不需要手动写ActionForm的javaBean,因此没有属性的get/set方法。
动态Form其实就相当于一个HashMap,通过set(属性名)/get(属性名)来设置和获取属性值。
(3).Struts配置文件中<action>的parameter属性可以向action传递参数。
(4).Struts的action配置中,path属性是必须的,type属性是可选的。
type、forwar、include是三者之间必选一个。
其中type和forward不能同时出现,forward中隐含了type。
19.Struts的plug-in:
(1).作用:将自己的一些程序代码插入进Struts中央控制器ActionServlet的生命周期中,即在ActionServlet启动和停止的过程中加入自己的代码,但不需要编写ActionServlet的子类,相比ContextListener的好处在于可以获得Struts内部的一些特定信息。
(2).编写plug-in的步骤:
a.编写实现PlugIn接口的类。
b.在struts配置文件中配置<plug-in>和<set-property>元素。
20.编写自定义的RequestProcessor:
RequestProcessor用于对请求做一些处理,编写自定义请求处理器的方法如下:
(1).编写继承RequestProcessor的类,覆盖其process方法。
(2).在struts的配置文件中通过<controller>元素标签来配置自定义的RequestProcessor类和其相关属性。
21.Struts中的DispatchAction:
(1).使用DispatchAction时,不能覆盖其execute()方法。
(2).在struts配置文件中,action中应配置parameter属性,以区分DispatchAction中不同的方法。
(3).DispatchAction中,有些请求需要ActionForm,而有些请求则不需要,若ActionForm使用了表单校验的话,struts启动时,不需要表单的action就会报空指针异常,解决方法如下:
通常写两个action,需要表单校验的请求放在一个DispatchAction中,不需要表单校验的请求放在另一个DispatchAction中。
22.MappingDispatchAction:
MappingDispatchAction可以让每个请求对应一个独立的配置。其在struts中的配置方法:
Action的parameter属性的值直接为MappingDispatchAction中具体的方法名,即每个请求对应一个独立的配置,而type却对应同一个类。
23.Struts中常用的Action:
(1).ForwardAction与forward属性:
必须配parameter属性,用于跳转到parameter指定的路径。
注意:ForwardAction还可以简化配置,不用配type,直接配forward属性。
(2).IncludeActionn与include属性:
和ForwardAction与forward属性类似。
(3).DownloadAction:
动态生成文件,供浏览器下载,返回StreamInfo类型。
注意:为了顺利下载文件,最好重写DownloadAction的execute()方法,在执行父类的execute()方法之前设置HTTP头信息处理附件,具体代码如下:
response.setHeader(“Content-Disposition”,”attachment;filename=文件名”);
若自定义写servlet处理的话,还需加入response.setContentType(“application/x-MSdownload”);
(4).LocaleAction:
用于改变客户端的语言信息,读取客户端指定的国际化资源文件。
注意:LocaleAction的语言,国家,跳转页面等参数需要从Form表单中获得。
(5).LookupDispatchAction:
覆盖getKeyMethodMap()方法,作用是多个国际化资源文件按钮对应同一个Action中的同一个方法问题。
注意:按钮国际化资源文件只能放在默认文件中。
24.Struts将xml文件中各个元素映射成相应的java对象原理:
Struts使用Apache的digester框架将xml文件中的各个元素映射成为相应的java对象。
(1).Apache的Commons Digester框架是一套xml to Object API,专门用于将XML文档转换成为相关的javaBean对象,它让开发人员不用编写解析XML和组装JavaBean对象的具体代码和细节。
(2).Digester框架内容应用SAX方式去解析XML文档,在解析XML文档过程中,Digester框架按照预先注册好的规则去处理所遇到的XML数据。
(3).为Digester框架注册规则需提供两个要素:模式(描述xml某个元素的方式)和规则(模式匹配时操作)。
Digester内部维护者一个堆栈。
25.Struts中央控制器ActionServlet init()方法的工作原理:
(1).调用initInternal()方法,初始化struts内部使用的国际化资源包。
(2).调用方法读取ActionServlet的初始化配置参数,对于ConvertNULL参数为ConvertUtils注册相应的转换器。
(3).使用Digester框架从web.xml文件中获取ActionServlet的url请求映射路径。
(4).使用Digester从struts配置文件中生成ModuleConfig对象。
(5).根据ModuleConfig对象生成MessageResource对象,DataSource对象,以及PlugIn对象,并冻结ModuleConfig的设置。
26. Struts中央控制器ActionServlet doGet()和doPost(()方法的工作原理:
(1).doGet()和doPost()方法调用process()方法。
(2).process()方法中先得到与struts配置文件相对应的ModuleConfig对象。
(3).从ModuleConfig对象中获取RequestProcessor对象。
Struts配置文件中可以通过<controller>元素来配置RequestProcessor的类和其相关的属性。
转自 http://blog.csdn.net/chjttony/article/details/6099101