基于servlet,jsp,来进行MVC思想的剖析 第一部分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于servlet,jsp,来进行MVC思想的剖析 第一部分相关的知识,希望对你有一定的参考价值。
这个简单的MVC遵循下图为整体思路
解读MVC思想(jsp和servlet实现),其实MVC(Model,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的键值对)接下来麻烦了,同学们业不理解下面这段代码啊!那好让我们一起来进行一下学习和解读:
反射编程的一些小的初级体会总结大体如下文字: String A="java.util.Date";都是等效的。
Class.forName(A).newInstance;
new Date();
Date.class.newInstance;
Date d;
d.getClass.newInstance;
那么请问actions(是一个Map)里面存的value是什么东西?答案是已经实例化后的对象.接下来寻找那个资源包吧!如下图:
接着向下看
原理如同actions一样,不解释!
接下来核心代码!
从代码中我们不难发现我们这个前端控制器的主要罗技控制模块为这个都post方法理解起来真的很难,那就让我们一步一步的拆分吧!
74-75由于逻辑地址是*.action也就是说所有的以.action结尾的请求地址都是会被这个类所拦截获取其请求信息,那让我们来看一下这个就是获取了请求地址,然后对请求地址进行拆分, 第一步先获取请求页面.action去除.action就只剩单纯的请求页面了也就是actionurl,78-79行的含义是定义用来处理(model)这个页面的****Action.java和所需要的方法。一个感叹号可以把请求页面分割开来感叹号前面是一个请求页面对应url.properties中匹配的key值,感叹号后就是一个点请求方法,想法十分完美。那么如果没有感叹号就来一个默认的吧,那么什么是默认的呢就是请求页面就是我们直接要跳到的页面方法来一个默认的execute。Handler其实是一个已经实例化的对象,我们前面提到过得,就是把action.properties里面的资源文件全都以key-value(利用反射编程实例化的对象)的方式存起来了,如果为空便是没有取到,那样我们就需要为了不让页面发生异常给一个默认处理model然后调到另一个View层。
以上是关于基于servlet,jsp,来进行MVC思想的剖析 第一部分的主要内容,如果未能解决你的问题,请参考以下文章
JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)
基于jsp+servlet+javabean的MVC模式简单应用
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器过滤器等Web组件以及MVC架构