深入浅出SpringMVC(小白篇)1

深入浅出SpringMVC(小白篇)2

深入浅出SpringMVC(小白篇)3

近期需进行SpringMVC相关培训,时间1-2小时,培训对象特点:

1. Java,Java web,Spring,网络编程零经验

2. Java, Java web,Java网络基础,HTML/JS/CSS课程刚上完,但未学Spring(真没开玩笑

按以往经验,课堂上把知识点填鸭式讲一遍,效果一般,知其然不知其所以然。所以先试着课堂上讲所以然为主,知识点为辅。知识点靠学员做课后练习来慢慢掌握。

形象的说:让同学们不仅学会怎么在SpringMVC里“搬砖”,且对“搬砖”的作用和目的有一个big picture:请参考三个搬砖人的故事。

So,先有一个概念:搞出SpringMVC是用于解决啥问题的呢?最简洁的答案是:解决web服务端编程的复杂性问题。小白听了当然还是懵逼的,所以我们从网络编程的原始时代开始,慢慢演进到SpringMVC时代,到最后如果同学们(悟性高一点的)能有思路自己写一个简单的mvc框架,就达到目的了。

一、静态时代(原始时代)。这个时代需要求很简单,希望输入一个网址(URL),服务端可返回指定页面:

服务端程序要完成这个需求,至少要做3件事情(暂不考虑URL到服务器IP的映射过程):

1. 获取请求报文的内容,这就需根据HTTP协议栈(TCP/IP四层协议。不懂需度娘一下),一层层的解析收到的报文。

2. 根据解析出来的报文内容,找出应该要响应的网页内容

3. 把网页内容一层层封装,返回给浏览器

基本就是一个请求-响应的简单模式。由于真正业务逻辑在事情2,1和3和Http协议有关,基本是可复用的代码,因此程序猿一般将其设计单独模块:

静态页面(指同一页面,每个网民在某段时间内看到的内容是相同)时代,web服务端编程复杂度低,业务处理模块相对较简单:想办法根据请求地址(url)找到对于的Html即可(同学们思考一下,用什么数据结构来实现较简单)。

二、动态时代

随着web用户量暴增,用户希望和服务端有更多交互(动态页面),如注册,登录,留言,发个交友信息等等。业务处理模块就复杂很多,不止存取html数据,还需存取数据库数据;返回浏览器的数据需根据每次请求不同,组装成不同的网页内容。为提高开发效率,业界做了2件事情:

1. 设计动态web端语言(注:html是静态web语言),更容易编写动态页面数据,如:asp,php等

2. 提供通用的网络处理模块,并提供可以解析动态web语言的环境。此时,业界有人将这提供这两个功能的模块合起叫web容器。如IIS,Apache等。为简单起见,如下示意图未把asp/php解析器部分画出了。

asp和php语言设计初衷是快速开发动态web服务端,因此采用的思路是将语言是嵌入html页面的(如下之间是是动态部分),此类设计的优点是简单快速,缺点是展示内容和业务逻辑揉在一起,而展示和业务逻辑处理一般是多个工种(页面设计者及后端码农)的同事一起完成,当展示和业务逻辑非常复杂时,维护起来就很困难(小白还是不理解为什么的话,可以先记着结论)。

php代码

Java在这个时代已经是业界最风光的学霸,自然不甘心在web服务端编程领域也落后他人,学霸想了更好的招数:不喜欢自己动手设计web容器和动态web语言,只定规范定接口,其它同学照着规范实现。于是制定了(自认为)比其他学霸更优秀的web规范,其中最重要之一是Servlet和JSP规范。

三. Servlet时代(Java web)

Servlet是服务端(Server)小程序(Applet)的意思,可以理解为实现某些接口的类。Servlet可以简单对应到上面的业务处理模块。Servlet规范定义了一些标准接口,Java程序猿只需要实现这些接口即可。

而网络处理、Servlet调用和维护等事情,Java学霸也定义了一套规范,按照这套规范实现的软件,叫Servlet容器,大家也叫web容器,其中优秀成员有:tomcat,jetty,jboss等。规范中要求容器有一个配置文件,叫web.xml,里面可配置哪个url请求对交给哪个Servlet处理(类似于原始时代业务逻辑模块做的事情)?这个现在也是Servlet容器维护,java程序猿表示很开心。

web.xml
FirstServlet片段

看到上面代码,你就知道java程序猿只开心了一秒钟,虽然php是业务逻辑嵌入展示内容,但上面代码也半斤八两,展示内容嵌入业务逻辑代码。Java官方学霸当然不会这么傻,用了一招解决此问题,就是设计一个专门用于展示动态页面的Servlet(解决思路如此简单,小白你肯定也能想到),这个Servlet有个别名,叫JSP。JSP被设计成PHP/ASP,在HTML页面内嵌入少量Java代码以支持动态网页内容,而业务逻辑处理部分,最好也设计成和网络无关的,于是Java学霸用JavaBean(也叫Plain Old Java Object (POJO) )处理业务逻辑部分,于是架构变成这样:

JSP Model 1 architecture

这就是有名的JSP Model 1架构(即页面驱动方式)。在该架构中JSP负责3重要件事:

1)动态页面展示

2)路由请求到具体的JavaBean并对其发起调用

3)解析JavaBean返回的数据,并跳转到相应的页面。

这个架构一定程度解决PHP/ASP语言的痛点,但不彻底,比如事情2),3)属于应用控制逻辑,与展示无关;页面设计者还得和后端码农在同一份JSP上做开发;如果网站1千个页面涉及用户认证,那这个1千个页面可能都有重复的认证相关的代码,这样的模式只适合小型项目,所以Java官方学霸也推出了另外一个架构;JSP Model 2架构。该架构将事情2),3)放入Sevlet,JSP所用到的数据是由Servlet告诉JavaBean,让其产生的。数据产生后,也是由Servlet告诉JSP去哪里取(下图第4步),简单示意图如下(由于网络模块都差不多,所以后面省略).

JSP Model 2 architecture

上图就是用于web服务端的经典MVC架构图(蓝色字体示意)。

这一节引入了很多术语,JavaBean,Servlet,JSP,Controller,View,Model等等,小白们可能心慌,心累,试着解释一下吧;如果还不懂没关系,有个印象即可。但请记住这个套路,拆分更多的模块,来降低后端编程的复杂度(更简洁的说法是:分而治之

如果读者有耐心看到这里,应该感觉到MVC不难啊,都是自然演进的合理结果。这就是本人为什么花时间解释这些历程。反之如果直接强塞这些概念模式给学员,学员会容易懵逼。

对着上图,我们可总结开发java web基本套路:编写JavaBean、Servlet、JSP,配置Servlet容器(如tomcat)的web.xml。下面请做两个练习,对上面的架构和讨论有个基本印象:1)Servlet练手实例;2)一个简单的jsp+servlet实例,实现简单的登录 -

小结:我们从web开发的原始时代走到了Java web时代;了解到了Java web服务端一般由Servlet容器、Servlet、JSP、JavaBean组成;Servlet容器需要符合一定规范,比如通过web.xml配置Servlet等;Servlet也要符合一定规范,HttpServlet定义web相关规范;JSP擅长于表现,Servlet(利用java代码)擅长于控制逻辑以及与业务逻辑打交道,JavaBean适用于网络无关的业务逻辑的实现,这就是Java世界的MVC模式。

你可能感兴趣的:(深入浅出SpringMVC(小白篇)1)