Spring mvc和Servlet

【Spring学习笔记】servlet、jsp、mvc与spring mvc Web前端开发发展历程 1、servlet—一种JavaEE web组件技术,是一种在服务器端执行的web组件,用于接收web用户请求并处理,最后动态产生响应给用户。但每次请求只产生一个线程(而且有线程池),轻量级。而且能利用许多JavaEE技术(如JDBC等)。本质就是在java代码里面 输出 html流。但表现逻辑、控制逻辑、业务逻辑调用混杂。 这种做法是绝对不可取的,控制逻辑、表现代码、业务... 阅读详情

Spring mvc和Servlet

总结:

Servlet:性能最好,处理Http请求的标准。

SpringMVC:开发效率高(好多共性的东西都封装好了,是对Servlet的封装,核心的DispatcherServlet最终继承自HttpServlet)

这两者的关系,就如同MyBatis和JDBC,一个性能好,一个开发效率高,是对另一个的封装。
 

springmvc是一个基于spring的web框架,

一、springmvc请求处理流程

 引用spring in action上的一张图来说明了springmvc的核心组件和请求处理流程:

 

     ①:DispatcherServlet是springmvc中的前端控制器(front controller),负责接收request并将request转发给对应的处理组件.

  ②:HanlerMapping是springmvc中完成url到controller映射的组件.DispatcherServlet接收request,然后从HandlerMapping查找处理request的controller.

  ③:Cntroller处理request,并返回ModelAndView对象,Controller是springmvc中负责处理request的组件(类似于struts2中的Action),ModelAndView是封装结果视图的组件.

  ④ ⑤ ⑥:视图解析器解析ModelAndView对象并返回对应的视图给客户端.

 

二、springmvc的工作机制

  在容器初始化时会建立所有url和controller的对应关系,保存到Map<url,controller>中.tomcat启动时会通知spring初始化容器(加载bean的定义信息和初始化所有单例bean),然后springmvc会遍历容器中的bean,获取每一个controller中的所有方法访问的url,然后将url和controller保存到一个Map中;

  这样就可以根据request快速定位到controller,因为最终处理request的是controller中的方法,Map中只保留了url和controller中的对应关系,所以要根据request的url进一步确认controller中的method,这一步工作的原理就是拼接controller的url(controller上@RequestMapping的值)和方法的url(method上@RequestMapping的值),与request的url进行匹配,找到匹配的那个方法;  

  确定处理请求的method后,接下来的任务就是参数绑定,把request中参数绑定到方法的形式参数上,这一步是整个请求处理过程中最复杂的一个步骤。springmvc提供了两种request参数与方法形参的绑定方法:

  ① 通过注解进行绑定,@RequestParam

  ② 通过参数名称进行绑定.
  使用注解进行绑定,我们只要在方法参数前面声明@RequestParam("a"),就可以将request中参数a的值绑定到方法的该参数上.使用参数名称进行绑定的前提是必须要获取方法中参数的名称,Java反射只提供了获取方法的参数的类型,并没有提供获取参数名称的方法.springmvc解决这个问题的方法是用asm框架读取字节码文件,来获取方法的参数名称.asm框架是一个字节码操作框架,关于asm更多介绍可以参考它的官网.个人建议,使用注解来完成参数绑定,这样就可以省去asm框架的读取字节码的操作.

三、源代码的分析

 我们根据工作机制中三部分来分析springmvc的源代码.

    其一,ApplicationContext初始化时建立所有url和controller类的对应关系(用Map保存);

    其二,根据请求url找到对应的controller,并从controller中找到处理请求的方法;

    其三,request参数绑定到方法的形参,执行方法处理请求,并返回结果视图.

 

posted @ 2019-04-01 22:12 toov5 阅读(...) 评论(...) 编辑 收藏

Java Servlet 与 Spring MVC 的集成对比 本文的目的是深入对比 Java Servlet 与 Spring MVC 的集成情况,帮助开发者了解它们的优缺点、适用场景等。范围涵盖了两者的基本概念、工作原理、集成方式、实际应用等方面。 阅读详情

