Struts旅程(四)MVC向struts MVC框架演变过程(二)

2014-11-24 02:50:14 · 作者: · 浏览: 1
vlet/addUser".equals(path)) { userManager.add(username); forward= "add_success.jsp"; //request.getRequestDispatcher("/add_success.jsp").forward(request,response); }else if("/servlet/modifyUser".equals(path)) { userManager.modify(username); forward= "modify_success.jsp"; //request.getRequestDispatcher("/modify_success.jsp").forward(request,response); }else if("/servlet/queryUser".equals(path)) { List userList = userManager.query(username); request.setAttribute("userList",userList); forward= "query_success.jsp"; //request.getRequestDispatcher("/query_success.jsp").forward(request,response); }else { throw new RuntimeException("请求失败!"); } request.getRequestDispatcher(forward).forward(request,response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { doGet(request,response); } }

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.