【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四)

原创 2014年09月05日 08:01:41

目录:

      【SSH进阶之路】Struts基本原理 + 实现简单登录(二)

      【SSH进阶之路】一步步重构MVC实现Struts框架——从一个简单MVC开始(三)

      【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四)

      【SSH进阶之路】一步步重构MVC实现Struts框架——彻底去掉逻辑判断(五)

      【SSH进阶之路】一步步重构MVC实现Struts框架——完善转向页面,大功告成(六)

 

       Struts的第二篇博客【SSH进阶之路】Struts基本原理 + 实现简单登录(二),我们介绍了MVC和Struts的基本理论,上篇博客【SSH进阶之路】一步步重构MVC实现Struts框架——从一个简单MVC开始(三),我们实现了一个MVC模型,这篇博客我们解决一下上篇博客留下的第一个问题:封装业务逻辑和跳转路径。

       我们先回顾一下上篇博客中的TestServlet的代码:

package com.liang.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 使用servlet做相关的控制,转向多个(V)视图
 * @author liang
 *
 */
public class TestServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//取得访问的URI
		String reqeuestURI = request.getRequestURI();
		System.out.println(reqeuestURI);
		//截取URI,获得路径
		String path = reqeuestURI.substring(reqeuestURI.indexOf("/",1), reqeuestURI.indexOf("."));
		System.out.println(path);
		//获得表单数据
		String username = request.getParameter("username");
		
		UserManager userManager = new UserManager();
		
		String forward ="";
		//根据url执行相关的功能
		//等于添加,调用添加方法,添加成功转到添加页面
		if("/servlet/addUser".equals(path)){
			//调用添加的业务逻辑
			userManager.add(username);
			forward ="/add_success.jsp";
			//删除,调用删除方法,删除成功转到删除
		}else if("/servlet/delUser".equals(path)){
			//调用删除的业务逻辑
			userManager.del(username);
			forward ="/del_success.jsp";
		//修改,调用修改方法,修改成功转到修改页面
		}else if("/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{
			throw new RuntimeException("请求失败");
		}
		//统一完成转向
		request.getRequestDispatcher(forward).forward(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request,response);
	}

}

       

       从TestServlet中我们发现,它就是一个简单的Servlet,它是Struts的前端控制器,负责把所有的URL截取下来,通过IF语句根据URL的不同执行相关的功能,并且添加,删除,修改和查询各自有各自的业务逻辑和跳转路径,我们可以各自的业务逻辑和跳转路径封装成不同的类,并抽象出一个公共接口,如下所示:




下面,我们看一下接口和实现类的代码:


接口Action

package com.liang.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Action {
	
	public String execute(HttpServletRequest req, HttpServletResponse resp)
	throws Exception;
}

添加用户AddUserAction

package com.liang.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AddUserAction implements Action {

	@Override
	public String execute(HttpServletRequest req, HttpServletResponse resp)
			throws Exception {
		//获取参数
		String username = req.getParameter("username");
		
		UserManager userManager = new UserManager();
		//调用业务逻辑
		userManager.add(username);
		//返回跳转页面
		return "/add_success.jsp";
	}

}

删除用户DelUserAction

package com.liang.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DelUserAction implements Action {

	@Override
	public String execute(HttpServletRequest req, HttpServletResponse resp)
			throws Exception {
<span style="white-space:pre">		</span>//获取参数
		String username = req.getParameter("username");
		
		UserManager userManager = new UserManager();
		//调用业务逻辑
		userManager.del(username);
		//返回跳转页面
		return "/del_success.jsp";
	}

}

修改用户ModifyUserAction

package com.liang.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ModifyUserAction implements Action {

	@Override
	public String execute(HttpServletRequest req, HttpServletResponse resp)
			throws Exception {
		//获取参数
		String username = req.getParameter("username");

		//调用业务逻辑
		UserManager userManager = new UserManager();

		userManager.modify(username);
		//返回跳转页面
		return "/modify_success.jsp";
	}

}

查询用户QueryUserAction

package com.liang.servlet;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class QueryUserAction implements Action {

	@Override
	public String execute(HttpServletRequest req, HttpServletResponse resp)
			throws Exception {
		//获取参数
		String username = req.getParameter("username");
		
		//调用业务逻辑
		UserManager userManager = new UserManager();

		List userList = userManager.query(username);
		req.setAttribute("userList", userList);
	
		userManager.query(username);
		//返回跳转页面
		return "/query_success.jsp";
	}

}

我们再对比看一下我们封装之后的TestServlet

package com.liang.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.liang.action.Action;
import com.liang.action.AddUserAction;
import com.liang.action.DelUserAction;
import com.liang.action.ModifyUserAction;
import com.liang.action.QueryUserAction;
/**
 * 使用servlet做相关的控制,转向多个(V)视图
 * @author liang
 *
 */
