34岁!100天!学会Java编程(Day29-Day38)—Web后端编程

色彩

“我不想改变世界,我只是不喜欢平庸。”

小小地装了个13,不过照片里不是我,是我前两天看到的一张网图,不过我很喜欢。我们每天熙熙攘攘,庸庸碌碌,留给世界的只是背影,但是有谁知道我们的内心是如此丰富而充满渴望的呢。
转眼10天过去,每天晚上看书编程,除了留下苍老了10天的自己,还有什么呢,我想是希望。
好了,停止文艺,开始码字。

(一)后端编程从零开始—ServerSocket服务器

准备工作还是从技术地图开始查起,找到目的地,优化路线,然后上路。不过后端跟前端不同,技术地图要更复杂,除了软件层面,还涉及硬件层面,以及一堆看不见摸不着的运行机制,总之有点玄之又玄的感觉。没办法,还是从最简单的1+1=2开始学起吧,看了半天,就只有TCP编程我还能看明白点,就从这开始吧。
这部分主要操作两个通信类Socket和ServerSocket,分别用于创建C/S软件结构中的客户端实例和服务器端实例,然后由他们完成一个基本TCP会话。两者的介绍内容有点多,具体请看J2SE的API说明文档:SocketServerSocket,这里我只介绍两者的使用步骤如下图:
[图片上传失败...(image-abd5eb-1512400127676)]
参照该图操作步骤可以分别实现一个简单的往返字符串通信会话,就像发短信一样,不需要任何其他协议支持。但是如果要利用制作好的html/css/js网站来做服务器,使用字节流经典循环读写法,在Edge浏览器/IE中也可以实现。但是这种方法在Chrome浏览器中就不行了,此时在浏览器中显示的是html文件的代码文本,而不是图像。查了下原因,是因为chrome要求得到的信息中必须包含http字头,否则无法识别数据类型(它不知道这是一个html文件,需要http协议来告诉它)。
此时,我们就需要一个http服务器了!!!

理论稍后做介绍,这时候我们有两个解决办法,一是自己查阅http协议格式要求,编程实现一个http服务器,来对TCP通信的消息进行包装和解包;二是找一个现成的http服务器。

这里我自己实现了一个对GET请求的解包和包装程序,分别对应requestProcess和responseProcess两个方法,前者对浏览器发过来的请求进行分解处理,得到想要的信息(主要是requestMethod, requestURI, requestFileType);后者是在向浏览器发送数据之前,先发送一个http格式消息(主要包括response status,content-Type)。
嗯,这个过程我复盘写得很简单,实际过程则是充满各种坑,没办法自学嘛,就只有不停地掉坑填坑。不过还是强烈建议自己编程实现一次,就会对TCP/IP通信,http协议有很深的理解和印象。

网络通信基础知识

进行第一阶段的过程中,强烈地感觉到基础知识的欠缺,这时候就需要缺啥补啥,吃哪补哪大法了。我也没花时间去读大部头书,先上网搜集了一些基础概念,总结如下:


网络通信基础知识

其中重点了解网络结构的TCP/IP五层模型以及HTTP协议格式与消息类型,对于理解前端与后端之间的沟通机制,和对于深入理解ServerSocket以及后面的其他几种服务器实现方式很有帮助。

(二)后端编程进阶—Sun HttpServer服务器

HttpServer是由Sun公司开发的内嵌于JDK的一款简易款服务器,而且是一款真正意义上的http服务器,尽管功能略显简陋,但是运用得当,仍然可以很好地承担超文本静态网站的服务器功能。具体的API接口参见com.sun.net.httpserver包的定义,这里我主要用到了HttpServerHttpExchange两个类。具体使用步骤如下:

Sun HttpServer服务器

该服务器总的来说比较成熟,肯定比我自己编的http服务器代码强,不过对于初学者有一点不利,就是网上搜索学习资料极少,演示代码更少,只有一个展示向浏览器输出简单文本的演示代码,拷贝过来改成网站需要较大的修改和优化。这部分自己摸索也有不少坑,尤其是一个sendResponseHeaders方法中len的长度设置,就花了我不少时间进行尝试,甚至一度放弃用来做网站服务器。不过掌握了之后,测试该服务器的速度性能还是不错的(并发和均衡性能曾被人吐槽,未测)。

这个服务器可以完美地实现不用JSP等动态网页的静态网站,对于
(1)信息展示型网站(中小企业);
(2)有数据交互但是没有网页动态生成的网站(可以对数据库进行数据操作和呈现,但是业务逻辑很简单,所有页面文件已提前用html/css/js编好)的建站都已经足够;
(3)甚至稍简单的动态网页也可以用拼接html字符串的方式或逐行输出生成,但是跟后面介绍的JSP网页比较起来仍然太过原始。

(三)后端编程再进阶—Servlet/JSP服务器

Servlet与JSP是一枚硬币的两面,在某种程度上是等价的。
Servlet面向Java工程师,JSP面向前端工程师,JSP在执行时会被翻译为Servlet程序执行,由Servlet向浏览器输出页面(浏览器无法直接识别.jsp文件)。
其实在学习前端编程的时候,我一直不明白为什么需要动态生成网页,然后转身来到后端发现,对于业务逻辑较复杂的网站,在后端需要将客户端的请求和数据库的数据,按照预设的业务流程进行复杂的处理,需要根据分支条件以显示不同的页面,或者在同一页面有不同的呈现。
所以,对于逻辑复杂网站,动态页面就很有用了!
下面是整理的Servlet/JSP知识点:

Servlet服务器与JSP动态页面

在Java中实现Servlet服务器之前,还有一点准备工作,需要下载一个Tomcat,方法是{Eclipse>窗口>首选项>树节点server>runtime environments>添加>Apache Tomcat v9.0},需注意最好是下载9.0版本,我开始下了一个7.0版本,结果每次运行都报错。
Tomcat是Servlet的一种容器,而Servlet必须运行在容器之上。
有了对前两种服务器的操作和理解,实现一个基本Servlet服务器比较容易,但是要想深入掌握Servlet提供的http服务器之外的各种逻辑处理机制,还是需要找本书看看,我看的是《JSP&Servlet学习笔记(第2版)》,不过建议练习完前两种服务器之后,再看这本书,否则不太好懂。
对于Servlet服务器,简而言之,在实现了HttpServer的功能基础上,还提供了页面调派、重定向、会话管理、监听器、过滤器、异步响应等功能,结合线程池使用,可以称为真正意义上一款强大的服务器软件。
基础的JSP页面编写,需要工程师既懂Java也懂html,这样的综合性人才较少,因此又发展出了EL、JSTL、TagFile等标签语言实现了Java的功能,EL能将运算表达式标签化、JSTL能将循环条件等控制语句便签化,TagFile便签甚至能像对象那样实现标签的继承。如此,前端工程师只要懂标签语言就好了,能更加专注于页面呈现。

(四)CE项目V5.0

本阶段CE项目升级的目标是实现从前端浏览器、后端服务器、数据库全部打通,并根据需要对软件进行重构(按照新的软件架构,重新搭建后端Java代码),并编写必要的JSP页面。
(1)软件架构重构
参照MVC(Model 2)架构模式对应用程序进行重构,软件结构及基本模块重新设计为:


软件重构CEV5.0

模块的功能设计为:


MVC模块功能定义

软件更新实现未完待续…

参考书目:
《JSP&Servlet学习笔记(第2版)》
《Java从入门到精通》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容