实战SimpleMVC开发应用

简介:

  SimpleMVC 是一个通用的MVC框架,适用于企业应用与互联网应用平台,是一个成熟的、耦合性很低的优秀框架,本文将结合实例来介绍如何使用它来进行 J2EE 的开发。

  我们在基于SimpleFramework开发应用组件,一个概念是SimpleMVC,它可以方便的解决我们遇到的问题,那么到底如何使用?本篇文档组件以具体的例子介绍下SimpleMVC。下面先对mvc概念做一个回顾,然后,介绍SimpleMVC。

MVC 回顾:

  在使用JAVA技术建立Web应用的实例中,由于JSP技术的发展,很快这种便于掌握和可实现快速开发的技术就成了创建Web应用的主要技术。JSP页面中可以非常容易地结合业务逻辑(jsp:useBean)、服务端处理过程(jsp:scriplet)和 HTML(<html>),在JSP页面中同时实现显示,业务逻辑和流程控制,从而可以快速地完成应用开发。现在很多的Web应用就是由一组 JSP页面构成的。这种以JSP为中心的开发模型我们可以称之为Model 1。

 当然这种开发模式在进行快速和小规模的应用开发时,是有非常大的优势,但是从工程化的角度考虑,它也有一些不足之处:

  1. 应用的实现一般是基于过程的,一组JSP页面实现一个业务流程,如果要进行改动,必须在多个地方进行修改。这样非常不利于应用扩展和更新。
  2. 由于应用不是建立在模块上的, 业务逻辑和表示逻辑混合在JSP页面中没有进行抽象和分离。所以非常不利于应用系统业务的重用和改动。

考虑到这些问题在开发大型的Web应用时必须采用不同的设计模式--就出现了 Model2

Model 2 表示的是基于MVC模式的框架。MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重 用。从而弥补了Model 1的不足。

Model 2具有组件化的优点从而更易于实现对大规模系统的开发和管理,但是开发MVC系统比简单的JSP开发要复杂许多,它需要更多的时间学习和掌握。同时新东西的引入会带来新的问题。传统的Model 2 也有以下问题:

  1. 基于MVC组件的方式重新思考和设计应用结构。原来通过建立一个简单的JSP页面就能实现的应用现在变成了多个步骤的设计和实现过程,并且很多业务模块没办法更好的复用。
  2. 所有的页面和组件必须在MVC框架中实现,所以必须进行附加地开发工作。

SimpleMVC 把组件化的思想应用到业务模块的开发中,SimpleMVC提供统一的组件开发规范,而是使用SimpleMVC就是基于jsp技术就可以完成工作。可以保证开发效率更高,更灵活。

MVC本身就是一个非常复杂的系统,所以采用MVC实现Web应用时,最好选一个现成的MVC框架,在此之下进行开发,从而取得事半功倍的效果。现在有很多可供使用的MVC框架,基于Simplemvc 开发功能灵活的组织机构管理,支持企业应用的组件库,也有类似文件存储,论坛,博客,消息等企业或者网站常用的功能,所以基于Simplemvc开发MVC系统更方便,效率更好。

SimpleMVC的结构和处理流程简介

   SimpleMVC是一个比较好的MVC框架提供了对开发MVC系统的底层支持,它采用的主要技术是基于Filter的后处理和组件开发定义接口。

SimpleMVC 框架的基本构成由下图所示:

实战SimpleMVC开发应用

基本流程由“组件描述”、“注册中心”、“组件资源”、“渲染器”四大部分组成,更多可以参考官方http://simpleframework.net/doc/d2/2.2.2.html的介绍.

利用SimpleMVC框架开发实战

下面我们用 SimpleMVC 来实现一个典型查询功能,在访问jsp的请求发出后完成数据的查询,然后对查询的数据进行展现。为了更清楚的理解Simple是基于组件开发的思想,先以SimpleMVC实现传统Model 2的例子。

在开始之前,根据官方介绍,搭建一个工程。

