深入解析Java的Struts框架中的控制器DispatchAction
DispatchAction的概述
Struts是一个MVC架构的Web框架,其中控制器层由Action实现。DispatchAction是Struts中一个特殊的Action,它根据请求参数的值映射到相应的方法进行处理,相当于一组Action的集合,可以大大简化代码实现。
DispatchAction的使用方法
- 创建一个继承DispatchAction的Action类,并实现每个方法需执行的具体逻辑。如下示例中的DemoAction:
package com.example.action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.actions.DispatchAction;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class DemoAction extends DispatchAction {
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//执行添加操作的业务逻辑
return mapping.findForward("success");
}
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//执行删除操作的业务逻辑
return mapping.findForward("success");
}
public ActionForward update(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//执行更新操作的业务逻辑
return mapping.findForward("success");
}
}
- 在struts-config.xml中配置对应的mapping。如下示例:
<action path="/demo" type="com.example.action.DemoAction" parameter="method">
<forward name="success" path="/success.jsp"/>
</action>
其中,path为Action的URL请求路径,type为Action的实现类,parameter指定方法名对应的请求参数名(默认为method)。
- 前端请求时,将method作为参数值传入到后端,DispatchAction根据method的值,再转发到对应的方法进行处理。
例如,发送URL为“/demo.do?method=add”时,会调用DemoAction中的add方法,参数会自动将HttpServletRequest和ActionForm传入。
DispatchAction的注意点
- 方法名必须不同,且对应的请求参数名必须与struts-config.xml文件中的参数名相同,否则DispatchAction无法正确路由至对应的Action方法上。
- 每个方法必须返回一个ActionForward对象,用于指定请求处理后跳转的页面。
示例
示例一:使用DispatchAction处理商品操作
- 创建一个继承DispatchAction的Action类ProductAction,实现添加、修改、删除商品的方法。
package com.example.action;
import org.apache.struts.action.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ProductAction extends DispatchAction {
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//实现添加商品的业务逻辑
return mapping.findForward("success");
}
public ActionForward update(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//实现修改商品的业务逻辑
return mapping.findForward("success");
}
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//实现删除商品的业务逻辑
return mapping.findForward("success");
}
}
- 在struts-config.xml中配置请求路径、参数名及Action对应的类。
<action path="/products" type="com.example.action.ProductAction" parameter="method">
<forward name="success" path="/success.jsp"/>
</action>
- 前端请求时,需传递method参数(值为add、update或delete),以指定对商品的操作类型。
<a href="/products.do?method=add">添加商品</a>
示例二:使用DispatchAction处理客户信息
- 创建一个继承DispatchAction的Action类CustomerAction,实现新建、修改、删除客户的方法。
package com.example.action;
import org.apache.struts.action.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CustomerAction extends DispatchAction {
public ActionForward newCustomer(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//实现新增客户的业务逻辑
return mapping.findForward("success");
}
public ActionForward modifyCustomer(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//实现修改客户信息的业务逻辑
return mapping.findForward("success");
}
public ActionForward deleteCustomer(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//实现删除客户的业务逻辑
return mapping.findForward("success");
}
}
- 在struts-config.xml中配置请求路径、参数名及Action对应的类。
<action path="/customers" type="com.example.action.CustomerAction" parameter="method">
<forward name="success" path="/success.jsp"/>
</action>
- 前端请求时,需传递method参数(值为newCustomer、modifyCustomer或deleteCustomer),以指定对客户信息的操作类型。
<a href="/customers.do?method=newCustomer">新建客户</a>
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入解析Java的Struts框架中的控制器DispatchAction - Python技术站