Web层应用框架设计详解
立即解锁
发布时间: 2025-08-18 00:01:07 阅读量: 2 订阅数: 7 

# Web 层应用框架设计详解
## 1. 调用模型方法
在 Web 应用中,控制器确定要执行的操作后,需要调用应用模型的相应方法,并使用从请求中提取的参数。一种简单的控制器设计可能会使用大量的 `if-then-else` 语句,如下所示:
```java
if (op.equals("createUser")) {
model.createUser(request.getAttribute("user"),
request.getAttribute("pass"));
} else if (op.equals("changeUserInfo") {
// ... and so on...
}
```
这种 `if-then-else` 方法会导致一个非常大的服务方法,难以阅读和维护。更好的方法是使用命令模式。示例应用定义了一个抽象类 `Action`,它代表单个应用模型操作。控制器可以按名称查找具体的 `Action` 子类,并将请求委托给它们。以下是抽象类 `Action` 和具体类 `CreateUserAction` 的示例代码:
```java
// Action.java:
public abstract class Action {
protected Model model;
public Action(Model model) { this.model = model; }
public abstract String getName();
public abstract Object perform(HttpServletRequest req);
};
// CreateUserAction.java:
public class CreateUserAction extends Action {
public CreateUserAction(Model model) {
super(model);
}
public String getName() { return "createUser"; }
public Object perform(HttpServletRequest req) {
return model.createUser(req.getAttribute("user"),
req.getAttribute("pass"));
}
}
```
`Action` 类有一个名称和一个 `perform` 方法,该方法执行与名称对应的模型方法。例如,`CreateUserAction` 类的名称是 `"createUser"`,其 `perform` 方法使用从 HTTP 请求中提取的参数调用模型方法 `createUser`。
以下是一个使用映射来识别和执行操作的控制器 servlet 示例:
```java
public class ControllerServlet extends HttpServlet {
private HashMap actions;
public void init() throws ServletException {
actions = new HashMap();
CreateUserAction cua = new CreateUserAction(model);
actions.put(cua.getName(), cua);
//... create and add more actions
}
public void doPost(HttpServletRequest req,
HttpServletResponse resp)
throws IOException, ServletException {
// First identify operation "op" from URL.
// method getOperation() is defined elsewhere.
String op = getOperation(req.getRequestURL());
// Then find and execute corresponding Action
Action action = (Action)actions.get(op);
Object result = null;
try {
result = action.perform(req);
} catch (N
```
0
0
复制全文
相关推荐










