❗️你有0条未读消息

背景

上一篇手写了TomCat框架,基本上弄明白了Servlet的核心原理。这一篇里通过手写SpringMVC框架来了解一下我们日常开发中离不开的SpringMVC的基本原理。
我们从上一篇的TomCat框架出发,本篇手写的框架利用上一篇里手写的TomCat框架启动,为了能跟SpringMVC结合使用,上一篇里的TomCat需要进行一些修改适配,如去除xml配置,初始化增加bean实例化操作等。

框架概述

作为一个SpringMVC框架,我们需要提供哪些功能?
首先,我们需要提供一些注解,供配置、注入依赖、标识web接口等;
其次,我们需要提供IOC/DI的功能,以便能够反转依赖;
再者,我们需要能够根据url寻址到合适的JavaBean运行服务

阅读全文 »

背景

TomCat是我们Java Web程序员每天都要打交道的东西,但很多应用框架的存在让我们感觉不到它的存在,”动动手配置下”,框架就帮我们把一切封装好了。
框架的使用极大地方便了我们开发,但仅仅停留在会用阶段还是不够的,做一个”API调用工程师”技术的天花板太低了,这篇博客就记录一下我在学习TomCat工作原理后手写的一个简单的demo框架。

思路

The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies.
引用一句Tomcat官网上的话,Tomcat其实就是一个Servlet的开源实现,因此手写Tomcat也就是手写实现一个Servlet。

写之前我们理一下思路,我们的Tomcat要满足哪些需求?

首先,作为web服务,最基本的,我们请求某个URL路径后,服务要返回相应的输出内容。

要实现这个需求,我们需要利用Socket提供网络服务,其次要有请求分发的能力,将不同的请求分发到不同的服务进行处理。这在我们使用Servlet的时候通常是要配置web.xml。

作为一个框架,要有能将类实例化的能力,最终提供web服务的必然是各个不同服务的Servlet实例。

阅读全文 »

乡村教师

大刘一如既往的人文关怀,科幻外衣下的歌颂人民教师的短篇,值得一读。我在想,如果大牛去写一篇农村题材的长篇,会不会也会很成功。

Effective Java中文版(第三版)

如何写优雅代码?Java程序猿进阶必备

流浪地球

过年期间在一片超高预期的贺岁片中选择了看《流浪地球》,给我的观影感受跟那年看《钢铁侠3》似的,”特效没的说,绝对的震撼,但剧情真的让我不那么感兴趣”。我原本是冲着宣传的硬核科幻去看的,不指望能有《三体》中智子、黑暗森林理论、二向箔、降维打击等如此硬核的概念和设想让人震撼,但也没料想所谓的硬核科幻基本上就是行星发动机及木星引力突变科普了一波洛希极限了。不谈逻辑上的硬伤,但在人类甚至地球生存存亡之际靠一个小女孩强行煽情推动剧情真的看的人尴尬,私以为这部片的两个小孩真的是败笔。扯远了,于是乎找来了大刘的流浪地球原著想看看改编到底有多大,结果什么小男孩小女孩,木星撕碎地球压根没有的事,想来也是,连木星这关都过不去,还扯什么流浪2500年,这不闹着玩吗?大刘这本书里基本上跟电影没有多少关系,书里的主角似乎连个名字都没有,主要描写了主角在即将地球流浪之际的世界见闻,也思考了在末日之际人类的亲情、爱情之类人性可能的变化,甚至有联合政府的坚守和叛军的反叛等等,故事没电影那么戏剧,但逻辑依然在线依然硬核。

设计模式之禅(第二版)

系统性的学习了一遍设计模式,这本书写的还是比较通俗易懂的,语言比较风趣幽默

做自己人生的CEO

被逼成啥样了,我都开始看成功学了。。我一向排斥类似书籍的一个原因在于,这类书的行文风格无一例外都是说一个论点然后举一个例子,貌似是有理论有案例的样子。但问题在于举的例子很难让人有代入感,仿佛是现编出来的一样,屁股决定脑袋,为了说明论点而举的例子。话虽这么说,这本书讲的还是有一些可取之处的。去年开始深刻地意识到技术之外的职场能力非常欠缺,后续还是要有意识的学习。

本来这一篇只是单纯的2018年终总结,在农历新年的最后一个工作日(2018.2.1)已经开始动笔写了。当时归心似箭,已经无心工作、学习,工位上也是稀稀落落的几个同事漫不经心的样子。准备写完总结就下班回家了,不巧的是我是直接在博客的搬瓦工虚拟机线上环境直接写的,写了大半的时候帮同事处理了个问题,回来的时候发现机器ssh已经掉线了,而我在虚拟机上的vimrc设置又关闭了文件备份,真的是瞬间心情就不好了。。。果断将手贱配置的关闭文件备份去除,但也已经无心继续了。于是一份18年年终总结就被这样拖成了年终总结&开工寄语了。

闲言少叙,之前憋了半天的感慨也不复述了,直接对2018年初设立的目标做个简单的回顾,再给新的一年立几个flag,这篇就算如此了吧。

阅读全文 »

背景

通常我们在Controller层接收前端传递的复杂参数时,都会封装一个请求参数类,然后将前端传递过来的参数解析成该请求对象。
这次我遇到的场景,前端传递的参数结构比较复杂,但只有三个字段,其中一个字段又是一个复杂结构,类似这样的结构:

1
2
3
4
5
6
7
8
9
id: xxx;
name: xxx;
data: {
id: xxx,
parentId: xxx,
item1: xxx,
item2: xxx,
......
}

