这一篇不要过多的纠结代码质量,只要是思想。这一块不看对工作没有影响,但是为了往更高的方向发展,还是需要掌握的。
1. Servlet 优化
1.1 需求
假设我们有一个简易的水果店铺管理系统,对应的有首页展示、新增、删除等功能。最初每一个功能请求我们在后台都有一个对应的Servlet,随着功能的增多,可以看出需要的Servlet也就越多,因为都是Fruit相关的操作,所以可以优化到一个Servlet中。
优化思路是写一个FruitServlet类,然后不同的请求对应其中不同的方法。
1.2 代码
新建fruit.html,根据operate属性区分请求类型。
Servlet3.0里引入了注解,使用@WebServlet注解我们便不用再web.xml中进行配置了
在service中获取operate的值,再根据该值匹配对应的方法。
2. DispatcherServlet 引入
2.1 需求
随着发展,我们又陆续增添别的功能,例如:用户、订单等。这时,便会发现每个新增Servlet中都要写一次FruitServlet中service方法里的请求判断逻辑,而且随着功能的增多,同一个Servlet中switch条件判断也越来越长。所以可以将service方法提取到一个的Servlet中,并对请求判断进行优化。
新增一个DispatcherServlet,并将各个业务Servlet命名为Controller,DispatcherServlet将请求转发到对应的Controller。
2.2 代码
在DispatcherServlet中获取所有“.do”结尾的请求,并对servletPath截取得到fruit。
获得fruit后,在根据fruit获取到FruitController,执行对应的业务方法即可。该如何通过fruit获取到Controller呢?
创建applicationContext.xml,配置请求与controller的映射关系。
DispatcherServlet构造函数中解析applicationContext.xml,获取到fruit与FruitController的对应关系。之后根据获取到的全类名通过反射获取到FruitController对象,保存到beanMap中。
在service中,再根据servletPath截取的请求从beanMap中获取到controller对象,再通过反射调用operate值对应的业务方法。
3. Controller 通用代码优化
可以看到在FruitController中,每个业务方法中都有获取参数与跳转功能,这些通用操作可以提取到DispatcherServlet中。
3.1 跳转优化
FruitController中返回字符串
DispatcherServlet获取Controller方法返回的结果,并跳转到响应的页面。
3.2 同一获取参数
FruitController代码:
DispatcherServlet代码:
注意:需要在idea中设置-parameters参数,否则无法获取参数名。
设置前:
设置后:
暂无评论内容