我将Java servlet前端控制器从一个大的if-else if块移植到命令模式,并创建了一个带有execute方法的命令接口。目前,我正在我的servlet的init()
方法中实例化每个命令的实例,并将它们存储在HashMap
中。我想知道如何在给定请求的上下文中运行必要的command.execute()
?
我是否在界面中添加setContext(HttpServletRequest request, HttpServletResponse response);
方法并在执行之前从command.setContext(request, response)
方法调用doGet()/doPost()
,或者我是否应该在init()
中实例化命令以开始用?相反,有一个构造函数将request
和response
作为args?
显然,该命令的目的是为给定的用户/会话设置各种属性,并确定要转发到的正确JSP,如果没有上下文,它就无法实现。
答案 0 :(得分:1)
您应该使用:
command.execute(HttpServletRequest request, HttpServletResponse response);
所有州都可以(并且应该)记录在请求中。这很容易通过存储属性来实现。
有时您可能需要使用:
command.execute(this, HttpServletRequest request, HttpServletResponse response);
但可能只有当你的命令是enum
而不是真实对象时。