【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring MVC 的崛起:从 Struts 到 Spring 的演进

devtools/2025/3/19 17:35:20/

 <前文回顾>

点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、Struts:JavaWeb 的“老大哥”

在 JavaWeb 开发里,Struts 曾经是“老大哥”,它用 MVC 模式[1] 把 JavaWeb 开发带入了“新时代”。Struts 的核心是 Action 和 ActionForm,它们分别负责处理请求和封装数据。

1. Action:Struts 的“指挥官”

Action 是 Struts 的“指挥官”,它负责处理请求,调用业务逻辑,再把结果交给 JSP 展示。

Java Code

public class LoginAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form,

                                HttpServletRequest request, HttpServletResponse response) {

        LoginForm loginForm = (LoginForm) form;

        String username = loginForm.getUsername();

        String password = loginForm.getPassword();

        if ("admin".equals(username) && "123456".equals(password)) {

            return mapping.findForward("success");

        } else {

            return mapping.findForward("failure");

        }

    }

}

2. ActionForm:Struts 的“数据搬运工”

ActionForm 是 Struts 的“数据搬运工”,它负责封装表单数据,方便 Action 处理。

Java Code

public class LoginForm extends ActionForm {

    private String username;

    private String password;

    

    public String getUsername() {

        return username;

    }

    

    public void setUsername(String username) {

        this.username = username;

    }

    

    public String getPassword() {

        return password;

    }

    

    public void setPassword(String password) {

        this.password = password;

    }

}

二、Struts 的“辉煌”与“没落”

Struts 虽然“辉煌”过,但它的“没落”也是“命中注定”。Struts 的配置复杂、灵活性差、性能低,让开发者“望而却步”。

1. 配置复杂:Struts 的“硬伤”

Struts 的配置复杂得“让人头大”,得写 struts-config.xmlweb.xml 啥的,配置起来“费劲”。

XML Code

<!-- struts-config.xml 配置 Action -->

<action-mappings>

    <action path="/login" type="com.example.LoginAction" name="loginForm" scope="request">

        <forward name="success" path="/success.jsp"/>

        <forward name="failure" path="/failure.jsp"/>

    </action>

</action-mappings>

2. 灵活性差:Struts 的“短板”

Struts 的灵活性差得“让人无语”,Action 和 ActionForm 得一一对应,开发起来“费劲”。

Java Code

public class LoginAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form,

                                HttpServletRequest request, HttpServletResponse response) {

        // 处理逻辑

    }

}

3. 性能低:Struts 的“软肋”

Struts 的性能低得“让人抓狂”,每次请求都得创建 Action 和 ActionForm,性能“堪忧”。

三、Spring MVC 的崛起:从“小弟”到“大哥”

Spring MVC 是 Struts 的“小弟”,但它用“灵活”和“高效”打败了 Struts,成为了 JavaWeb 开发的“新大哥”。

1. 灵活配置:Spring MVC 的“杀手锏”

Spring MVC 的配置灵活得“让人舒服”,能用注解配置,不用再写 struts-config.xml 了。

Java Code

@Controller

public class LoginController {

    @RequestMapping("/login")

    public String login(@RequestParam String username, @RequestParam String password, Model model) {

        if ("admin".equals(username) && "123456".equals(password)) {

            model.addAttribute("message", "登录成功!");

            return "success";

        } else {

            model.addAttribute("message", "用户名或密码错误!");

            return "failure";

        }

    }

}

2. 高效性能:Spring MVC 的“王牌”

Spring MVC 的性能高效得“让人惊喜”,它用 DispatcherServlet 处理请求,性能“杠杠的”。

Java Code

public class DispatcherServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)

        throws ServletException, IOException {

        // 处理请求

    }

}

3. 注解配置:Spring MVC 的“轻装上阵”

Spring MVC 的注解配置简单得“让人舒服”,能用 @Controller@RequestMapping 啥的,配置起来“顺手”。

Java Code

@Controller

public class LoginController {

    @RequestMapping("/login")

    public String login(@RequestParam String username, @RequestParam String password, Model model) {

        // 处理逻辑

    }

}

四、Spring MVC 的“历史”:从 Spring 2.5 到 Spring 5.0

Spring MVC 从 Spring 2.5 开始就有了,虽然现在 Spring 5.0 已经“普及”了,但 Spring MVC 的“核心功能”依然没变。

1. Spring 2.5:初代“小弟”

Spring 2.5 在 2007 年发布,Spring MVC 是它的“初代小弟”。虽然功能简单,但已经能满足大部分开发需求了。

2. Spring 3.0:引入注解配置

Spring 3.0 在 2009 年发布,引入了注解配置,让 Spring MVC 的“玩法”更加丰富。

Java Code

@Controller

public class LoginController {

    @RequestMapping("/login")

    public String login(@RequestParam String username, @RequestParam String password, Model model) {

        // 处理逻辑

    }

}

