`
dragonsoar
  • 浏览: 204090 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Summercool-Web框架简介 (一)

阅读更多

 

简介:轻量封装Spring MVC

         因为本人在国内最大的电子商务公司工作期间,深感一个好的Web框架可以大大提高工作效率,而一个不好的Web框架,又可以大大的降低开发效率。所以,在根据笔者在从事电子商务开发的这几年中,对各个应用场景而开发的一个轻量封装Spring MVC的一个Web框架。

         笔者工作的这几年之中,总结并开发了如下几个框架: summercool( Web框架,已经应用于某国内大型网络公司的等重要应用)、summercool-hsf(基于Netty实现的RPC框架,已经应用国内某移动互联网公司)、summercool-ddl(基于Mybaits的分表分库框架,已经应用国内某移动互联网公司);相继缓存方案、和消息系统解决方案也会慢慢开源。Summercool框架做为笔者的第一个开源框架

 

框架地址: http://summercool.googlecode.com/svn/trunk/summercool-web  

应用地址: http://summercool.googlecode.com/svn/trunk/summercool-petstore  

工具地址: http://summercool.googlecode.com/svn/trunk/summercool-tools

说明:此框架要用到spring-tools文件夹中的security文件夹中的文件,使用此框架的人员请将security文件夹的内容替换到JDK中的security文件夹中

 

 

一、为什么有了Spring MVC框架,还要在封装一下呢?

      1) Spring MVC是基于Servlet实现的请求处理器,而Summercool框架将其改成为基于Filter实现

         (好处就不多说了,大家都懂的;只是提一下,Servlet是请求生命周期的结束,而Filter则不是请求生命周期的结点)

      2) Spring MVC在一些特殊处理上处理的也不是非常的理想,定制化也不是完全可以扩展的;下面笔者就具体的列举一下:

 

A. xml配置文件的缺省加载

    1. 如果我们要是想加载一个或多个Spring的xml配置文件,那么我们要用<import>来完成文件的加载

    2. 在Summercool中只要将Spring的xml配置文件,放在classpath下面的"/summercool/spring"文件夹下面,应用启动的时候,Summercool框架会自动扫描classpath下面的"/summercool/spring"文件夹中的xml配置文件。

    3. 多个jar包里面"/summercool/spring"文件夹下面的xml配置文件,框架也会自动加载

 

B. 约定胜于配置

    1. Spring MVC其实已经有约定胜于配置了,但是还是不我们想要的那种理想型的

    2. /index.htm --> /IndexController.java

        /user/user_manager.htm --> /user/UserManagerController.java

        上面才是我们的理想型的约定胜于配置的方式

 

C. 页面模块化和页面函数自定议

    1. Summercool框架只提供了对freemarker页面模版定制化的支持

    2. 比如一个页面"/index.ftl"中,分成三个部分"头(header)、体(body)、 尾(footer)";其中头和尾中共用的,那么一般写页面的时候,我们可能会用freemarker的<#include>标签

 

<html>
    <#include "/header.ftl">

         内容体!

    <#include "/footer.ftl">
</html>

    说明:上面的页面中,我们可以看出;<#include>标签不是非常灵活;

              1. 导入一个页面,要带上页面的扩展名;不是非常灵活

              2. 导入的页面,没有办法定制导入子页面的相关业务逻辑(总不能处理一个子页面的时候要把逻辑写在页面里面吧?^_^)

 

    3. 如果用Summercool框架中的内置函数,则写法如下:

 

<html>
    ${widget("/header")}

         内容体!

    ${widget("/footer")}
</html>

    说明:上面的页面中,我们可以看出${widget()}函数,不需要页面的扩展名

              1. ${widget("/header")}的加载过程,--> /HeaderWidget.java --> /header.ftl

              2. 如果/HeaderWidget.java不存在,则 --> /header.ftl

              3. 这样,我们就可以把一个公共页面的处理类的逻辑,写在/HeaderWdiget.java里面;如:显示登录名称

 

D. 自定义URL模版

    1. 一个应用中,经常会自定义一些特别的url地址,而非约定胜于配置而自动映射的地址

    2. http://localhost:8080/item/#id#.html --> http://localhost:8080/item/12345.html

    3. 上面的URL地址,是我们自定义的一个URL地址,1) 我们一般的期望是上面的地址规则可以配置,并且变量可以跟据一定规则替换;2) 我们还期望有一个对应处理该地址的Controller处理类,并且可以自动提取出规则地址中的变量,如#id#

 

E. Cookies的自动加密和解密实现

F. 基于Cookies的免登录实现

G. 全局统一处理的权限实现

H. 全局统一处理的图片自动缩放处理实现(包括cache)

I. 多语言模版的实现(Spring MVC和Freemarker自带)

J. 多主题的实现(Spring MVC自带)

 

相关等等的功能,说不清楚了。主要是Summercool提供了一些相关的接口可供随意扩展并改进了一些Spring MVC笔者自认为不好的地方;后面的章节笔者自一一阐述并给出演示示例。

分享到:
评论
21 楼 云端月影 2015-07-07  
   感谢分享
20 楼 liyuzhel312 2013-08-15  
dragonsoar 写道
cecily.yu 写道
非常感谢你的技术分享

不用客气,可以加入我的们群,里面已经有开源网站及现在创业网站的案例在里面,欢迎讨论

大牛,你们的群号是多少,求加入
19 楼 dragonsoar 2013-03-05  
cecily.yu 写道
非常感谢你的技术分享

不用客气,可以加入我的们群,里面已经有开源网站及现在创业网站的案例在里面,欢迎讨论
18 楼 cecily.yu 2013-03-05  
非常感谢你的技术分享
17 楼 dragonsoar 2013-02-21  
simingxiong 写道
文中提到 "Spring MVC是基于Servlet实现的请求处理器,而Summercool框架将其改成为基于Filter实现(好处就不多说了,大家都懂的;只是提一下,Servlet是请求生命周期的结束,而Filter则不是请求生命周期的结点)"
关于这点不是很清楚,求解释。

1.filer如果请求找不到,你可以继续调下面的filter,直到servlet及web中间件自己处理的请求
2.而servlet调用之后,不管你怎么样必须返回结果,如果不返回就显示找不到,请求不能再交回给web中间件

网上有挺多的,可以查下~
16 楼 simingxiong 2013-02-07  
文中提到 "Spring MVC是基于Servlet实现的请求处理器,而Summercool框架将其改成为基于Filter实现(好处就不多说了,大家都懂的;只是提一下,Servlet是请求生命周期的结束,而Filter则不是请求生命周期的结点)"
关于这点不是很清楚,求解释。
15 楼 dragonsoar 2013-01-17  
Sunny_kaka 写道
支持开源,分享总是好的.而且都是干货.

谢谢,呵呵
14 楼 Sunny_kaka 2013-01-17  
支持开源,分享总是好的.而且都是干货.
13 楼 dragonsoar 2013-01-16  
城堡里的卡夫卡 写道
国内开源项目,大多短视,开源出来便没人维护,最后沦为提高公司和个人声誉的手段。
确实是如此,大部分的国情也是一样,拍一下给你多少钱。以后给我打工,大部分也支持不下去了。要是坚持下去,结果开源环境也不好,还经常被人骂。然后一想,算了,就这样吧。我猜大致是这样的,:)
12 楼 城堡里的卡夫卡 2013-01-16  
国内开源项目,大多短视,开源出来便没人维护,最后沦为提高公司和个人声誉的手段。
11 楼 dragonsoar 2013-01-02  
lgscofield 写道
LZ是牛人,看了部分介绍,确实不错,持续关注,希望楼主继续开放。。。

虽不上牛人,只是喜欢写点东西和大家分享,好长时间都不更新,相当不好意思,呵呵
10 楼 lgscofield 2012-12-31  
LZ是牛人,看了部分介绍,确实不错,持续关注,希望楼主继续开放。。。
9 楼 dragonsoar 2012-08-29  
aaronrao 写道
阿里不至于这么小气吧?

这个我不方便多说,我只能说我不知道你在说啥,哈哈
8 楼 dragonsoar 2012-08-29  
lingyulin 写道
使用summercool-web后,spring mvc原有的一些功能是不是不能用了,比如以下Controller

package org.summercool.platform.web.module.petstore.controllers;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
public class TestController extends MultiActionController {
@RequestMapping(value="/list")
public @ResponseBody String list(){
return "hello";
}
}


可以用。看下源代码就好了,你们这样用是注册到一个urlmapping里面,我的是自己的一个urlmapping,所以没有关系
7 楼 aaronrao 2012-08-29  
阿里不至于这么小气吧?
6 楼 lingyulin 2012-08-28  
使用summercool-web后,spring mvc原有的一些功能是不是不能用了,比如以下Controller

package org.summercool.platform.web.module.petstore.controllers;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
public class TestController extends MultiActionController {
@RequestMapping(value="/list")
public @ResponseBody String list(){
return "hello";
}
}
5 楼 lingyulin 2012-08-28  
使用summercool-web后,spring mvc原有的一些功能是不是不能用了,比如以下Controller
package org.summercool.platform.web.module.petstore.controllers;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
public class TestController extends MultiActionController {
@RequestMapping(value="/list")
public @ResponseBody String list(){
return "hello";
}
}

我试过用/test/list是访问不到的
4 楼 uwon 2012-07-13  
太好了,好好研究一些!
3 楼 song_in_china 2012-06-17  
我一定要看看
2 楼 dragonsoar 2012-06-07  
有人回复我不容易啊,呵呵~
本来我是把这个框架应用于某国内最大的电子商务公司的地址发出来的,结果网站不允许,我就又删了,呵呵~

相关推荐

Global site tag (gtag.js) - Google Analytics