老师让弄个博客网址,不让用大型框架

一、IOC框架设计

1.先弄个简单的IOC模块进行管理bean,无非就是CurrentHashMap<Clazz,ClassInfo<Object...(是否单例啊,分类之类的配置项目)>>的map管理,然后弄很多的工具方法,什么单例注入,多例注入,反射创建类,懒创建类。

2.也模仿spring弄个注解分类扫描,写个@IOCObject@IOCControl注解全局反射注入。区分好普通的beanControl bean,方便后续直接通过容器调用函数的

这里可以管理你的应用的运行,直接主线程设计一个MyIOC.Run();反正死循环卡死就行,如果要回收就用java的gc,咱们就不写销毁过程了。

一、网络层开发

1.使用java.net.ServerSocket类作为底层链接,这里我们就彻底依赖容器就完事了,我的消息直接依赖日期中的Control bean也就是被@IOCControl管理的类

2.然后做一个处理HTTP消息的类。这个你需要解析,具体就是先Split("\n"),第一行提取出来请求类型,url,协议。然后接下来的行数直到一个空行之前就是请求头了

HTTP消息体实际发出的示例:

GET /myre/sssx HTTP/1.1

Host: example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Connection: keep-alive

{“QQT" : "dsdsds"}

全部打包成map转到Control就行,Control可以暴露一个Map参数,然后注解一个@RequestHeader来接收。

3.Body这块暴露一个接口IHTTPConvert暴露一个String转Hashmap<String,T>的接口方便注入Control中参数,这个类可以模仿MVC的HttpMessageConverter

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.http.converter;

import java.io.IOException;
import java.util.List;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.lang.Nullable;

public interface HttpMessageConverter<T> {
    boolean canRead(Class<?> var1, @Nullable MediaType var2);

    boolean canWrite(Class<?> var1, @Nullable MediaType var2);

    List<MediaType> getSupportedMediaTypes();

    T read(Class<? extends T> var1, HttpInputMessage var2) throws IOException, HttpMessageNotReadableException;

    void write(T var1, @Nullable MediaType var2, HttpOutputMessage var3) throws IOException, HttpMessageNotWritableException;
}

4.组合起来,在核心的网络底层调用IOC容器中所有被你整理好的@IOCControl,并且做好通过字符串对比做转发,然后通过你的IHttpConvert(模仿MVC中的消息过滤机制)做好过滤。然后网络层的开发完毕

三、持久层开发

1.持久层开发我们模仿Mybatis,注入一个ConnectionPool,里面根据配置文件也好,属性也好配置好你需要的链接数量,反正你的构造方法这些链接要接好,因为我们容器不管理生命周期,GC的时候要用Object中的重写finalize断开链接就行。然后sql的话,假如要自动生成你可以使用分段生成比如这样MyIOC.get("Connectpool").select("aaa","xxx").from("xxx").where().eq("sss",value)这种流式编程可以让你的代码看上去更加简洁。

四、前端设计

前端就是h5,列表显示博客没什么好说的,然后做个区别用户,markdown编辑博客,弄个大的textarea ,然后做个按钮当用户选择图片的时候就弄个@虚拟地址@ 如果有@就用@@ 如果有@@就输@@@@就行。传到后端就差不多是这样

{
    Txt:"你好我是一篇博客@img1@\n@@没有名字..."
    img1:"sdajflkdaj.......skljsafkladskfjl==",
}

后端直接一手Base64转文件进数据库或者目录,这个java也有提供

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农门卫部的王先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值