目录:
【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的IoC...【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装,实现简单灵活的Spring框架(十一)
【SSH进阶之路】一步步重构容器实现Spring的IoC——解决容器对组件的“侵入式”管理的两种方案--服务定位器和IoC容器(九) 【SSH进阶之路】一步步重构容器实现Spring的IoC——工厂+反射+配置文件实现IoC容器(十)
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的MVC架构。本项目涉及的核心知识点是使用Struts2处理表单提交,Hibernate进行数据持久化,以及图片上传的相关技术。下面将详细介绍这些内容...
SSH框架,全称为Struts2、Hibernate和Spring的组合,是一种常见的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。MVC(Model-View-Controller)架构模式则是SSH框架设计的基础,它将应用程序分为三个主要...
### Java之SSH深入浅出——精简剖析:Struts框架详解 #### Struts框架起源与发展历程 Struts框架,作为Apache Jakarta项目的重要组成部分,自诞生之初便承载着推动JavaServer Pages(JSP)、Servlet、标签库及面向...
Struts2提供了一种基于MVC模式的解决方案,它的配置文件通常为`struts.xml`,在这里定义了Action、结果类型、拦截器等元素,实现请求到Action的映射,并控制视图的跳转。 Hibernate是SSH中的持久层框架,它简化了...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是一种经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。这个"SSH框架封装demo"可能是为了展示如何将这三个框架整合并应用于实际项目中。 **...
SSH框架,全称为Struts2 + Spring + Hibernate,是Java Web开发中常用的一种技术栈,它结合了三个强大的开源框架,用于构建高效、灵活且可扩展的企业级应用程序。本教程将带你逐步了解如何搭建SSH框架,并实现登录和...
SSH是Spring、Struts和Hibernate三个开源框架的首字母缩写,它们分别负责应用的依赖注入、MVC模式实现以及对象关系映射。这里我们将深入探讨SSH框架的自动搭建与手动搭建。 首先,让我们了解SSH框架的核心组件: 1...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了模型-视图-控制器(MVC)架构模式,以及依赖注入(DI)和面向切面编程(AOP)等特性,极大地提高了...
SSH框架是Java开发中常用的三大开源框架——Spring、Struts2和Hibernate的组合,它们各自在应用程序的不同层次上提供服务,以实现一个高效且灵活的开发环境。下面将详细介绍这三个框架以及它们的整合。 **Spring...
JavaWeb初级实例中的日志管理系统是一个基于MVC(Model-View-Controller)设计模式的Web应用,它结合了Struts和SSH(Spring、Struts、Hibernate)两大主流框架,为开发者提供了一个简单但完整的日志记录和管理平台。...
这个项目“(进阶)SSH框架实现员工部门管理系统”旨在利用SSH的优势,构建一个能够管理员工及其所在部门的高效应用。下面将详细阐述SSH框架的核心组件以及在系统中的应用。 1. **Struts2**:Struts2作为MVC(模型-...
SSH(Struts + Spring + Hibernate)框架集成旨在实现MVC(Model-View-Controller)设计模式,为业务逻辑、数据访问以及用户交互提供了高效的解决方案。 **Struts框架**: Struts是一个开源的MVC框架,负责处理用户...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个小例子主要展示了如何使用SSH框架实现一个基本的注册登录功能,非常适合初学者进行学习和实践。 首先,Struts2是...
Struts2是SSH(Spring、Struts、Hibernate)框架中的核心部分,是一个强大的MVC(Model-View-Controller)框架,用于构建企业级Java Web应用程序。SSH框架的整合旨在提供一个高效、灵活且可扩展的开发环境,使开发者...
Spring还提供了事务管理、数据访问抽象、Web MVC框架(Spring MVC,可替代Struts)等功能,使得开发者能更专注于业务逻辑的实现。 在SSH框架中,Struts负责控制流程,Spring负责业务逻辑和服务层的管理,而...
"MVC(Model-View-Controller)框架是一种设计模式,常用于构建Web应用程序,它将应用程序的业务逻辑、用户界面和数据访问分离开来,从而提高代码的可维护性和可扩展性。在本篇中,我们将重点探讨MVC框架的实现原理...
SSH三大框架,即Struts、Hibernate和Spring,是Java Web开发中的经典组合,它们各自承担着不同的职责,共同构建了一个高效、灵活的应用架构。Struts作为表现层框架,负责处理HTTP请求并展示视图;Hibernate作为持久...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了模型-视图-控制器(MVC)架构模式,以及依赖注入(DI)和面向切面编程(AOP)等特性,极大地提高了...