上期回顾,我们说明了自定义MVC工作原理,其中,中央控制器起到了接收浏览器请求,找到对应的处理人的一个作用,但是也存在缺陷,如:
就像在每一次顾客访问前台时,有很多个部门,比如说料理部门,财务部门,每当访问一次,就要new一个此类,代码如下:
解决方案:通过xml建模的知识,到config文件中进行操作。
目的:使代码更加灵活
所以接下来对中央控制器进一步作出优化改进:
以前:
现在改进代码:
1、通过url来找到config文件中对应的action对象
2、然后通过该对象来取到路径名servlet.BookAction
3、然后找到对应的方法执行
DispatcherServlet:
改进思路:
1、通过url来找到config文件中对应的action对象
2、然后通过该对象来取到路径名servlet.BookAction
3、然后找到对应的方法执行
展示效果:(当自己点击列表删除时,出现了“在同一个servlet中调用 del 方法”这效果,说明用xml建模的知识去优化中央控制器成功!)
但是注意,如果我们的路径名不对的话,就会相应的报错
比如:
原因:
所以:
二、参数传递封装优化解决参数冗余问题:
由于在做项目过程中,在servlet类中需要接受很多个参数值,所以就想到要解决当前参数冗余问题。比如:一个实体类Book当中有二十个属性,那么你在进行修改时就要接受二十个值,虽然每次接受语句中的属性值不一样,但从根本上来讲,性质是一样,要接收属性。如下所示:(当时此类没有实现Moderdriver接口)
解决方案:建一个模型驱动接口,使BookAction实现该接口,在中央控制器中将所有要接收的参数封装到模型接口中,从而达到简便的效果。
ModelDriven类(驱动接口类):
DispatcherServlet 中央控制器类:
BookAction类:(注意,在上一张同一个类里,没有实现ModelDriver接口,而如下bookaction类实现了ModelDriver接口,把接受多个参数的属性值语句注释,达到了简便的效果)
Debug运行效果如下:
其中关于解决参数冗余问题关键代码是:
三、对于方法执行结果转发重定向优化解决跳转方式问题:
在我们跳转到另一个界面时,需要许很多关于跳转方式的代码,有重定向,有转发,例如:
重定向:resp.sendRedirect(path);
转发: req.getRequestDispatcher(path).forward(req, resp);
这些代码往往要写很多次,因此通过配置config文件来解决此类问题;
例如这一次我跳转增加页面时是转发,跳转查询界面是重定向:
主界面代码如下:
config.xml :
思路:
1、当点击增加或者编辑时,首先跳转的是中央控制器类(DispatchServlet):获取到url,url将决定要跳到哪一个实体类,
2、之后进入ActionSupport(子控制器接口实现类)通过methodname要调用什么方法,
3、再然后进入到BookAction中调用methodname方法,找到对应的返回值,
4、通过返回值在进入到config文件找到path属性,之后在中央控制器中进行判断,来决定是重定向还是转发。
中央控制器(DispatcherServlet):
ActionSupport(子控制器接口实现类):
BookAction(图中标记的为返回值):
config文件(图中name为返回值,path为要跳转的界面路径名,redirect为跳转方式):
demo2界面:
demo3界面:
运行结果:
1、当点击增加时,跳转到demo2界面,显示效果如下
2.当点击查询时,跳转到demo3界面,显示效果如下:
四、框架配置可变如果config.xml文件名改成mvc.xml,该程序是否还可因运行呢?答案肯定是不行的。
因为 ConfigModelFactory 类里就定义了它的默认路径名如下:
我们可以在DispatcherServlet类里的init初始化里设置它的配置地址:
web.xml :
然后把config.xml改成yangzong.xml即可改变框架配置
到此这篇关于一文了解自定义MVC框架实现的文章就介绍到这了,更多相关自定义MVC框架内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!