1 . 解决跳转问题:添加一个 login 方法,跳转返回一个字符串。
中央控制器DispacherServlet 调用EmpController ,所以字符串返回给中央控制器。如下图所示:中央控制器帮我们统一的做 资源的转发(forward/include) 或 重定向。
1.1 更新 EmpController代码
1.2 更该 DispatcherServlet 代码
1.3 演示效果:
现在XxxController 已经算一个普通的POJO 类了,但是还是和Servlet 耦合,方法的参数中还有HttpServletRquest 。
2 删除 X xx C ontroler 中各方法中的response
改动了跳转后,就可以删除XxxController 中的各个方法的中的HttpServletResponse 参数了。
2.1 EmpController代码
3 下一步,我们改动传参。
几乎每个方法中,都有request.getParameter(“xxx”);方法,我们需要将该方法删掉,变成参数,让XxxController 不要依赖Servlet 。
3.1 EmpController 代码
3.2 变成参数后,谁给我们传参?
将获取参数的过程 — request.getParameter(“xxx”),统一抽取到中央调度器DispatcherServlet 中,来统一获取请求参数。
如果在EmpController 中写个delete 方法参数名叫什么?如果写一个insert ,update 方法呢,每个方法的参数都不一样。 所以我到底要获取哪些参数是,根据当前这个方法的方法签名来决定的。
3.3 在DispatcherServlet 添加统一获取请求参数的代码。
访问测试:http://127.0.0.1:8080/mymvc3/emp.do?ac=login
报错:
因为EmpController 的方法中没有,HttpServletRequest 和HttpServletResponse 了。那么这句代码就无法获取到了。
3.4 修改DispatcherServlet代码
修改代码,通过反射机制获取所有的方法。然后只根据方法名来做判断。
3.5 测试:模拟登录
这么写,获取方法的参数的名字是arg0 ,arg1……,并不能获取真实的方法名。
3.6 要想获取真实的参数名称需要加参数重新编译代码
从JDK8.0开始,有一个反射的新特性,可以获取到参数的方法的名字。做一个小的设置。
java 中获取接口(方法)中的参数名字(eclipse 设置编译参数)(java8 javac–parameters )
这个就表示JVM 虚拟机在编译的时候,所得到的Class 文件里面就带有形参的名称了。
重新编译项目,debug 运行。
再次debug 运行看到已经获得了方法的参数的实际的名称。
3.6.1 maven 工程如何更方便的设置?
3.7 修改DispatcherServlet代码
3.8 invoke 进行调用的时候就不能传递request 和response 了。
3.9 修改EmpController 代码,并新增delete 删除方法
3.10 代码测试:
http://127.0.0.1:8080/mymvc3/emp.do?ac=login&ename=fbb&pwd=123456
http://127.0.0.1:8080/mymvc3/emp.do?ac=login
3.11 访问EmpController 的delete 方法,出现的错误:
访问:http://127.0.0.1:8080/mymvc3/emp.do?ac=delete&eid=1 ; 报错:
EmpController 中delete 方法的参数需要的是一个Integer 类型,
通过反射机制我们该方法需要的类型Parameter 是Integer ,
但是前台传递到后台的是字符串”1″,而不是数字1 ,所以需要进行类型转换。
3.12 测试3.3.12 问题,修改DispatcherServlet 中的代码
3.13 解决3.3.12 问题,再次修改DispatcherServlet 中的代码
3.14 再次测试代码,成功。
http://127.0.0.1:8080/mymvc3/emp.do?ac=delete&eid=1
DispatcherServlet 中的完整代码
3.15 小结:对应的版本mymvc3
写到着,我们的Xxx 只需要考虑,业务功能即可,不需要考虑如何获取参数,资源的跳转问题。 那么之前所写的重复的,请求参数的获取和请求转发或是重定向都不要了。关注业务即可。
jackson jar包
Original: https://www.cnblogs.com/lijili/p/16127061.html
Author: 雾里看瓜
Title: 三,手写SpringMVC框架,第三次改进
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622413/
转载文章受原作者版权保护。转载请注明原作者出处!