技术开发 频道

磨刀不误砍柴功—难忘的Java WEB学习经历



    模型含有由视图显示的数据,在J2EE Web应用中,模型一般是JavaBean。Web应用中的模型一般表示一个完整的业务操作的结果对象。这个结果对象通常不是一个真实的领域对象,而是一个只getter,setter方法的对象(如值对象),通常称为伪数据对象。模型没有必要进行进一步的操作,如数据访问等,模型也不应该依赖Serlvet或某一WEB应用框架.

    视图用于呈现模型数据,负责生成标签或其它内容。视图不需要了解控制器或业务对象。视图不应该直接处理请求参数,而是应该由控制器去做。也不应该进行数据查询,如sql查询,视图不应该处理数据查询异常。显图只需要执行必要的显示逻辑,把模型数据通过一定的逻辑呈现给用户。

    控制器是WEB应用中的中枢神经,Web应用控制器的主要职责:校验及获取请数参数,调用业务对象进行业务处理,把从页面获得的请求参数传递给业务对象。通过业务调用获得数据或创建模型数据。在需要保持服务端状态的应用中,创建或操作session状态。创建一个视图,由视图来使用模型数据。

    Front Controller前端控制器与命令模式:采用纯Servlet和JSP的Model 1进行Web开发都是非常复杂的。不可能实现Java开发人员与UI开发人员角色的分离。采用纯serlvet这种纯Java对象中配合HTML标记进行Web开发是非常笨拙的,这样将十分难以维护。采用纯JSP来开发Web应用,JSP可能很容易的嵌入HTML代码,并通过Jsp表达式可以很容易的生成HTML内容,JSP还定义了对象的作用域。关键是可以在Jsp中编写任何Java代码,相比纯Servlet来说,用JSP开发要轻松多了。但是把所有业务代码编写在JSP中,仍然不能把Java开发人员与UI开发人员进行分工。业务方法无法进行测试和重用,代码重用只能是简单的代码复制,这样的Web应用仍然难以进行维护。

    采用Jsp+Servlet的MVC模式进行开发,Java开发人员负责开发Servlet,而UI开发人员设计HTML和编写JSP,每一个请求对应一个Servlet,由Servlet调用业务对象,获得业务数据,并选择视图进行转发。在这里JSP没有了任何业务代码,仅仅是显示数据。这样通过JSP与Servlet相结合的MVC模式,可以让Java开发人员与UI人员进行分工,也便于了业务代码的测试。但是每一个请求都对应一个单一的Servlet,需要产生大量的Servlet类,把许多方法分散到多个Servlet类中,需要对相似的请求过程编写独立的方法,不能进行方法的重用。从而产生大量的重复代码,大量的Servlet配置将非常烦琐,从而需要对大量的Servlet进行维护。如果有一个控制器来接收所有的请求,根据请求的参数,把请求传递一个委托对象,由委托对象来完成以前控制器完成的工作。这个控制器一般由一个Servlet来完成,这就是前端控制器模式。

    这个前端控制器作为一个Web应用的处理中心,用来处理所有相关的请求,对所有请求进行集中控制。前端控制器相当于Web应用的集中处理器,完成所有请求的控制,对所有请求都需要处理的逻辑可以在端控制器中完成。把请求对象传递给委托对象。这个委托对象就像以前的控制器那样工作,也就是命令模式的运用。通过这种方式,一个WEB应用只需要配置一个前端控制器(当然有必要时可以多个),具体的控制逻辑交给委托对象去完成,我把这个委托对象称为控制器,可以很好的实现代码重用,Java开发人员与UI开发人员的真正分离,让开发人员只关心真正的业务实现。而业务对象是真正的POJO对象,可以方便的进行单元测试。

    其实,几乎所有WEB框架都是基于前端控制器,命令模式的MVC运用,如Webwork,Spring MVC,Struts。
0
相关文章