简单记录一下测试nginx流量复制功能,为了方便直接使用nginx的docker来做测试
一、拉取nginx镜像
首先拉取nginx:latest镜像,在命令行执行:
1 | docker pull nginx |
响应:
1 | Using default tag: latest |
查看本地镜像:
1 | docker images |
简单记录一下测试nginx流量复制功能,为了方便直接使用nginx的docker来做测试
首先拉取nginx:latest镜像,在命令行执行:
1 | docker pull nginx |
响应:
1 | Using default tag: latest |
查看本地镜像:
1 | docker images |
造一个方形轮子文章目录:造一个方形的轮子
最后的最后,来解决一下静态文件的问题吧,这个问题在9里提出来的,但做的时候才发现其实从加进来DisplayServlet进来开始就已经出问题了,只是我一直没有用到,所以没发现,具体的问题是因为我把DisplayServlet绑定到了”/“路径上,导致所以的请求都被DisplayServlet接收了,包括静态文件,然后按它的逻辑跑一遍肯定是找不到对应的Controller的,最后就返回了404。
解决问题的梳理:
1、指定tomcat的webapp目录为静态资源目录
2、使用DefaultServlet处理静态资源
3、打包后(静态资源在jar包里)处理静态资源访问问题
4、分别验证开发阶段及打包运行阶段静态资源/接口是否可用
指定不用静态目录重新设置一下就可以,之前一直使用的是随机生成的临时目录,而且还没有删除,时间长了会有很多垃圾目录,看了SpringBoot的源码,原来文件还可以在JVM销毁的时候删除,果然Java里还有很多可以学习的地方,直接上代码:
阅读全文 >>造一个方形轮子文章目录:造一个方形的轮子
这一篇没有太多的解决上一篇遗留的问题,静态文件暂时没有处理,继续算做遗留问题,处理了一下Square框架的依赖,修改了mysql数据库驱动的scope配置:
1 | <dependency> |
集成第三方,找了一个比较常用的框架,持久层的Mybatis,起初觉得这东西用起来很方便,没有太细的考虑过,如果要集成他要怎么做,一上手写还是发现了很多问题。
集成的大体思路是:
1、添加square-mybatis项目,做成依赖,处理Mybatis的相关配置
2、demo项目添加Mybatis和square-mybatis依赖
3、添加mapper的xml配置及对应的接口
4、关联使Mybatis框架生效
这里有几个问题:
1、square-mybatis里的代码如果在square框架里加载(因为有Bean操作)
2、Mybatis的mapper.xml文件放在哪?如何加载?
3、打包后怎么保证Mybatis框架生效
这几个问题其实是做之前有大体思路,但做下来发现有些跟写之前想的确实不一样,下边我会尽量记录一下遇到的问题,及解决过程
阅读全文 >>造一个方形轮子文章目录:造一个方形的轮子
上一篇的最后说要把BeansInitUtil类代码优化一下,先来弄一下这个吧,顺便把加入AOP导致多遍历了一遍目录的问题解决一下。
调整的有点多,就不放代码了,写一下主要改动的文件及改动内容吧:
com.jisuye.core包:
BeansMap.java 全方法静态化调用静态的个各map容器
BeanObject.java 添加了BeanClass记录bean类型,在加载AOP切面时使用
ControllerObject.java 添加了beanKey字段,将获取Bean从初始化阶段放到调用阶段,这么做是为了去掉添加AOP功能后多的一遍目录遍历
ControllerObject.java 部分代码:
1 | /** |
造一个方形轮子文章目录:造一个方形的轮子
上一篇的最后说了几个问题,没有处理500、没有处理from表单、没有处理文件上传,文件上传和表单可以算是同一个问题了,偷个懒就先不解决了,思路的话就是把文件单独封装一个接收对象放内存或临时缓存,from表单可以按参数名封装接收参数bean。这里先解决一下500的问题。
程序触发500的情况是在处理Controller方法及后续调用方法的时候产生的,也就是说只要在DispatcherServlet里catch一下invoke()方法,记录一下日志并设置一下返回结果就可以了。
1 | @Override |
日志输出错误的请求uri,并返回500错误。
阅读全文 >>造一个方形轮子文章目录:造一个方形的轮子
接上一篇《造一个方形的轮子6–Controller支持(上)》
接下来添加处理HTTP请求最核心的类DispatcherServlet,JAVA里提供的最原始的支持WEB的标准就是Servlet规范,类似Tomcat、Jetty都实现了Servlet规范,所以添加一个DispatcherServlet类配置到Tomcat容器中,接管所以路径的请求,在统一处理,就可以实现我们的目的,整理一下DispatcherServlet类的处理流程:
阅读全文 >>1、获取HTTP请求类型、ContextPath及RequestURI
2、使用
HTTP请求类型:请求路径
到Beans容器中获取对应的ControllerObject对象3、如果没有对应的方法映射则返回404
4、有对应的方法,则根据参数列表从request中获取对应的参数
5、使用反射方法执行对应的方法并获取返回结果
6、如果返回结果是String类型直接返回,其它类型使用JSON序列化后输出
造一个方形轮子文章目录:造一个方形的轮子
在上一篇《造一个方形的轮子5–数据库支持》的最后提出了一个问题,容器中的bean是多对一的关系,多个key对应的 都是同一个Bean 如果使用循环的方式,就至少会多一倍解析处理依赖注入问题,这个问题可以使用简单的方式处理掉。
BeansInitUtil.java 修改initDI()方法:
1 | /** |
简单解决了一下,添加一个已处理列表,处理之前先判断一下是否处理过,如果在已处理列表中则跳过。
阅读全文 >>造一个方形轮子文章目录:造一个方形的轮子
在上一篇《造一个方形的轮子4–依赖注入》的最后提出了一个问题,按类型简称(不带包名)以及按注解上设置的Bean名字去初始化Bean的时候都会有覆盖问题,比如不同包下的相同的类,或者在注解上设置了相同Bean名字的类,解决方法不允许重复就可以了,暴力一点有重名的直接抛异常。
BeansInitUtil.java 修改loadClass方法:
1 | //......上略 |
造一个方形轮子文章目录:造一个方形的轮子
在上一篇《造一个方形的轮子3–控制反转》的最后提出了一个问题,如果同一个接口有一个以上的实现类,那么在初始化的时候,实现相同接口的BeanObject对象,后一个放入Map容器中时会把前边的覆盖掉,这样肯定有问题,简单处理一下,在BeanObject类中添加一个next指针引用,把他改造成一个可以支持链表的形式。
BeanObject.java 添加:
1 | //......上略 |
在原来的BeansInitUtil.loadClass()方法里修改以下代码:
1 | //......上略 |
造一个方形轮子文章目录:造一个方形的轮子
在上一篇《造一个方形的轮子2–添加配置》的最后又翻车了,现在先把发现的这个问题解决,将square项目的包引用其它项目无法启动的主要原因是没有正确的指定tomcat运行的关键目录,以及读取资源的目录。
也就是说把设置的目录结构调整一下就可以了。
添加一个配置目录的util类,ClassesPathUtil.java:
1 | /** |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true