其中的data部分数据结构类已经在其他应用中定义,通过二方包的形式引入,为了省事,不想再在外部定义一个只有”id,name,data”三个字段的请求参数类,于是就在Controoler方法内部定义了一个内部类,供方法自己使用。
然后问题就来了,在参数解析的时候报错:

1
Exception in thread "main" com.alibaba.fastjson.JSONException: create instance error, xxxxx


阅读全文 »

首先说点题外话,今年本来立了个flag,每周写一篇博客,结果写到第18篇就一直停更到现在了,脸都被打肿了。。。
flag实在是不能立啊。今年上半年忙成狗,还没有拿到好的结果,世事难料啊~唯成长不能停息,下半年博客还是要继续写起来,想分享想记录的还是有很多话题,要克服自己的惰性,虽然下半年还有装修的事要忙,也不要给自己立flag了,尽力克服惰性多分享一些多记录一些吧。

目前HTTPS渐渐普及,Chrome还把http服务的网站标记为不安全。之前把藏经阁升级成了HTTPS,博客呢一直没有弄,有一些外部依赖需要整,不像藏经阁单页应用基本无外部依赖,就搞个证书升级下就好了那么简单。今天抽空把博客也升级成了HTTPS,这里就从头做个简单的总结分享下吧。

一. 申请HTTPS证书

HTTPS为什么能保证信息传输的安全性的理论知识我就不多介绍了,简单说一下,如果要提供HTTPS证书,必不可少的是CA证书。证书就像一个权威机构,你接入了就可以保证数据传输的安全性,因为https协议需要加密传输,加解密的过程需要证书授权。
关键地,一个HTTPS证书通常价格不菲,针对个人站点一般都无法承受。好在阿里云提供针对个人单域名的免费证书服务,貌似腾讯云也有类似服务,这里以阿里云的为例介绍。

  1. 购买证书
    从上面链接进入阿里云证书服务,点击购买证书,选择赛门铁克的免费型证书,如图所示

  2. 补全域名信息
    购买成功后返回证书控制台,点击补全补全域名信息
    这里需要注意的是,阿里云会校验你填写的域名是否真的为你所有,需要你去域名解析处增加一条TXT解析记录,指向所要求的值,按照控制台给出的值进行操作即可

  3. 签发完成
    信息补全后系统会自动检测,满足要求后会自动签发,这个过程还是比较快的。通常添加了解析记录后很快就能收到签发短信。
    在控制台里可以看到已签发的证书。

阅读全文 »

18/53,每周一篇博,坚持!

今天七月一号了,不知不觉2018年又已经过去了一半了,工作后压力大感觉时间都过的快了些。想来也是,上了年纪了,现在的一年占你所剩人生的比例越来越重了,不由得让人对时间的流逝关注起来。大家都加油,与诸君共勉。

这一篇博文是小而美的库分享第三篇,准备分享一个SVG图标的库,名字叫做Vivid.js

关于Vivid.js

现如今,我们在web开发过程中,需要用到图标的时候已经很少直接插入一张图片了,更多的时候使用的都是SVG、iconfont形式的图标了。这种图标的好处就是可以自定义大小、颜色等样式。
这其中,国内有阿里开源的阿里巴巴矢量图标库,也有bootstrap之类好用的图标库。
Vivid.js也是一款优秀的矢量图标库,可以作为备选之一。

阅读全文 »

17/53,每周一篇博,坚持!

这一篇博文是小而美的库分享第二篇,准备分享一个JS键盘事件捕获的库,名字就叫做KeyPress

关于KeyPress

我们在web开发过程中,为了给用户带来良好的用户体验,通常就不仅仅需要响应用户的鼠标操作,更多的是需要响应用户的键盘操作。通常这时候我们总是需要各种搜索查询键盘上各个按键对应的键码。
这是一个很繁琐而又没什么技术含量的事。而”KeyPress”这个库基本上就让我们摆脱了查询键码的繁琐过程,托管了我们对键盘映射的响应。
“非常容易使用,大小合理(9kb),没有任何依赖,健壮性良好的键盘输入捕获JS库”,这是KeyPress的自我评价。

阅读全文 »

16/53,每周一篇博,坚持!

(翻译自Github blog)

我很高兴地宣布,微软正在谋求收购Github并且有望在今年年底完成收购协议。虽然最终达成收购还需要几个月的时间,但我们想尽快分享这个消息给大家。

当十年前刚建立Github的时候,我从未想到过这个“标题”。Git是一个强大且优秀的工具(原文niche疑为nice笔误),“云”只是天上的东西,而微软则是一个非常不同的公司。人们谈论到开源和商业的时候,仿佛它们是水火不容的两件事。

阅读全文 »

15/53,每周一篇博,坚持!

  1. 写在前面

    最近在工作中误用了mysql的in查询,导致了一个线上问题,花了我一个下午的时间排查加修复。mysql算是我的一个薄弱项了,主要是没有系统性的训练过。一些没用过的查询方式使用的时候借助搜索引擎,中文技术领域里一些技术分享还是比较坑的,语焉不详的算是一部分,误人子弟的也不乏其人。

    这篇博文就主要整理一下我所梳理的mysql中in的用法及和find_in_set用法的差异所在。也许网上已经有很多的文章介绍了,但不乏一些介绍不够清晰的,我这里的博文都是经过实践验证的,不敢保证一定做到简洁明了人人能懂,但绝不做误人子弟之事。

    阅读全文 »