3. Spring 4.0:支持 RESTful

Spring 4.0 在 2013 年发布,支持 RESTful[2],让 Spring MVC 的“玩法”更加灵活。

Java Code

@RestController

public class UserController {

    @GetMapping("/users/{id}")

    public User getUser(@PathVariable int id) {

        // 处理逻辑

    }

}

4. Spring 5.0:支持 Reactive

Spring 5.0 在 2017 年发布,支持 Reactive[3],让 Spring MVC 的“玩法”更加高效。

Java Code

@RestController

public class UserController {

    @GetMapping("/users/{id}")

    public Mono<User> getUser(@PathVariable int id) {

        // 处理逻辑

    }

}

五、Spring MVC 的“骚操作”

1. RESTful 风格的“骚操作”

Spring MVC 支持 RESTful 风格,能用 @RestController@GetMapping 啥的,开发起来“顺手”。

Java Code

@RestController

public class UserController {

    @GetMapping("/users/{id}")

    public User getUser(@PathVariable int id) {

        // 处理逻辑

    }

}

2. 文件上传的“骚操作”

Spring MVC 支持文件上传,能用 MultipartFile 处理文件上传,开发起来“顺手”。

Java Code

@PostMapping("/upload")

public String upload(@RequestParam("file") MultipartFile file) {

    // 处理逻辑

}

3. 异常处理的“骚操作”

Spring MVC 支持全局异常处理,能用 @ControllerAdvice@ExceptionHandler 啥的,开发起来“顺手”。

Java Code

@ControllerAdvice

public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)

    public ResponseEntity<String> handleException(Exception e) {

        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());

    }

}

专有名词解释:

  1. MVC 模式:Model-View-Controller,一种设计模式,用于将应用程序分为模型、视图和控制器三层。
  2. RESTful:一种基于 HTTP 协议的架构风格,强调资源的表述和状态转移。
  3. Reactive:一种响应式编程模型,支持异步、非阻塞的操作。


http://www.ppmy.cn/devtools/168405.html

相关文章

在windows10系统上安装docker,然后在容器中运行GPU版本的Pytorch,并使用vscode连接该容器

一 . 安装Docker Desktop 首先打开网址https://docs.docker.com/desktop/install/windows-install/ 下载完后&#xff0c;双击下面的exe文件进行安装&#xff0c;默认情况下&#xff0c;Docker Desktop 安装在C:\Program Files\Docker\Docker 出现提示时&#xff0c;请确保…

ffmpeg基础整理

FFmpeg 是一个开源的跨平台 多媒体处理工具 &#xff0c;可以用于 录制、转换、编辑、流式传输 音视频文件。它支持几乎所有常见的音视频格式&#xff0c;功能极其强大&#xff0c;是开发者、视频创作者常用的命令行工具。 一、FFmpeg 核心功能 格式转换&#xff1a;将视频/音频…

【CentOS】搭建Radius服务器

目录 背景简介&#xff1a;Radius是什么&#xff1f;Radius服务器验证原理搭建Radius服务器环境信息yum在线安装配置FreeRADIUS相关文件clients.conf文件users文件重启服务 验证 参考链接 背景 在项目中需要用到Radius服务器作为数据库代理用户的外部验证服务器&#xff0c;做…

每天五分钟深度学习框架pytorch:基于pytorch搭建循环神经网络RNN

本文重点 我们前面介绍了循环神经网络RNN,主要分析了它的维度信息,其实它的维度信息是最重要的,一旦我们把维度弄清楚了,一起就很简单了,本文我们正式的来学习一下,如何使用pytorch搭建循环神经网络RNN。 RNN的搭建 在pytorch中我们使用nn.RNN()就可以创建出RNN神经网络…

PostgreSQL:简介与安装部署

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

C# WPF编程-边框控件(Border)

C# WPF编程-边框控件&#xff08;Border&#xff09; WPF中的Border控件。在WPF中&#xff0c;Border是一个非常有用的控件&#xff0c;它可以用于为其他控件或容器添加边框和背景。Border只能包含一个子元素&#xff0c;但这个子元素可以是另一个容器&#xff08;如Grid, Stac…

Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实战指南

Spring Boot拦截器&#xff08;Interceptor&#xff09;与过滤器&#xff08;Filter&#xff09;深度解析&#xff1a;区别、实现与实战指南 一、核心概念对比 1. 本质区别 维度过滤器&#xff08;Filter&#xff09;拦截器&#xff08;Interceptor&#xff09;规范层级Serv…

Android的消息机制

Android的消息机制-从入门到精通 前言Android消息机制概述Android 的消息机制分析ThreadLocal 的工作原理消息队列的工作原理Looper的工作原理Handler的工作原理 主线程的消息循环 前言 作为开发者&#xff0c;提及Android的消息机制&#xff0c;必然绕不开Handler&#xff0c;…