JAVA反射在STRUTS中的应用
2007-07-11 11:58
323 查看
struts中ACTION调用正常情况:
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
doXX();//某个动作的处理
return mapping.findForward("success");
}
反射机制:
1:STRUTS 动作处理ACTION类
public class RegAction extends BaseAction {
// --------------------------------------------------------- Instance Variables
// --------------------------------------------------------- Methods
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
RegForm regForm = (RegForm) form;
// TODO Auto-generated method stub
String action = null;
if (request.getParameter("type") == "query") {/////动态传递的参数
action = "query";
} else if (request.getParameter("type").equalsIgnoreCase("excelExport")) {{/////动态传递的参数
action = "excelExport";
}
else
{
action="action3";{/////动态传递的参数
request.setAttribute("type",request.getParameter("type"));
}
//Object[] params1 = {request};
Object[] params = {regForm, request};
String forword = this.dispatchSubAction(action, params);///这里通过反射方法dispatchSubAction动态调用子ACTION动作,在BASEACTION中定义
// return mapping.findForward("success");
return loggedFindForward(mapping, forword);
}
public String query(ActionForm form,HttpServletRequest request)
{
doXX1();
return "success";
}
public String excelExport(ActionForm form,HttpServletRequest request)
{
doXX2();
return "failure";
}
public String action3(ActionForm form,HttpServletRequest request)
{
doXX3();
return "action3";
}
}
2:BASEACTION
public class BaseAction extends ActionSupport {
protected transient final Log logger = LogFactory.getLog(getClass());
protected final Map methods = getMethodMap();
public BaseAction() {
super();
}
/** 初始化时反射子类自身的结构, 形成一个映射, 用来日后dispatchSubaction.
* @return 存放了methods对象的Map
*/
protected Map getMethodMap() {
Method[] methods = this.getClass().getDeclaredMethods();
Map map = new HashMap();
for (int i = 0; i < methods.length; i++) {
map.put(methods[i].getName(), methods[i]);
}
return map;
}
/** 将Action转移给子动作.
* 在子类中调用时,只需要新建一个Object[] {参数1, 参数2, ...} 一般为 {form, request, dao}
* 然后调用dispatchSubAction(String, objects) 即可
*/
protected String dispatchSubAction(String action, Object[] objs) throws Exception {
if (logger.isDebugEnabled()) logger.debug(">> 调用子动作 [" + action + "]");
if(action==null||action.equals("")||action.length()==0)
return "success";
try {
String forward = (String) ((Method) methods.get(action)).invoke(this, objs);
if(logger.isDebugEnabled()) logger.debug("<< 调用子动作结束 [" + action + "], 返回 [" + forward + "]");
return forward;
} catch (NullPointerException ne) {
throw new java.lang.IllegalArgumentException("没有找到子动作[" + action + "]对应的方法");
} catch (Exception e) {
logger.error("<<<<< 调用子动作失败 [" + action + "], 详细情况如下:");
if(e.getCause()!=null) {
e.getCause().printStackTrace();
throw (Exception) e.getCause();
} else {
e.printStackTrace();
throw e;
}
}
}
protected ActionForward loggedFindForward(ActionMapping mapping, String forward) {
return mapping.findForward(forward);
}
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
doXX();//某个动作的处理
return mapping.findForward("success");
}
反射机制:
1:STRUTS 动作处理ACTION类
public class RegAction extends BaseAction {
// --------------------------------------------------------- Instance Variables
// --------------------------------------------------------- Methods
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
RegForm regForm = (RegForm) form;
// TODO Auto-generated method stub
String action = null;
if (request.getParameter("type") == "query") {/////动态传递的参数
action = "query";
} else if (request.getParameter("type").equalsIgnoreCase("excelExport")) {{/////动态传递的参数
action = "excelExport";
}
else
{
action="action3";{/////动态传递的参数
request.setAttribute("type",request.getParameter("type"));
}
//Object[] params1 = {request};
Object[] params = {regForm, request};
String forword = this.dispatchSubAction(action, params);///这里通过反射方法dispatchSubAction动态调用子ACTION动作,在BASEACTION中定义
// return mapping.findForward("success");
return loggedFindForward(mapping, forword);
}
public String query(ActionForm form,HttpServletRequest request)
{
doXX1();
return "success";
}
public String excelExport(ActionForm form,HttpServletRequest request)
{
doXX2();
return "failure";
}
public String action3(ActionForm form,HttpServletRequest request)
{
doXX3();
return "action3";
}
}
2:BASEACTION
public class BaseAction extends ActionSupport {
protected transient final Log logger = LogFactory.getLog(getClass());
protected final Map methods = getMethodMap();
public BaseAction() {
super();
}
/** 初始化时反射子类自身的结构, 形成一个映射, 用来日后dispatchSubaction.
* @return 存放了methods对象的Map
*/
protected Map getMethodMap() {
Method[] methods = this.getClass().getDeclaredMethods();
Map map = new HashMap();
for (int i = 0; i < methods.length; i++) {
map.put(methods[i].getName(), methods[i]);
}
return map;
}
/** 将Action转移给子动作.
* 在子类中调用时,只需要新建一个Object[] {参数1, 参数2, ...} 一般为 {form, request, dao}
* 然后调用dispatchSubAction(String, objects) 即可
*/
protected String dispatchSubAction(String action, Object[] objs) throws Exception {
if (logger.isDebugEnabled()) logger.debug(">> 调用子动作 [" + action + "]");
if(action==null||action.equals("")||action.length()==0)
return "success";
try {
String forward = (String) ((Method) methods.get(action)).invoke(this, objs);
if(logger.isDebugEnabled()) logger.debug("<< 调用子动作结束 [" + action + "], 返回 [" + forward + "]");
return forward;
} catch (NullPointerException ne) {
throw new java.lang.IllegalArgumentException("没有找到子动作[" + action + "]对应的方法");
} catch (Exception e) {
logger.error("<<<<< 调用子动作失败 [" + action + "], 详细情况如下:");
if(e.getCause()!=null) {
e.getCause().printStackTrace();
throw (Exception) e.getCause();
} else {
e.printStackTrace();
throw e;
}
}
}
protected ActionForward loggedFindForward(ActionMapping mapping, String forward) {
return mapping.findForward(forward);
}
相关文章推荐
- Java反射之应用(一)
- 反射在Java Swing中的应用
- FreeMarker在struts2.0,JAVA,web中的应用实例
- Java反射应用实例1
- Java: Struts2+Hibernate整合应用
- 谈谈java反射的应用
- 详解Java反射各种应用
- Java 编程的动态性:应用反射
- Java反射的应用
- java反射基础知识(四)反射应用实践
- java 反射应用---创建对象
- java 反射应用
- java反射及应用
- protobuf在java应用中通过反射动态创建对象
- java 中反射的应用
- 反射在Java Swing中的应用
- FreeMarker在struts2.1.8,JAVA,web中的应用实例
- Java_反射应用_通过Java反射调用方法
- java中的反射机制应用
- .net反射技术的应用—如何调用Java的COM接口[转]