相关推荐

一图文带您认识磁编码器

磁编码器是以磁电原理技术生产的编码器。 磁编码器工作原理: 当电流通过一个位于磁场中的导体的时候,磁场会对导体中的电子产生一个垂直于电子运动方向上的的作用力,从而在垂直于导体与磁感线的方向上产生电势差。 如果让施加在这个导体上的磁场以电流流经路径为轴线,按照上图箭头所示的方向旋转,那么这个霍尔电势差就会因为磁场与导体之间角度的改变而发生变化,而这个电势差的变化趋势,与之前一文中次级线圈旋转时的输出电压一样,是一条正弦曲线。因此,基于这个通电导体两侧的电压,就可以反推计算出磁场旋转的角度了。 .

encoder_yang的博客 2万+

SpringMVC

同时在接口的AbstractDispatcherServletInitializer实现类的onStartup()方法中调用this.registerDispatcherServlet(servletContext)方法。在接口的AbstractDispatcherServletInitializer实现类的onStartup()方法中调用this.registerDispatcherServlet(servletContext)方法。处理请求,只需要在Controller类中编写处理请求的方法。

2301_80220193的博客 1009

【IC】Redhawk-SC输入件配置

Redhawk sc

u011808788的博客 1777

附加:【Servlet】和【Spring MVC】的关系;【Servlet】体系简述;

说明: (1)为什么写本篇博客?: ● 在【Spring MVC拦截器1:拦截器入门一:拦截器(interceptor)简介;拦截器开发流程简介;演示了拦截器最基本的配置流程;】中:这是一个SpringMVC项目,然后在这个项目中我们引入了servlet-api.jar依赖;当时心里就像,SpringMVC就是用来替代Servlet的,为什么在一个SpringMVC项目中,还需要引入servlt-api.jar? ●自然,在【Spring MVC拦截器...

小枯林的博客 4235

节卡Jaka Zu APP编程避坑指南:从频繁通讯错误到稳定Socket交互的调试心得

本文详细解析了节卡Jaka Zu APP编程中常见的通讯错误问题,并提供了从基础排查到高级调试的完整解决方案。通过优化网络配置、固件匹配、心跳机制和数据交互规范,开发者可实现稳定的Socket通讯,有效提升工业机器人操控的可靠性。文章特别针对v1.6.7.3版本的典型问题给出了实用调试技巧。

weixin_42639633的博客 325

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

weixin_44312889的博客 3778

一文带你搞懂Spring MVC和servlet(面试必备)

一、Spring MVC与Jsp/Servlet比较1、传统的 Jsp/Servlet 技术体系弊端2、Spring Web MVC 特点3、Spring MVC工作流程二、idea创建servlet项目1、搭建过程2、servlet的工作流程3、servlet的生命周期三、idea创建Spring MVC项目1、搭建过程2、Spring MVC接口解释接口解释DispatcherServlet...

qq_36908783的博客 9318

京东豆自动领取脚本配置教程

腾讯云/阿里云服务器(Docker环境):全自动跑脚本领京豆(无需本地代理,使用加速源)

AIOT魔法师 862

带着新人简单看看servlet到springmvc

  好久都没有写博客了,不是因为自己懒了,而是总感觉自己知道的只是太少了,每次想写博客的时候都不知道怎么下手,不过最近看到一篇博客说的是springmvc,给了我比较大的兴趣,感觉一下子对整个springmvc框架一下子清晰了,很多感觉模糊的东西一下子就清晰明了的。   我把那个老哥原博客网址贴出来:https://www.cnblogs.com/xdp-gacl/p/4101727...

dhno28304的博客 827

R语言机器学习算法实战系列(十三)随机森林生存分析构建预后模型 (Random Survival Forest)

本教程运用随机森林生存分析筛选与患者生存状态显著相关特征。该方法借随机森林这一强大机器学习算法,构建多棵决策树并集成结果,以提高生存分析准确性,识别关键生物标志物。接着,利用选定特征构建风险得分,将多个特征转化为单一数值,量化患者风险水平。之后,依据风险得分将患者分为高、低风险亚型,为临床治疗提供个性化指导。最后,通过分析时间依赖的 ROC 曲线评估模型长期预测能力。此曲线计算不同阈值下的真正例率与假正例率,在多个时间点评估,全面展现模型长期稳定性与准确性。

