UserManager代码如下所示:
package com.bjpowernode.servlet;
import java.util.ArrayList;
import java.util.List;
public class UserManager {
public void add(String username)
{
System.out.println("UserManager.add()-->>"+ username);
}
public void del(String username)
{
System.out.println("UserManager.del()-->>"+ username);
}
public void modify(String username)
{
System.out.println("UserManager.modify()-->>"+ username);
}
public List query(String username)
{
System.out.println("UserManager.query()-->>"+ username);
List userList = new ArrayList();
userList.add("a");
userList.add("b");
userList.add("c");
return userList;
}
}
同时建立查询成功,删除成功,修改成功jsp页面。
这样在index.jsp页面中通过表单的action属性来转到相应的页面。
版本三的缺点是if太多,不稳定,当我们添加或者删除一个if的时候还需要重新编译源程序。这样无法适应变化的需求。所以我们在此基础上进行改进就需要去掉if语句,可以把改变的部分分离出来,变成可配置的,这样就变得灵活的,需要改动jsp的文件名,在配置文件中配置一下就可以了。
版本四 if else抽象出接口和类+配置文件
首先我们把转到的地址字符串放到一个字符串变量中,这样TestServlet中的doGet方法,代码如下。
String username = request.getParameter("username");
UserManager userManager = new UserManager();
String forward = "";
//判断截取的path和哪个要加载的页面相等.
if("/servlet/delUser".equals(path))
{
userManager.del(username);
forward= "del_success.jsp";
}else if("/servlet/addUser".equals(path))
{
userManager.add(username);
forward= "add_success.jsp";
}elseif("/servlet/modifyUser".equals(path))
{
userManager.modify(username);
forward= "modify_success.jsp";
}else if("/servlet/queryUser".equals(path))
{
List userList = userManager.query(username);
request.setAttribute("userList",userList);
forward= "query_success.jsp";
}else
{
thrownew RuntimeException("请求失败!");
}
request.getRequestDispatcher(forward).forward(request,response);
统一完成了转向。当if语句是满足某种条件,条件不同的时候转到不同的页面,添加有添加的逻辑,修改有修改的逻辑,这样我们可以抽象出接口。对添加的action操作添加,对删除的action做出删除任务,对修改的action做出修改。把每一个if语句中的变成为类去实现,抽象出一个Action接口,接口中方法execute()方法,返回转向路径字符串。类图如下所示(图4.1)。

图4.1
共同的Action接口,不同的实现。
Action接口代码。
package com.bjpowernode.servlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
public interface Action {
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
AddUserAction代码。
package com.bjpowernode.servlet; importjavax.