Spring MVC与Struts2区别?思维导图 代码示例(java 架构)

Spring MVC 与 Struts2 的区别

Spring MVC 和 Struts2 都是流行的Java Web框架,但它们在设计理念、架构模式和实现细节上存在显著差异。以下是两者的主要区别:

1. 设计哲学
  • Spring MVC

    • 强调松耦合和依赖注入(DI),使得组件之间的依赖关系更加清晰。
    • 支持面向切面编程(AOP)和事件驱动模型,增强了代码的模块化和可测试性。
  • Struts2

    • 更加关注于Action类的设计,遵循Command模式,每个Action对应一个具体的业务操作。
    • 使用拦截器链来处理请求前后的预处理逻辑,如验证、事务管理等。
2. 控制器机制
  • Spring MVC

    • 控制器由 @Controller 注解标记,并通过 @RequestMapping 等注解映射URL路径到具体的方法。
    • 支持RESTful风格的API开发,提供了丰富的HTTP方法支持(GET, POST, PUT, DELETE等)。
  • Struts2

    • 控制器基于Action类,每个Action都有自己的execute()方法,默认处理所有类型的HTTP请求。
    • 需要配置XML文件来定义Action与URL之间的映射关系,尽管也支持注解方式。
3. 视图解析
  • Spring MVC

    • 视图解析灵活多样,可以通过 ViewResolver 来选择不同的视图技术(JSP, Thymeleaf, FreeMarker等)。
    • 支持直接返回JSON/XML数据作为响应体,无需经过视图层。
  • Struts2

    • 主要使用JSP作为默认视图技术,但也可以集成其他模板引擎。
    • 结果映射(Result Mapping)用于指定执行成功或失败后转向的目标页面或资源。
4. 数据绑定
  • Spring MVC

    • 提供了强大的数据绑定机制,能够自动将表单数据转换为Java对象,并且可以结合JSR-303/JSR-380进行数据验证。
  • Struts2

    • 数据绑定相对简单,主要依赖于OGNL表达式语言来访问和设置Action属性。
    • 内置了类型转换器,但不如Spring MVC那样全面。
5. 配置方式
  • Spring MVC

    • 可以通过XML配置文件或JavaConfig来进行配置,同时也支持基于注解的配置。
    • 在Spring Boot环境下,很多配置都可以自动完成,减少了显式的配置工作量。
  • Struts2

    • 传统上依赖于XML配置文件(struts.xml),虽然现在也支持注解配置,但仍然需要一定的XML配置。
6. 社区和支持
  • Spring MVC

    • 拥有更广泛的社区支持和活跃度,特别是随着Spring Boot的流行,它成为了构建现代Java应用程序的首选框架之一。
  • Struts2

    • 社区相对较小,更新频率较低,但在某些遗留系统中仍有广泛应用。

思维导图结构

  1. Spring MVC

    • 设计哲学
      • 松耦合
      • 依赖注入(DI)
      • 面向切面编程(AOP)
    • 控制器机制
      • @Controller 注解
      • RESTful API支持
    • 视图解析
      • 多种视图技术支持
      • 直接返回JSON/XML
    • 数据绑定
      • 自动表单数据转换
      • JSR-303/JSR-380验证
    • 配置方式
      • XML, JavaConfig, 注解
    • 社区和支持
      • 广泛社区支持
      • 易于学习和使用
  2. Struts2

    • 设计哲学
      • Command模式
      • 拦截器链
    • 控制器机制
      • Action类
      • 默认处理所有HTTP请求
    • 视图解析
      • 主要使用JSP
      • 结果映射
    • 数据绑定
      • OGNL表达式
      • 类型转换器
    • 配置方式
      • XML为主,支持注解
    • 社区和支持
      • 较小社区
      • 更新频率低

代码示例

Spring MVC 示例
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        // 添加数据到模型
        model.addAttribute("message", "Hello, World!");
        // 返回逻辑视图名
        return "hello";
    }
}

这段代码展示了如何使用Spring MVC创建一个简单的控制器,它处理 /hello 路径的GET请求,并将消息添加到模型中。

Struts2 示例
package com.example.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {

    private String message;

    public String execute() throws Exception {
        setMessage("Hello, World!");
        return SUCCESS;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="hello" class="com.example.struts2.HelloAction">
            <result>/WEB-INF/jsp/hello.jspresult>
        action>
    package>
struts>

在这个Struts2的例子中,HelloAction 类继承自 ActionSupport,并实现了 execute() 方法。struts.xml 文件定义了 /hello 请求对应的Action及其结果页面。

总结

Spring MVC 和 Struts2 各有特点,适用于不同的应用场景。Spring MVC 更加现代化,强调松耦合和依赖注入,拥有更好的扩展性和灵活性;而 Struts2 则更适合那些已经采用其架构的老项目或者特定需求下对命令模式有偏好的开发者。选择哪个框架取决于项目的具体要求和技术栈的选择。

你可能感兴趣的:(java,spring,mvc)