曾经,我做个一个web项目,使用的Spring MVC框架,前台展示用freemarker.
所有的页面访问是:index.htm?p=???
注:所有的请求都是去问index.htm
<servlet-mapping> <servlet-name>SpringDispatcher</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping>
mvc-config.xml中
<prop key="/index.htm">pageMultiController</prop>
所有的请求由pageMultiController处理,pageMultiController得到p=???的值,根据p的值去库表中查询这个页面需要几个模块(将页面中每个显示区域称为模块)来显示这个页面, 然后模块里记录各项显示需要的信息,其中包括样式,ftl代码,以及具体在页面中显示的位置,至于每个模块中要显示的数据,具体初始参数,由page的一个字段来控制,这个字段是个json对象,其他基本数据,在pageMultiController写,(比如要生成一个list列表).
以上思路已经有具体实现,(如果要源码可以联系我: ).说白了,有点像别人做的CMS系统.
现在我想对其改造,现在大概的分析一下:
一个page 是一个对象 ,它有许多module组成
page 继承Entity ,module继承page
page中有meta信息,keword信息,css样式信息,js信息,页面结构信息(几行几列),页面中module具体分布情况(json数据记录,也可以做一个page与module的关系表),还有一些开关信息.
module中有ftl初始代码,个性css样式,个性js代码.
后续要有访问权限的问题,具体权限与具体module产生关系,而与page无关.
只要是展示数据的情况全是访问/index.htm?page=***
只要增删改的动作,就访问/***.htm?action=add,update 等.然后处理完毕forward或redirect到index.htm?page=***
/***.htm起的是CM工作(MVC)
index.htm?page=***是V工作(MVC)
要求UI人员在写html时候尽量不写行内样式(以后web站点想换皮肤那是很轻松的事情)