开发步骤如下:

1) 新建一个jsp文件。在请求url的时候,需要获得后台返回的数据进行展示。calendar.jsp 如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%

Stringcalendar=(String)request.getAttribute("calendar");//这里就是SimpleMvc完成普通MVC获得的数据。

%>

<html>

<head>

<linkrel='stylesheet'type='text/css'href='css/reset.css'/>

<linkrel='stylesheet'type='text/css'href='css/jquery-ui.css'/>

<linkrel='stylesheet'type='text/css'href='css/jquery.weekcalendar.css'/>

<linkrel='stylesheet'type='text/css'href='css/calendar.css'/>

<scripttype='text/javascript'src='js/jquery.min.js'></script>

<scripttype='text/javascript'src='js/jquery-ui.min.js'></script>

<scripttype='text/javascript'src='js/jquery.weekcalendar.js'></script>

<scripttype='text/javascript'src='js/calendar.js'></script>

<scripttype="text/javascript">

jQuery.noConflict();

</script>

</head>

<body>

<divid='calendar'></div>

<divid="event_edit_container">

<inputtype="hidden"/>

<ul>

<li>

<span>日期:</span><spanclass="date_holder"></span>

</li>

<li>

<labelfor="start">开始时间:</label><selectname="start"><optionvalue="">SelectStartTime</option></select>

</li>

<li>

<labelfor="end">结束时间:</label><selectname="end"><optionvalue="">SelectEndTime</option></select>

</li>

<li>

<labelfor="title">活动标题:</label><inputtype="text"name="title"/>

</li>

<li>

<labelfor="body">活动内容:</label><textareaname="body"></textarea>

</li>

</ul>

</div>

</body>

</html>

<scripttype="text/javascript">

varyear=newDate().getFullYear();

varmonth=newDate().getMonth();

varday=newDate().getDate();

          var datas  =  <%=calendar%>

</script>

2) 新建一个对应的xml文件。这里主要完成SimpleMVC的声明,这里可以指定对于jsp文件所对应的Handle。

calendar.xml 如下:

<?xml version="1.0" encoding="UTF-8"?>

<pagexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="/xsd/default/simple.xsd">

<scriptEval>first</scriptEval>

<handleClass>net.simpleframework.calendar.CalendarAction</handleClass>

<handleMethod>initCalendarLoad</handleMethod>

 </page>

3) 编写对于的Action

public class CalendarAction extends DefaultPageHandle {

publicvoidinitCalendarLoad(PageParameterpageParameter,

Map<String,Object>dataBinding,

List<String>visibleToggleSelector,List<String>readonlySelector,

List<String>disabledSelector)throwsException{

}

publicObjectgetBeanProperty(finalPageParameterpageParameter,

finalStringbeanProperty)throwsException{

finalPageBeanpageBean=pageParameter.pageDocument.getPageBean();

finalDataSourcedataSource=IWebApplication.Instance.getWebApplication().getDataSource();

finalIQueryEntityManagerqem=DataObjectManagerFactory.getQueryEntityManager(dataSource);

finalList<CalendarBean>calendar=newArrayList<CalendarBean>();

IQueryEntitySet<CalendarBean>qs=qem.query(newSQLValue("SELECT*FROMcalendar"),CalendarBean.class);

CalendarBeanbean;

while((bean=(CalendarBean)qs.next())!=null){

calendar.add(bean);

}

//获得日历的显示字符串

StringjsonEvenets=Json.toJsonToCalendar(calendar);

pageParameter.request.setAttribute("calendar_data",jsonEvenets);

returnBeanUtils.getProperty(pageBean,beanProperty);

}

}

4) 运行查看效果。

 实战SimpleMVC开发应用

基于SimpleMVC 开发企业应用只需要上面三步,后续介绍使用组件带来的优势。

总结:  SimpleMVC 可以完成常用mvc的功能,代码量更小,逻辑清晰,另外simpleFramework 提供的组件库又是其主要优势。

相关推荐