欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

自己写一个java的mvc框架吧(一)

程序员文章站 2023-02-14 23:12:42
自己写一个mvc框架吧(一) 写之前的一些废话 废话 1 (总是要先随便说点啥) 写了好几年的 java 程序,基本上每个项目都有用到 mvc 的框架,可能是 spring mvc 也可能是 struts 。这些框架怎么用相信大家也都很熟悉了,但是有没有想过自己写一个 属于自己的mvc的框架 呢?有 ......

自己写一个mvc框架吧(一)

写之前的一些废话

废话 1 (总是要先随便说点啥)

写了好几年的java程序,基本上每个项目都有用到mvc的框架,可能是spring mvc也可能是struts。这些框架怎么用相信大家也都很熟悉了,但是有没有想过自己写一个属于自己的mvc的框架呢?有没有想过为啥你请求一个http的地址,你的一个class里的方法就能被执行了呢?现在咱们开始写一个mvc框架吧。

因为2年前自己写过一个mvc的框架,比较烂,但是也能用。所以大致需要的知识点我写在下面,再写一个应该也还是这些东西。

  1. 反射

    基本上要写点框架性质的代码就都需要用到反射的知识。

  2. json,xml之类的配置文件的解析

    或多或少都可能需要一点。

  3. 注解方面的

    如果不想使用配置文件的话,自定义注解是肯定要有的。

  4. servlet

    因为http的入口就是这一个,肯定要用到。如果你要是要用filter,那你就要比较熟悉filter。

  5. asm

    这个是因为要获取方法上的参数名称,使用反射取参数名称一般都是arg0,arg1这样的,除非有特别的配置。

  6. 别的应该没了

废话 2 (大致的一个步骤)

大致说一下要写一个mvc咱们都需要干点啥。

第一步 创建一个映射关系

你需要一个 地址和一个方法的映射(这个地址可是一个http的地址,也可以单纯的就是一个随意的字符串或者别的东西,因为这里写的是mvc框架,所以就确定它是一个http的请求地址)。

这个映射关系可以先用一个java对象保存起来,之后我们可以根据不同的形式来获取到这些数据并填充这个对象。这些数据或许是通过注解,或许是xml文件,也可能是json文件来得到,只需要根据不同的形式来写不同的实现代码就好了,最终只要获取到这个映射关系就好。

第二步 获取方法的详细信息

请求地址与方法的映射创建完成之后,我们需要知道这个方法里面都有那些参数,每个参数的名称和参数类型是什么。

这是使用了asm框架。不了解的的同学可以搜一下,他是一个处理java字节码的工具,各大知名框架里都有用到,非常强大。我在这里用这个的主要原因是使用它获取方法的参数名称,因为反射的话没有特殊配置是取不到正确的名称的,但是我又不想有特殊配置~~~

第三步 获取并转换请求参数

因为我们是通过http请求来调用java的方法,所以我们要把http请求中的参数取出来并转换成为对应方法中实际的参数类型。比如一个方法的入参是 两个int类型的数据,我们就要将http请求中的string类型的数据转换成为int类型。

这一步我们不需要先直接处理http的请求,先用一些string类型的数据做一些测试即可。处理http请求的地方可以在后面再写。

第四步 使用反射执行方法

这里没什么好说的,反射中的知识点。

第五步 写一个http请求的入口,并加一些配置

这里开始写一个请求的入口了,spring使用的入口是一个 servletstruts用的是一个filter,我在这里也用一个servlet

这里我们需要定义一个配置文件,用来描述上面的映射关系。如果要使用注解的形式,还要自定义一些注解,并写一个包扫描的来处理这些注解。总之就是要吧上面定义的 请求地址与方法映射 的这个对象数据填充起来。

然后将每次请求过来之后,根据不同的请求路径,获取其映射的方法。之后执行这个方法。

第六步 处理执行后的结果。

这里可能有点麻烦,因为要能适应到不同的视图解析之类的,可能是jsp,freemarker,或者别的啥的。需要好好设计一下代码。

因为我自己还没有写到,所以先打算以字符串形式直接返回。

废话 3 (再说点啥)

这个东西我刚开始写,代码在:https://github.com/hjx601496320/amvc

至于什么时候写完?这个就要看公司里忙不忙了,但是基本上能保证这个是能写完的。

博客的话一般我是自己先写一部分代码,然后在根据写代码的思路写一点博客,可能写着写着就和之前的不太一样了。不过我尽量吧我自己的思路说清楚。

废话说完了

现在就开始写吧~

嗯。下一篇开始具体更新每一步怎么写。