public class TestServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//取得访问的URI
		String reqeuestURI = request.getRequestURI();
		System.out.println(reqeuestURI);
		//截取URI,获得路径
		String path = reqeuestURI.substring(reqeuestURI.indexOf("/",1), reqeuestURI.indexOf("."));
		System.out.println(path);
		
		Action action = null;
		//等于添加,调用AddUserAction
		if ("/servlet/addUser".equals(path)) {
			action = new AddUserAction();
		//等于删除,调用DelUserAction
		}else if ("/servlet/delUser".equals(path)) {
			action = new DelUserAction();
		//等于修改,调用ModifyUserAction
		}else if ("/servlet/modifyUser".equals(path)) {
			action = new ModifyUserAction();
		//等于查询,调用QueryUserAction
		}else if ("/servlet/queryUser".equals(path)) {
			action = new QueryUserAction();
		}else {
			throw new RuntimeException("请求失败");
		}
		String forward = null;
		//返回不同的转向页面
		try {
			forward = action.execute(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
		//根据路径,统一完成转向
		request.getRequestDispatcher(forward).forward(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request,response);
	}

}

      通过对比,我们可以发现简单了很多,但是实现的道理基本一样,仍然是将path截取出来,做相应的判断,进入对应的分支,New一个刚写的Action,New谁调谁,但是此时仅仅是完成了功能,系统并不灵活,IF...ELSE并没有去掉,扩展性不好,不能适用需求。


      下篇博客【SSH进阶之路】一步步重构MVC实现Struts框架——彻底去掉判断逻辑(五),我们解决第二个问题:IF...ElSE的问题。


       源码下载



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

用正则表达式匹配IPV4地址

写一个正则表达式匹配IPV4地址说容易也容易,说难也难,取决于需要的准确度。简单起见,这里只考虑点分十进制的IPV4地址。 最简单的方式是把IPV4地址看做四段十进制数字串,由三个点号隔开,可...

【SSH进阶之路】一步步重构MVC实现Struts框架——从一个简单MVC开始(三)

上篇【SSH进阶之路】Struts基本原理 + 实现简单登录(二),我们介绍MVC和Struts的基本理论,并实现了一个简单登录的实例。从中我们知道了,Struts是MVC的框架,MVC其实是Mode...

【SSH进阶之路】一步步重构MVC实现Struts框架——彻底去掉逻辑判断(五)

目录:       【SSH进阶之路】Struts基本原理 + 实现简单登录(二)       【SSH进阶之路】一步步重构MVC实现Struts框架——从一个简单MVC开始(三) ...

【SSH进阶之路】一步步重构MVC实现Struts框架——彻底去掉逻辑判断(五)

Struts的第二篇博客【SSH进阶之路】Struts基本原理 + 实现简单登录(二),我们介绍了MVC模型和Struts的基本理论,对比学习了他们之间的联系和区别。从第三篇博客【SSH进阶之路】一步...

【SSH进阶之路】一步步重构MVC实现Struts框架——完善转向页面,大功告成(六)

第四篇博客【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四),我们解决了第一个问题:封装业务逻辑和跳转路径。第五篇博客【SSH进阶之路】一步步重构MVC实现Stru...

深入浅出学习Struts框架(二):重构MVC模式代码中跳转路径和业务逻辑 .

在上篇博文《深入浅出学习Struts框架(一):一个简单mvc模式代码示例开始》中简单说了一下MVC模式代码的实现和MVC模式和三层架构的区别,并且留下一个问题—如何去掉TestServlet中的IF...

深入浅出学习Struts1框架(二):重构MVC模式代码中跳转路径和业务逻辑

在上篇博文《深入浅出学习Struts1框架(一):一个简单mvc模式代码示例开始》中简单说了一下MVC模式代码的实现和MVC模式和三层架构的区别,并且留下一个问题—如何去掉TestServlet中的I...
  • lfsf802
  • lfsf802
  • 2012年02月21日 20:25
  • 9369

【SSH进阶之路】一步步重构容器实现Spring框架——解决容器对组件的“侵入式”管理的两种方案--主动查找和控制反转(九)

解决容器对组件的“侵入式”管理,介绍控制反转的思想。

【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装,实现简单灵活的Spring框架(十一)

不仅形似Spring,而且神似Spring。。。

【SSH进阶之路】一步步重构容器实现Spring框架——从一个简单的容器开始(八)

最近一直在和容器打交道,甚至前面的博文,我们也介绍了Spring的IoC的原理以及源码,但是回头看看,duang~ duang~的,还是深了,不够通俗易懂,不够深入浅出。由于以上原因吧,从这篇博客开始...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四)
举报原因:
原因补充:

(最多只允许输入30个字)