专注生信领域 2022

YOLOv11改进 | 融合改进篇 | 利用尺度统一检测头DynamicHead融合P2增加小目标检测层(让小目标无所遁形)

本文给大家带来的最新改进机制是针对性的改进,针对于小目标检测增加P2层针对于大目标检测增加P6层利用DynamicHead(原版本一比一复现,全网独一份,不同于网上魔改版本)进行检测,其中我们增加P2层其拥有更高的分辨率,这使得模型能够更好地捕捉到小尺寸目标的细节。我们增加P6层是一个较低分辨率但具有更大感受野的特征层。对于大尺寸目标,这意味着模型可以更有效地捕捉到整体的结构信息。在这些的基础上我们配合DynamicHead可以使模型根据不同尺寸的目标动态调整其检测策略,进一步提升模型的精度。

Snu77的博客 3951

Servlet和SpringMVC

目录 Servlet概述 Servlet流程 搭建过程 初始化过程 执行过程 Servlet--细节 SpringMvc概述 SpringMvc流程 搭建过程 核心组件类 执行流程 Servlet与SpringMvc Servlet概述 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,您可以收集来自网页表单的用户输入,呈

fengwuJ的博客 2181

本地快速部署谷歌开放模型Gemma教程(基于Ollama)

谷歌最近发布了新一代开源AI模型Gemma,此次发布的 Gemma 相比自家的 Gemini 更加轻量级,模型权重也一并开源。不仅可以在笔记本电脑上运行,而且还免费可商用,支持中文。运行速度飞快。

特立独行的博客 6716

Servlet JSP和Spring MVC初学指南

最近系统学习了下servlet,JSP和spring MVC的知识,推荐一本入门参考书《Servlet、JSP和Spring MVC初学指南》,作者是加拿大人Budi Kurniawan和美国人Paul Deck,林仪民、俞黎敏译。该书共24章,主要分为两部分,第一部分讲解Servlet的相关知识;第二部分讲解Spring MVC。书中每一章中都配有代码,可以对着书本敲一下,加深理解。 首先,什么...

nfzhlk的专栏 3922

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring MVC和servlet

Servlet_生命周期:首先加载servlet的class,实例化servlet,然后初始化servlet调用init()的方法,接着调用服务的service的方法处理doGet和doPost方法,最后是我的还有容器关闭时候调用destroy 销毁方法。在GenericServlet中执行public void init(ServletConfig config)方法的时候,又调用了自己无惨无方法体的init()方法,其目的是为了方便开发者,如果开发者在初始化的过程中需要实现一些功能,可以重写此方法。

weixin_37878255的博客 1261

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

从Servlet到Spring MVC,究竟简化了什么?

这篇文章通过对比Servlet和Spring MVC的实现方式,揭示了两者的关系与差异。Servlet作为Java Web开发的基础,需要手动处理HTTP请求/响应、参数解析和视图渲染,配置繁琐;而Spring MVC基于Servlet构建,通过注解和框架封装简化了开发流程。文章通过"查询用户"案例,展示了Servlet需要编写大量模板代码,而Spring MVC提供了两种模式:传统的返回视图方式(@Controller)和现代的REST API方式(@RestController)。后

qq_44199605的博客 742

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Spring MVC 是如何建立在 Servlet API 之上的?

Spring MVC 巧妙地利用了 Servlet API 提供的基础构件和扩展点,在其上构建了一个功能丰富、结构清晰、易于使用的 Web 框架,大大提高了开发效率。它没有重新发明轮子,而是站在了巨人的肩膀上。我们来探讨一下 Spring MVC 是。

专注于技术分享 840

Servlet 和 Spring MVC:区别与联系

