`
脱毛程序猿
  • 浏览: 1780 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

手写Servlet 到 Spring MVC 的简化之路

阅读更多
背景

Servlet和JSP是开发Java Web应用程序的两种基本技术,Spring MVC是Spring框架中用于开发Web应用的一个模块。相信大家也和我一样,是从编写Servelt和JSP开始,然后一步步向Spring MVC靠拢。那么Spring MVC到底简化了Servlet什么地方,使Spring MVC成为Web应用开发的首选框架呢,本文将会就这个方面进行探讨。

Servlet简介

什么是Servlet

Servlet是一种基于Java语言,用于创建Web应用程序。在Servlet之前,CGI(通用网关接口)脚本语言作为服务端编程语言很受欢迎,但是这门技术有很多的缺点:

CGI(通用网关接口)CGI即使可以让服务器能够调用外部程序,并将HTTP请求信息传递给外部程序处理,对于每一个请求,会启动一个新的进程。
CGI技术的缺点




客户端数量增加时,响应时间更多
每一个其请求,需要启动一个新的进程,消耗大量的系统资源
使用平台依赖语言,如:C、C++、Perl
Servlet
Servlet的优点



更好的性能:每个请求创建的是线程,而不是进程
可移植性:使用Java跨平台语言
更强大:Servlet有JVM管理,不需要担心内存泄露、溢出等
想学习这些技术的朋友可以加群:582505643。群里会分享这些技术知识点供大家学习免费下载
Servlet的演化

Servlet的基本目录
Servlet接口在最基本的Servlet类中,需要实现Servlet接口定义的init()、servic()、destroy()、getServletConfig()和geServletInfo()方法,其中业务逻辑在service中编写,在service方法中最常用的是通过PrintWriter对象进行内容的输出。




演进1:GenericServlet抽象类实现Servlet接口的时候必须将所有的方法实现,即使方法中没有任何代码。在GenericServlet抽象类的帮助下,只需要重写service方法即可。
在tomcat/webapps目录下创建上述目录结构,所有HTML,静态文件直接保存在应用程序目录下,所有的Servlet类保存在web-inf/classe目录或子目录下,web.xml(部署描述符)文件保存在web-inf目录下。
演进2:HttpServlet抽象类HttpServlet覆盖了GenericServlet类,将ServletRequest和ServletResponse对象分别封装为HttpServletRequest和HttpServletResponse对象。HttpServlet同时实现了service方法,在请求进来时,Web容器首先调用HttpServlet的service方法,并根据请求的类型调用doGet或doPost方法,搜易我们只需要覆盖doGet()和goPost()方法即可。
演进3:JSP的加入

写过Servlet的朋友应该知道,Servlet的最大缺点就是在Servlet类中编写大量繁杂的HTML代码,使得Java代码与HTML代码糅杂在一起,所以JSP应运而生。

JSP本质也是Servelt,然而其不需要编译,JSP页面是一个以.jsp扩展名的文本文件。简单的JSP页面在第一次请求后被翻译为(JSP名)_jsp的servlet,翻译之后的Servelt可以看到:_jspInit(),_jspDestory(),_jspService()这样的方法其实都是和Servlet相对应的。

演进4:Spring横空出世

Spring提供了强大的控制反转(IOC)和依赖注入(DI)功能,达到项目组件的解耦。

演进5:Spring Web模块 - Spring MVC

想学习这些技术的朋友可以加群:582505643。群里会分享这些技术知识点供大家学习免费下载

学过Servlet的朋友应该知道,当要使用Servlet完成的复杂的功能时,需要编写多个Servlet类,并且在web.xml进行注册,这对于完成复杂的Web应用,代码编写会变得很复杂,开发成本也会很高。所以Spring提供了强大的Web开发框架Spring MVC。Spring MVC是Spring产品的一部分,享有Spring松耦合等所有优点。

Spring MVC是一个模型-视图-控制器的Web框架,建立在前端控制器servlet(DispatcherServlet),它负责发送每个请求到合适的处理程序,使用视图来返回响应结果。

Spring MVC的架构:



Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构和用于开发灵活和松散耦合的Web应用程序的组件。MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素之间的松散耦合

模型(Model):封装了应用程序的数据,通常由POJO类组成
视图(View):负责渲染模型数据,一般来说它生成客户端浏览器可以解释HTML输出
控制器(Controller):负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染
DispatcherServlet组件类Spring MVC框架是围绕DispatcherServlet设计的,它处理所有的请求和响应。Spring MVC DispatcherServlet的工作流程:


DispatcherServlet处理HTTP请求的工作流程:

接受HTTP请求后,DispatcherServlet
会查询HandlerMapping以调用相应的Controller(根据请求的url)
Controller接受请求并根据请求的类型Get/Post调用相应的服务方法,服务方法进行相应的业务处理,并设置模型数据,最后将视图名称返回给DispatcherServlet
DispatcherServlet根据返回的视图名称从ViewResolver获取对应的视图
DispatcherServlet将模型数据传递到最终的视图,并将视图返回给浏览器。
总结

至此Servlet到Spring MVC的演化之路落下帷幕,只能感慨,技术的变更和迭代速度远远超乎我们的意料,我们只有不断地学习,才能跟上时代的潮流。
  • 大小: 21.5 KB
  • 大小: 16 KB
  • 大小: 15.4 KB
  • 大小: 29.8 KB
  • 大小: 15.4 KB
分享到:
评论

相关推荐

    基于servlet3.0手写springmvc

    在基于Servlet 3.0的手写Spring MVC中,我们可以使用注解来定义请求映射,比如`@RequestMapping`。 3. **HandlerAdapter**:处理器适配器,它允许Spring MVC处理各种不同类型的处理器,即使它们有不同的接口或实现...

    手写一个简单的 Spring MVC

    在技术实现上,我们可以选择使用Java原生的Servlet API进行开发,也可以利用Spring提供的抽象,比如Spring Web MVC提供的类和接口,来简化开发过程。在编写代码的过程中,我们应该遵循Spring的设计原则和最佳实践,...

    Spring+Mvc手写基本源码+思维导图,快速理解spring+mvc原理

    Spring MVC 是一款强大的Java Web开发框架,用于构建可...手写Spring MVC源码是一个挑战性的实践过程,但能带来深入的理解和技能提升。在这个过程中,思维导图是一个有效的辅助工具,帮助我们梳理和可视化整个流程。

    仿 Spring 手写 MVC 框架_源码.rar

    本教程将带你深入理解Spring MVC的核心原理,并通过仿照Spring MVC,手写一个简单的MVC框架来深化理解。 MVC模式是软件工程中的一种设计模式,用于分离业务逻辑(Model)、用户界面(View)和数据控制(Controller...

    手写spring框架ioc+aop+mvc

    Spring 框架是 Java 开发中的核心工具之一,它为开发者提供了强大的依赖注入(IOC)和面向切面编程(AOP)功能,同时也包含了 MVC 模式来支持 web 应用开发。在这个"手写 spring 框架 ioc+aop+mvc"的项目中,我们将...

    京东T5级大牛带你解读Spring核心源码——1小时手写SpringMVC~

    通过本教程的学习,我们不仅了解了Spring框架的核心概念及其在Web开发中的应用——Spring MVC,还手动实现了Spring MVC的基本功能。这种从理论到实践的学习过程有助于加深对Spring框架的理解,并提高实际项目的开发...

    手写IOC,DI,servlet

    【标题】中的“手写IOC,DI,servlet”指的是开发者独立实现的控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)机制,并结合了Java Servlet技术来构建一个轻量级的Web应用程序框架。...

    SpringMVC精品资源--手写Spring,支持ioc(三级缓存)、aop(cglib)、内嵌tomcat.zip

    Spring Boot项目默认就集成了内嵌Tomcat,但在这里,可能是独立地将Tomcat内嵌到Spring MVC应用中。这样做可以让开发者更专注于应用程序的逻辑,而不是服务器的配置。 这个压缩包很可能包含一系列教程、代码示例和...

    一些手写框架实现包括手写 Spring 核心逻辑SpringBoot StarterORM 框架分别基于 BIOIR.zip

    首先,从标题和描述中我们可以得知,这部分文件内容涉及到了手写实现的Spring框架核心逻辑,以及SpringBoot Starter和ORM框架。这表明我们所面对的文件包含了对于Java中重要的框架如Spring、Spring Boot以及ORM...

    02-01-07-用30个类高仿真提炼纯手写Spring框架V2.0之IOC与DI1

    【Spring 框架的IOC与DI理解】 Spring框架的核心特性之一是控制反转...同时,从Servlet到ApplicationContext的过程揭示了Spring MVC在Web应用中的组织架构,有助于我们更好地设计和实现基于Spring的应用程序。

    手写MVC框架开源架构源码2021.pdf

    我们将探讨如何手写一个简单的MVC框架,主要基于提供的代码片段,这些片段涉及到核心的注解如`@LagouController`、`@LagouService`、`@LagouAutowired`以及`@LagouRequestMapping`,以及一个基础的Servlet `...

    spring3.1.1所有jar包

    3. **Spring JDBC**:简化了JDBC操作,提供了模板类和数据源抽象,减少了手写SQL和处理结果集的繁琐工作。 4. **Spring ORM**:集成各种ORM框架,如Hibernate、JPA,使得数据库操作更加方便。在SSH框架中,Spring与...

    基于Spring+MyBatis+Servlet整合的人员信息管理系统.zip

    Spring框架提供了依赖注入和面向切面编程的能力,MyBatis则作为一个轻量级的持久层框架,简化了SQL操作,而Servlet作为Java Web的基础,用于处理HTTP请求和响应。 【Spring框架】Spring是Java企业级应用开发的核心...

    单独使用Spring 3.1时要加的所有包

    8. **spring-jdbc**: 提供了对JDBC的抽象层,简化了数据库访问,减少了手写SQL和处理结果集的工作。它支持事务管理、数据源配置和模板方法模式,以提高可读性和可维护性。 9. **spring-orm**: 提供了对流行ORM...

    WriteSpring.zip

    最后,为了使这一切运行起来,还需要配置一个Servlet容器(如Tomcat)以及设置Spring MVC的上下文配置,包括DispatcherServlet的初始化参数和视图解析器。 通过手写Spring的IOC容器和Spring MVC的转发、注解案例,...

    spring-4.3.9依赖jar包

    - `spring-jdbc.jar`:提供了对JDBC的抽象层,简化了数据库操作,减少了手写SQL和处理结果集的麻烦。 - `spring-tx.jar`:事务管理模块,支持编程式和声明式事务管理,可与各种持久化技术(如JDBC、Hibernate、JPA...

    SpringMVC精品资源--深入解析SpringMVC核心原理:从手写简易版MVC框架开始(SmartMvc).zip

    配置SpringMVC涉及到web.xml中的DispatcherServlet配置,以及SpringMVC的配置文件(如servlet-context.xml)。在这些文件中,我们需要定义视图解析器、拦截器、数据绑定、异常处理等关键设置。 4. **请求处理流程*...

    00-myspring.war

    本文通过手写Spring,实现Spring MVC基本功能,为学习Spring源码做准备。分三个阶段: 配置阶段:设置application.properties和定义Annotation。 初始化阶段:重写Servlet的init方法,实现加载配置文件,读取配置...

    spring-demo:手写实现Spring核心功能

    项目入口项目的入口为DispatcherSerlvet的init()方法中,在Servlet 的 init 方法初始化了IOC容器和Spring MVC所依赖的组件项目搭建用户配置application.properties配置application.properties作为配置文件,配置所...

Global site tag (gtag.js) - Google Analytics