—struts2配置深入解析
在struts2中,主要是通过web.xml和struts.xml配置文件来控制action的具体操作。其原理都是通过反射来完成的。
总结来说,可以分成如下几部:
1.浏览器发送action请求,如abc, 此action可以写成abc.action或者不带后缀的abc
2.浏览器发送的abc action请求被web.xml配置中的过滤器StrutsPrepareAndExecuteFilter拦截.
StrutsPrepareAndExecuteFilter的doFilter核心代码如下:
config = configuration.getRuntimeConfiguration().getActionConfig(namespace, actionName);
//config包含此action对应的class类及method方法
Class clazz = getClassInstance(className);
Object obj = clazz.newInstance();
return obj;
3.获取到了action实例后,将调用Map
{
//得到请求参数对应的setter方法。
Action类.getMethod("set"+paramName的首字母大写);
//得到请求参数对应的值
String paramValue = paramMap.get(paramName);
//以Action实例为调用者,调用set方法,把请求参数值作为参数值传入
setter.invoke(actionInst, paramValue);
}
再次使用”反射技术”调用method属性所指定的方法,它将返回一个字符串。获取method值的核心代码如下:
if (StringUtils.isEmpty(this.method)) {
this.method = config.getMethodName();
if (StringUtils.isEmpty(this.method)) {
this.method = ActionConfig.DEFAULT_METHOD; //要是没有配置,使用默认的方法,即execute方法
}
methodSpecified = false;
}6. 最后根据struts.xml文件中的<result.../>元素的name以及物理视图资源,调转到实际的视图资源。
request.getRequestDispatch(….).forward(request, response);
下面是一副简单流程示意图: