SpringMvc与Struts2

一、Spring MVC

1.1 概述

Spring MVC 是 Spring 框架的一部分,是一个基于 MVC 设计模式的轻量级 Web 框架。它提供了灵活的配置和强大的扩展能力,适合构建复杂的 Web 应用程序。

1.2 特点
  1. 轻量级:与 Spring 框架无缝集成,依赖注入和面向切面编程(AOP)支持良好。
  2. 灵活性:支持多种视图技术(JSP、Thymeleaf、Freemarker 等)。
  3. 注解驱动:通过注解(如 @Controller、@RequestMapping)简化配置。
  4. REST 支持:原生支持 RESTful 风格的 Web 服务。
  5. 测试友好:易于单元测试和集成测试。
1.3 核心组件
  1. DispatcherServlet:前端控制器,负责接收所有请求并将其分发给相应的处理器。
  2. HandlerMapping:映射请求 URL 到具体的处理器(Controller)。
  3. Controller:处理请求并返回模型和视图。
  4. ModelAndView:封装模型数据和视图信息。
  5. ViewResolver:解析视图名称并返回具体的视图对象(如 JSP、Thymeleaf 等)。
1.4 工作流程

在这里插入图片描述

  1. 客户端发送请求到 DispatcherServlet。
  2. DispatcherServlet 通过 HandlerMapping 找到对应的 Controller。
  3. Controller 处理请求并返回 ModelAndView。
  4. DispatcherServlet 通过 ViewResolver 解析视图。
  5. 视图渲染并返回响应给客户端。
1.5 示例代码
@Controller
public class HelloController {
    @RequestMapping("/hello")
    public ModelAndView hello() {
        ModelAndView modelAndView = new ModelAndView("hello");
        modelAndView.addObject("message", "Hello, Spring MVC!");
        return modelAndView;
    }
}

二、Struts2

2.1 概述

Struts2 是 Apache Struts 项目的第二代框架,是一个基于 MVC 设计模式的 Web 框架。它继承了 Struts1 的优点,并引入了 WebWork 的设计理念,提供了更强大的功能和更灵活的配置。

2.2 特点
  1. 强大的拦截器机制:通过拦截器实现 AOP 功能(如日志、权限检查等)。
  2. 配置文件驱动:通过 XML 文件配置 Action 和拦截器。
  3. OGNL 表达式:支持强大的数据绑定和表达式语言。
  4. 插件机制:通过插件扩展框架功能。
  5. 社区支持:拥有活跃的社区和丰富的插件。
2.3 核心组件
  1. FilterDispatcher:前端控制器,负责接收所有请求并将其分发给相应的 Action。
  2. Action:处理请求并返回结果(如 SUCCESS、ERROR 等)。
  3. Interceptor:拦截器,用于在 Action 执行前后进行处理(如日志、权限检查等)。
  4. Result:根据 Action 的返回结果选择相应的视图(如 JSP、Freemarker 等)。
  5. ValueStack:用于在视图和 Action 之间传递数据。
2.4 工作流程

在这里插入图片描述

  1. 客户端发送请求到 FilterDispatcher。
  2. FilterDispatcher 通过配置文件找到对应的 Action。
  3. Interceptor 在 Action 执行前后进行处理。
  4. Action 处理请求并返回结果。
  5. Result 根据结果选择视图并渲染响应。
2.5 示例代码

(1)Action 类

public class HelloAction extends ActionSupport {
    private String message;

    public String execute() {
        message = "Hello, Struts2!";
        return SUCCESS;
    }

    public String getMessage() {
        return message;
    }
}

(2)配置文件(struts.xml)

<struts>
    <package name="default" extends="struts-default">
        <action name="hello" class="com.example.HelloAction">
            <result name="success">/hello.jsp</result>
        </action>
    </package>
</struts>

三、Spring MVC 与 Struts2 的对比

特性Spring MVCStruts2
设计理念轻量级,与 Spring 框架无缝集成基于拦截器的 MVC 框架
配置方式注解驱动,支持 XML 配置配置文件驱动(struts.xml)
拦截器机制通过 AOP 实现内置强大的拦截器机制
数据绑定支持多种数据绑定方式使用 OGNL 表达式进行数据绑定
视图技术支持多种视图技术(JSP、Thymeleaf 等)支持多种视图技术(JSP、Freemarker 等)
REST 支持原生支持 RESTful 风格需要插件支持 RESTful 风格
测试友好性易于单元测试和集成测试测试相对复杂
社区支持社区活跃,文档丰富社区活跃,但逐渐被 Spring MVC 取代

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984309.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web—HTML

什么是web ●Web:全球广域网&#xff0c;也称为万维网(www World Wide Web),能够通过浏览器访问的网站。 在浏览器中呈现精美的网页。 1.网页由那几部分组成&#xff1f; >文字、图片、视频、音频、超链接&#xff0c;&#xff0c;&#xff0c; 2.我们看到的网页&#xf…

php虚拟站点提示No input file specified时的问题及权限处理方法

访问站点&#xff0c;提示如下 No input file specified. 可能是文件权限有问题&#xff0c;也可能是“.user.ini”文件路径没有配置对&#xff0c;最简单的办法就是直接将它删除掉&#xff0c;还有就是将它设置正确 #配置成自己服务器上正确的路径 open_basedir/mnt/qiy/te…

INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性

INFINI Labs 产品更新发布&#xff01;此次更新&#xff0c;Easysearch 增加了新的功能和数据类型&#xff0c;包括 wildcard 数据类型、Point in time 搜索 API、异步搜索 API、数值和日期字段的 doc-values 搜索支持&#xff0c;Console 新增了日志查询功能。 INFINI Easyse…

关于OceanBase与CDH适配的经验分享

CDH是Cloudera早期推出的一个开源平台版本&#xff0c;它实质上成为了Apache Hadoop生态系统内公认的安装与管理平台&#xff0c;专为企业级需求量身打造。CDH为用户提供了即装即用的企业级解决方案。通过整合Hadoop与另外十多项关键开源项目&#xff0c;Cloudera构建了一个功能…

解决VScode 连接不上问题

问题 &#xff1a;VScode 连接不上 解决方案&#xff1a; 1、手动杀死VS Code服务器进程&#xff0c;然后重新尝试登录 打开xshell &#xff0c;远程连接服务器 &#xff0c;查看vscode的进程 &#xff0c;然后全部杀掉 [cxqiZwz9fjj2ssnshikw14avaZ ~]$ ps ajx | grep vsc…

[Python爬虫系列]bilibili

[Python爬虫系列]bilibili 具体逻辑 bv号 -> 处理多P视频 -> 拿到cid -> sign -> 请求下载&#xff0c;其中sign参考前人算法&#xff08;https://github.com/SocialSisterYi/bilibili-API-collect&#xff09; b站视频下载链接 https://api.bilibili.com/x/pl…

Linux——工具(3)git——版本控制器

一、git的使用意义 在实际项目中&#xff0c;我们往往写一个项目会经历很多个版本进行测试查缺补漏&#xff0c;然后再发行&#xff0c;但如果发行后我们发现仍出现问题&#xff0c;这时我们就需要撤回到上一个版本进行修改&#xff0c;可是如果我们此时不保存上一次的修改就不…

基于Python的商品销量的数据分析及推荐系统

一、研究背景及意义 1.1 研究背景 随着电子商务的快速发展&#xff0c;商品销售数据呈现爆炸式增长。这些数据中蕴含着消费者行为、市场趋势、商品关联等有价值的信息。然而&#xff0c;传统的数据分析方法难以处理海量、多源的销售数据&#xff0c;无法满足现代电商的需求。…

对WebSocket做一点简单的理解

1.概念 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接 WebSocke…

【AI深度学习网络】Transformer时代,RNN(循环神经网络)为何仍是时序建模的“秘密武器”?

引言&#xff1a;什么是循环神经网络&#xff08;RNN&#xff09;&#xff1f; 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09; 是一种专门处理序列数据&#xff08;如文本、语音、时间序列&#xff09;的深度学习模型。与传统神经网络不同&#xff0c;R…

蓝桥杯备考:图论初解

