造一个方形轮子文章目录:造一个方形的轮子
01、添加DispatcherServlet
接上一篇《造一个方形的轮子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序列化后输出
以下是DispatcherServlet.java代码:
1 | package com.jisuye.core; |
对应的修改ControllerObject类,添加如下方法:
1 | /** |
02、配置DispatcherServlet
到目前为止基础的代码基本写完了,现在把DispatcherServlet配置到Tomcat中,修改SquareApplication.run方法:
1 | public class SquareApplication { |
03、添加测试类
现在添加测试类,测试一下Controller。
这里添加一个TestController,有三个方法分别测试Get、Post、Delete方法(Put方法跟Post相同就不做单独测试),参数覆盖@RequestParam和@RequestBody 两种,再结合JdbcTemplate测试一下数据库操作。
TestController.java:
1 | package com.jisuye.service; |
TestVo.java:
1 | package com.jisuye.service; |
ResponseVo.java:
1 | package com.jisuye.service; |
04、测试结果
启动程序,使用Postman测试。
测试Get请求
GET http://localhost:8888/abc/test/hello?name=ixx&a=23
响应结果:
1 | [ |
测试Post请求
POST http://localhost:8888/abc/test/post?id=3
body:
1 | { |
响应结果:
1 | { |
测试Delete请求
DELETE http://localhost:8888/abc/test?id=2
响应结果:
1 | delete id : 2 is success |
测试404请求
测试一下如果路径不存在的情况:
GET http://localhost:8888/abc/test/hello4
响应结果:
1 | <html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/9.0.17</h3></body></html> |
可以看到,返回了404的错误页面。
05、遗留问题
Controller最最基本的功能实现了,但还有很多问题没有处理,比如程序异常的处理(返回500)、form表单参数、文件上传,参数默认值等,下一篇有可能挑一部分解决一下吧…
本篇代码地址: https://github.com/iuv/square/tree/square6
本文链接: http://blog.jisuye.com/2019/07/17/square7/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!