javaWeb的MVC思想解读

来源:互联网 发布:哈登什么数据是第一 编辑:程序博客网 时间:2024/05/18 00:17

MVC

这个简单的MVC遵循下图为整体思路

解读MVC思想(jspservlet实现),其实MVCModel,view,controllor)思想就是把代码分离开来各自分工合作,首先让我们结合实例来进行分析,看我们这个项目下会有一个 FrontControllor.java这个是用来进行处理请求的一个前段控制期用来处理一个前端发来的请求,让我们先来看一下前端控制器的内部实现原理吧!

继承了HttpServlet类并且覆盖了init()方法,并且通过super.init()可以知道,此方法覆盖相当于追加,大家一定好奇什么是ResourceBundle,那让我们来看一下API是怎么说的:资源包属于这样的系列,其成员共享一个公共的基本名称,但是名称中还有标识其语言环境的其他组件。例如,某个资源包系列的基本名称可能是 "MyResources"。该系列应该有一个默认资源包,其名称与其系列名相同( "MyResources"),如果不支持指定的语言环境,则应该将此资源包用作最后的手段。然后,此系列可根据需要提供特定于语言环境的成员,例如一个名为 "MyResources_de" 的德语资源包。 (我的天啊,小编都惊讶了,这不会是国际化吧?)我的理解是这个类可以统配一些资源包然后根据不同的语言环境切换道当前合适的资源包,让我们看一下这个类是如何使用这个方法的:如下图

实例化ResourceBundle类产生一个rb对象,rb对象属于”action”(知识扩展,通过31行我们可以推理出.getBundle()是一个静态方法,还不知道的小伙伴需要抓紧了复习java基础知识啦!),getKeys()是一个非静态方法,得到的是键值对里面的key的枚举,枚举是Enumeration它具有的方法只有两个,hasMoreElements(),nextElement(),通过key得到value(属于rb的键值对)接下来麻烦了,同学们业不理解下面这段代码啊!那好让我们一起来进行一下学习和解读:

反射编程的一些小的初级体会总结大体如下图 


 

那么请问actions(是一个Map)里面存的value是什么东西?答案是已经实例化后的对象.接下来寻找那个资源包吧!如下图:

接着向下看

原理如同actions一样,不解释!

接下来核心代码!

 

从代码中我们不难发现我们这个前端控制器的主要罗技控制模块为这个都post方法理解起来真的很难,那就让我们一步一步的拆分吧!

74-75由于逻辑地址是*.action也就是说所有的以.action结尾的请求地址都是会被这个类所拦截获取其请求信息,那让我们来看一下这个就是获取了请求地址,然后对请求地址进行拆分,第一步先获取请求页面.action去除.action就只剩单纯的请求页面了也就是actionurl,78-79行的含义是定义用来处理(model)这个页面的****Action.java和所需要的方法。一个感叹号可以把请求页面分割开来感叹号前面是一个请求页面对应url.properties中匹配的key值,感叹号后就是一个点请求方法,想法十分完美。那么如果没有感叹号就来一个默认的吧,那么什么是默认的呢就是请求页面就是我们直接要跳到的页面方法来一个默认的executeHandler其实是一个已经实例化的对象,我们前面提到过得,就是把action.properties里面的资源文件全都以key-value(利用反射编程实例化的对象)的方式存起来了,如果为空便是没有取到,那样我们就需要为了不让页面发生异常给一个默认的处理model然后调到错误页面。

现在又到了93行分析的越来越幸苦了但是我们只要一行一行的拆分终会成功破译源码:其实呢源码就是一个传说但是我是大神啊,我能解决的,嗯,是的,获取实例化对象的类名然后获取这个封装的方法

原创粉丝点击