`

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

阅读更多

 

目录:

【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的问题。

 

源码下载

 

 

分享到:
评论

相关推荐

    Spring框架的简单实现

    我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC...【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装,实现简单灵活的Spring框架(十一)

    SpringIoC的简单实现

    【SSH进阶之路】一步步重构容器实现Spring的IoC——解决容器对组件的“侵入式”管理的两种方案--服务定位器和IoC容器(九) 【SSH进阶之路】一步步重构容器实现Spring的IoC——工厂+反射+配置文件实现IoC容器(十)

    ssh框架用struts2 hibernate实现图片的上传源码

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的MVC架构。本项目涉及的核心知识点是使用Struts2处理表单提交,Hibernate进行数据持久化,以及图片上传的相关技术。下面将详细介绍这些内容...

    SSH框架与MVC架构之间的关系

    SSH框架,全称为Struts2、Hibernate和Spring的组合,是一种常见的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。MVC(Model-View-Controller)架构模式则是SSH框架设计的基础,它将应用程序分为三个主要...

    Java之SSH深入浅出——精简剖析

    ### Java之SSH深入浅出——精简剖析:Struts框架详解 #### Struts框架起源与发展历程 Struts框架,作为Apache Jakarta项目的重要组成部分,自诞生之初便承载着推动JavaServer Pages(JSP)、Servlet、标签库及面向...

    SSH(springmvc)环境

    Struts2提供了一种基于MVC模式的解决方案,它的配置文件通常为`struts.xml`,在这里定义了Action、结果类型、拦截器等元素,实现请求到Action的映射,并控制视图的跳转。 Hibernate是SSH中的持久层框架,它简化了...

    SSH框架封装demo

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是一种经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。这个"SSH框架封装demo"可能是为了展示如何将这三个框架整合并应用于实际项目中。 **...

    SSH框架搭建——测试

    SSH框架,全称为Struts2 + Spring + Hibernate,是Java Web开发中常用的一种技术栈,它结合了三个强大的开源框架,用于构建高效、灵活且可扩展的企业级应用程序。本教程将带你逐步了解如何搭建SSH框架,并实现登录和...

    1003————自动搭建SSH框架 1004————SSH框架手动搭建

    SSH是Spring、Struts和Hibernate三个开源框架的首字母缩写,它们分别负责应用的依赖注入、MVC模式实现以及对象关系映射。这里我们将深入探讨SSH框架的自动搭建与手动搭建。 首先,让我们了解SSH框架的核心组件: 1...

    关于ssh框架的详细业务流程分析介绍

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了模型-视图-控制器(MVC)架构模式,以及依赖注入(DI)和面向切面编程(AOP)等特性,极大地提高了...

    SSH框架整合包/SSH框架jar包集合/Spring/Struts2/Hibernate

    SSH框架是Java开发中常用的三大开源框架——Spring、Struts2和Hibernate的组合,它们各自在应用程序的不同层次上提供服务,以实现一个高效且灵活的开发环境。下面将详细介绍这三个框架以及它们的整合。 **Spring...

    JavaWeb初级实例日志管理系统MVC,Struts,SSH

    JavaWeb初级实例中的日志管理系统是一个基于MVC(Model-View-Controller)设计模式的Web应用,它结合了Struts和SSH(Spring、Struts、Hibernate)两大主流框架,为开发者提供了一个简单但完整的日志记录和管理平台。...

    (进阶)SSH框架实现员工部门管理系统

    这个项目“(进阶)SSH框架实现员工部门管理系统”旨在利用SSH的优势,构建一个能够管理员工及其所在部门的高效应用。下面将详细阐述SSH框架的核心组件以及在系统中的应用。 1. **Struts2**:Struts2作为MVC(模型-...

    struts spring hibernate ssh 三大框架集成详细步骤 手把手教你搭框架

    SSH(Struts + Spring + Hibernate)框架集成旨在实现MVC(Model-View-Controller)设计模式,为业务逻辑、数据访问以及用户交互提供了高效的解决方案。 **Struts框架**: Struts是一个开源的MVC框架,负责处理用户...

    SSH框架——注册登录

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个小例子主要展示了如何使用SSH框架实现一个基本的注册登录功能,非常适合初学者进行学习和实践。 首先,Struts2是...

    ssh框架中的Struts2

    Struts2是SSH(Spring、Struts、Hibernate)框架中的核心部分,是一个强大的MVC(Model-View-Controller)框架,用于构建企业级Java Web应用程序。SSH框架的整合旨在提供一个高效、灵活且可扩展的开发环境,使开发者...

    SSH框架概述——适用得很!

    Spring还提供了事务管理、数据访问抽象、Web MVC框架(Spring MVC,可替代Struts)等功能,使得开发者能更专注于业务逻辑的实现。 在SSH框架中,Struts负责控制流程,Spring负责业务逻辑和服务层的管理,而...

    MVC框架的实现原理,

    "MVC(Model-View-Controller)框架是一种设计模式,常用于构建Web应用程序,它将应用程序的业务逻辑、用户界面和数据访问分离开来,从而提高代码的可维护性和可扩展性。在本篇中,我们将重点探讨MVC框架的实现原理...

    已经封装好的ssh三大框架

    SSH三大框架,即Struts、Hibernate和Spring,是Java Web开发中的经典组合,它们各自承担着不同的职责,共同构建了一个高效、灵活的应用架构。Struts作为表现层框架,负责处理HTTP请求并展示视图;Hibernate作为持久...

    一个简单的ssh框架实现的增删改查

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了模型-视图-控制器(MVC)架构模式,以及依赖注入(DI)和面向切面编程(AOP)等特性,极大地提高了...

Global site tag (gtag.js) - Google Analytics