Servlet 是 Java Web 的基础组件,而 Spring MVC 是一个高级 Web 框架,建立在 Servlet 的基础之上,提供了强大的功能和易用性。这篇文章将从定义、原理、功能对比、应用场景等多个方面,详细介绍 Servlet 和 Spring MVC,并解析它们的区别与联系。Servlet 是 Java Web 应用的核心组件,是一种运行在服务器上的小程序,专门用于处理客户端的 HTTP 请求并生成动态响应。Spring MVC 的实现更加简洁且功能强大。以下代码实现相同的功能。

qq_44199605的博客 2844

Spring MVC 中 Servlet API 的使用详解

虽然 Spring MVC 提供了许多高级抽象,但在某些场景下直接使用 Servlet API 仍然是必要的。合理使用 Servlet API 的关键在于:在需要底层访问时使用(如文件操作、流处理)优先选择 Spring 的高级抽象以提高开发效率和代码可读性理解线程安全性和作用域问题在控制器中直接声明等参数作为首选方法通过结合 Spring MVC 的高级特性和原生 Servlet API,开发者可以灵活应对各种复杂需求,同时保持代码的简洁性和可维护性。

m0_75107803的博客 946

Spring MVC servlet 迁移到Spring Boot

Spring MVC servlet 迁移到Spring Boot,Spring Boot servlet

雨陆聪辰的博客 1274

【Java后端基础 004】Spring MVC 到底帮我们省了什么?和 Servlet 有啥关系?

了解springmvc的基础概念+为什么不用servlet?

金哥的博客 667

Spring MVC、Servlet、tomcat的联系

文章目录1. Servlet1. Servlet的生命周期2. 面试问题:Servlet如何同时处理多个请求访问?2. Spring1. Spring 中的Bean2. Spring MVC 1. Servlet 在IDEA中可以看到,Servlet就是一个普通的接口: public interface Servlet { void init(ServletConfig var1) th...

eternal_yy 337

从Servlet到Spring MVC,从Spring MVC到Spring BootC

而这些配置文件中的很大一部分都是固定不变的,理论上讲我们可以让框架去代替我们完成这些不变的部分,我们只需要给出变化部分的值就可以了。如果我们能够让整个系统的有一个非常清晰的层次结构,而不是所有代码都在Servlet中,代码的可读性、可维护性就能够有显著提高,使用Spring MVC就能够达到这个目标。Spring MVC的就是在Servlet的基础上,通过各种注解、注解的解析类以及支持jsp视图等各种类型视图的类来完成MVC功能的一个MVC框架。使用Spring Boot就能够达到这个效果。

工作学习记录分享 480

AI回答 | spring,springboot,spring MVC,servlet, spring web之间的联系与支持

向GPT提问:spring,springboot,spring MVC,servlet, spring web之间的联系与支持

你个无聊小demo的博客 1347

Spring MVC 与 Servlet 万字详解

本文深入解析了Servlet技术与SpringMVC框架的核心特性和应用场景。Servlet作为JavaEE规范的服务器端组件,详细介绍了其生命周期、HTTP请求处理机制以及配置部署方式。SpringMVC部分重点阐述了其前端控制器设计模式、RESTful控制器实现、数据绑定验证机制以及Thymeleaf模板引擎集成。通过对比分析,Servlet更适合对性能要求高的简单应用,而SpringMVC在企业级复杂应用中展现出开发效率和生态集成的优势。文章还提供了项目结构规划、安全集成等最佳实践,为Java Web

油墨香^-^的博客 691

Spring MVC 和 Servlet API (HttpServletRequest, HttpServletResponse, ServletContext) 是什么关系?

它极大的简化和规范了 Web 应用的开发流程,让我们能更专注于业务逻辑而不是底层的 HTTP 协议。Spring MVC Controller 代码最终还是运行在 Servlet 容器中,并通过底层的 Servlet API 与容器进行交互。了 Servlet API,提供了一套更高级、更结构化、更易于开发 Web 应用程序的抽象和工具。简单来说,Servlet API 是 Java Web 开发的。,而 Spring MVC 是建立在这块基石上的一个强大。Servlet API,而是。

专注于技术分享 1714
上一篇: 总结
下一篇: Tomcat
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值