1&#xff1a;图的定义 我们学了线性表和树的结构&#xff0c;那什么是图呢&#xff1f; 线性表是一个串一个是一对一的结构 树是一对多的&#xff0c;每个结点可以有多个孩子&#xff0c;但只能有一个父亲 而我们今天学的图&#xff01;就是多对多的结构了 V表示的是图的顶点集…

01 SQl注入基础步骤(数字、字符、布尔盲注、报错)

目录 1、SQL注入漏洞的概要 2、SQL注入的常规思路 3、数字型注入 4、字符型注入 5、布尔盲注 6、报错注入 1、SQL注入漏洞的概要 原理&#xff1a;通过用户输入的数据未严格过滤&#xff0c;将恶意SQL语句拼接到原始查询中&#xff0c;从而操控数据库执行非预期操作。 …

【Linux】基础IO_文件系统基础

【Linux】基础IO_文件系统基础 文件目录 【Linux】基础IO_文件系统基础C语言文件IOC语言文件接口汇总什么是当前路径&#xff1f;默认打开的三个流 系统文件I/Oopenopen的第一个参数open的第二个参数open的第三个参数open的返回值 closewriteread 文件描述符fd文件描述符的分配…

批量删除 Excel 中的空白行、空白列以及空白表格

我们经常会碰到需要删除 Excel 文档表格中的空白行及空白列的场景&#xff0c;有一些空白行或空白列可能我们人工不好识别&#xff0c;因此删除空白行空白列对我们来讲就非常的繁琐&#xff0c;因为我们需要先识别哪些 Excel 文档中包含空白行或者空白列&#xff0c;我们才能够…

硬通货用Deekseek做一个Vue.js组件开发的教程

安装 Node.js 与 Vue CLI‌ npm install -g vue/cli vue create my-vue-project cd my-vue-project npm run serve 通过 Vue CLI 可快速生成项目骨架&#xff0c;默认配置适合新手快速上手 目录结构‌ src/ ├── components/ # 存放组件文件 │ └── …

第七课:Python反爬攻防战:Headers/IP代理与验证码

在爬虫开发过程中&#xff0c;反爬虫机制成为了我们必须面对的挑战。本文将深入探讨Python爬虫中常见的反爬机制&#xff0c;并详细解析如何通过随机User-Agent生成、代理IP池搭建以及验证码识别来应对这些反爬策略。文章将包含完整的示例代码&#xff0c;帮助读者更好地理解和…

OSPF:虚链路

一、虚链路概念 在OSPF中&#xff0c;虚链路&#xff08;Virtual Link&#xff09; 是一种逻辑连接&#xff0c;用于解决因网络设计或扩展导致的区域无法直接连接到骨干区域&#xff08;Area 0&#xff09;的问题。它是通过中间区域&#xff08;Transit Area&#xff09;在两个…

openharmory-鸿蒙生态设备之间文件互传发现、接入认证和文件传输

软件版本 OpenHarmony系统版本基线&#xff1a;基于 OpenHarmony-v5.0.0-Release。 图库应用版本&#xff1a;基于OpenHarmony-v5.0.0-Release。 文件管理器应用版本&#xff1a;基于OpenHarmony-v5.0.0-Release。 7 用户历程图 8 设备发现 8.1 设备交互流程图 8.2 设备发…

Linux系统编程--线程同步

目录 一、前言 二、线程饥饿 三、线程同步 四、条件变量 1、cond 2、条件变量的使用 五、条件变量与互斥锁 一、前言 上篇文章我们讲解了线程互斥的概念&#xff0c;为了防止多个线程同时访问一份临界资源而出问题&#xff0c;我们引入了线程互斥&#xff0c;线程互斥其实…

【HarmonyOS Next】鸿蒙加固方案调研和分析

【HarmonyOS Next】鸿蒙加固方案调研和分析 一、前言 根据鸿蒙应用的上架流程&#xff0c;本地构建app文件后&#xff0c;上架到AGC平台&#xff0c;平台会进行解析。根据鸿蒙系统的特殊设置&#xff0c;仿照IOS的生态闭环方案。只能从AGC应用市场下载app进行安装。这样的流程…