struts 2的开发步骤
(1)先定义一个能发送请求的页面
即可是超链接,也可是表单。
(2)开Action类
struts 2对Action燕没有过多的要求,只要求
A. 推荐实现Action接口。或继承ActionSupport
ActionSupport本身实现了Action接口
B.为每一个请求参数都提供Field,并为之提供相应的setter和getter方法。
C.该Action类应该有无参数的构造器。
(3)配置Action类。
所有action都需要放在package里配置。
<action ..../>无素有如下常用属性:
——name:指定该Action处理哪 个请求
___class:指定该Action对应的处理类
___method:指定使用Action的哪个方法来处理用户请求。默认值为execute
并为处理返回的字符串,指定相应的物理视图。
struts底层的工作
(1)浏览器发送请求,abc.action。 .action后缀可以保留,也可以省略。
(2)浏览器发送的请求被StutsPrepareAndExecuteFilter拦截。
————我们在web.xml中指定了StutsPrepareAndExecuteFilter来过滤所有的请求。
(3)StrutsPrepareAndExecuteFilter会去创建Action实例
假如我们请求abc.action,StrutsPreparaAndExecuteFilter会搜索struts.xml实例
中name为abc的Action配置,根据class属性"使用反射"创建Action实例。
注意:创建对象时,底层实例化vo对象时,使用的是一个无参数的构造方法,
所以当我们写的有参数的构造方法之后,默认无参数的构造方法就没有了,
因此,我们要把无参数的构造方法加上。
(4)调用
Map<String,String> paramMap=request.getParameterMap(); //返回所有请求参数
使用循环(String paramName: paraMap.keySet()){
//得到请求参数名对应的setter方法
Action类.getMethod("set"+paraName的首字母大写); //请求参数对应setter方法
//得到请求参数对应的值
String paramValue=paramMap.get(paramName);
//以Action实例为调用者,调用setter方法,把请求参数值作为参数值传入。
setter.invoke(actionInst,paramValue);
}
(5)再次“通过反射”来调用method属性指定的方法。
返回一个字串。
(6)根据struts.xml文件 中的<result .../>元素的name以物理视图资源,
跳转到实际的视图资源。