阅读更多

9顶
3踩

开源软件

原创新闻 SoybeanMilk-1.0-b4 Java MVC开发框架发布

2011-11-03 10:17 by 见习记者 earthangry 评论(26) 有6596人浏览
SoybeanMilk-1.0-b4 做了较大的改进,包括:

  • 增强泛型类型支持,框架现在支持自动将请求参数转换为调用方法的泛型类型参数
  • 为<invoke>标签增加“breaker”属性,用以控制调用方法是否执行
  • 一个新的转换异常类ParamConvertException被加入,用于追踪输入非法的请求参数
  • 一个新的标签<type-target-handler>被加入,用于自定义动作目标处理器
  • BUG修复:默认通用转换器的getProperty接口不支持null输入

您可以点击 这里 下载框架包,里面包含了完整的说明文档和示例。

SoybeanMilk是一个简易、友好、且零侵入的Java MVC实现框架:

  • 它几乎没有学习成本,你只需要熟悉jsp和servlet技术
  • 也不需要你遵从任何代码编写模式
  • 你的代码中找不到任何这个框架的踪迹

使用它,您仅需要编写少量的XML代码,就可以轻松地将任何Java方法发布为WEB应用。

另外,它还:

  • 支持RESTful风格
  • 内置强大且易扩展的对象转换器,可以自动将请求参数转换为复杂类型的对象
  • 可以很容易与Spring、Velocity等当前流行的框架整合

如果你是一个WEB开发者,并且已经有点厌烦现有的WEB开发框架所固有的开发模式, 应该考虑了解下这个框架。

来看看使用SoybeanMilk时,你需要做些什么。

首先,你需要编写你的Java业务类,比如下面的示例:
package my;

public class User{
    private Integer id;
    private String name;
}

public class UserManager
{
    public void save(User user){ ... }
    
    public List<User> list(){ ... }
}


然后,定义“/WEB-INF/soybean-milk.cfg.xml”配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<soybean-milk>
        <resolvers>
                <resolver id="userManager" class="my.UserManager" />
        </resolvers>

        <executables>
                <action name="/user/add.do">
                        <invoke> userManager.save(param.user) </invoke>
                        <target url="/user/list.do" type="redirect" />
                </action>
                
                <action name="/user/list.do">
                        <invoke> request.userList = userManager.list() </invoke>
                        <target url="/user/list.jsp" />
                </action>
        </executables>
</soybean-milk>



好了,业务“保存用户”和“查询所有用户列表”已经完成(JSP页面部分省略)!

下面,你需要在你的web.xml中加入如下内容:
<servlet>
    <servlet-name>dispatchServlet</servlet-name>
    <servlet-class>org.soybeanMilk.web.servlet.DispatchServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>dispatchServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>


最后,启动服务器,在浏览器中输入“http://[yourApp]/user/add.do?user.id=1&user.name=jack”,用户“jack”将被保存,并显示在“/user/list.jsp”页面上。

9
3
评论 共 26 条 请登录后发表评论
26 楼 tss0823 2011-11-07 14:05
earthangry 写道
其实,我觉得一个开发框架是难是易,是否傻瓜,并不在于它是否零配置、或者是否有约定优于配置,而是看它创造并强加给开发者的约束和概念是多是少,这才能真实地反应一个开发框架的难度和学习成本,因为零配置不可能满足所有开发需求。
而零配置的好处则是提高了开发效率,因为可以少写很多代码,还有就是提高了可维护性,也就是说,零配置是提高开发效率和可维护性的一个途径,并且是一个很好的途径,但并不是唯一途径。
因此,我认为,一个开发框架是好是坏,是难是易,零配置并不是首要条件。


貌似生同感受!哈哈。
25 楼 TSheep 2011-11-06 03:24
earthangry 写道
其实,我觉得一个开发框架是难是易,是否傻瓜,并不在于它是否零配置、或者是否有约定优于配置,而是看它创造并强加给开发者的约束和概念是多是少,这才能真实地反应一个开发框架的难度和学习成本,因为零配置不可能满足所有开发需求。
而零配置的好处则是提高了开发效率,因为可以少写很多代码,还有就是提高了可维护性,也就是说,零配置是提高开发效率和可维护性的一个途径,并且是一个很好的途径,但并不是唯一途径。
因此,我认为,一个开发框架是好是坏,是难是易,零配置并不是首要条件。


理念上比较同意你的说法,我的理解就是容易上手。做一个框架除了解决问题本身外剩下就是在制定使用规则,这个规则也是使用者操纵框架途径,这方面设计直接反映了设计者看待问题的角度。
24 楼 earthangry 2011-11-06 00:11
其实,我觉得一个开发框架是难是易,是否傻瓜,并不在于它是否零配置、或者是否有约定优于配置,而是看它创造并强加给开发者的约束和概念是多是少,这才能真实地反应一个开发框架的难度和学习成本,因为零配置不可能满足所有开发需求。
而零配置的好处则是提高了开发效率,因为可以少写很多代码,还有就是提高了可维护性,也就是说,零配置是提高开发效率和可维护性的一个途径,并且是一个很好的途径,但并不是唯一途径。
因此,我认为,一个开发框架是好是坏,是难是易,零配置并不是首要条件。
23 楼 csdnchwei 2011-11-05 23:18
大家讨论得挺激烈
22 楼 KimHo 2011-11-05 22:13
george_space 写道
george_space 写道
KimHo 写道
george_space 写道
kjj 写道
earthangry 写道
kjj 写道
那么多的配置xml还说简单!!!!!!!!!!!!

小伙别那么激动,注解不是万能的,有些场景并不适用

没激动,只是没看出来哪里特别!!!!!!!!!!!!!!!!!!!

好的框架,既不应该是配置文件一大片,也不应该是到处是注解,而是:约定优于配置
看url知道其controller 、view 和 Service,看 controller 知道其 URL、View,同样,看view知道其controller 、URL。
只有约定,采购敏捷。
不知道为什么众多的web框架开发者无视这一点。

你说的是restful风格吧
这个框架也有这样的影子


约定优于配置跟RESTful风格的URI无关,我的web框架中,Service的注入都是按照名字来约定注入的,不是依靠写注解,或者写配置文件,所以,约定由于配置是一种开发理念,是一种敏捷,或者说懒惰的系统在方方面面都应该做到的。

我喜欢的web开发框架,运行效率不是第一要务,功能是否强大也不是第一要务,是否支持RESTful式URI更不是第一要务。

一个对开发者最友好的web开发框架的第一要务是:尽量让使用者少写代码,少关心配置;越傻瓜化越好。

软件或者web开发框架,最基本的出发点和唯一的目的,就是减轻使用者的劳动强度,而不是让开发者围着框架团团转,忙得头昏脑胀。

我对待web开发框架的态度,和对待Linux命令行的态度一样,我极度讨厌命令行,我做的所有软件都有GUI图形界面,任何使用我软件的人,都不需要去关心什么黑乎乎的命令行,乱七八糟的配置文件,这就是以人为本。

软件为我服务,而不是我为软件折腾。

web开发框架也一样。

我在选择合作伙伴的配套软件时,第一眼看得不是软件功能是否强大,也不是看他的软件用得技术多么新颖,而是:他的软件是否足够傻瓜化。
如果他的软件让我都得忙活半天才能运行起来,我是绝对不会让这个软件在我们公司的项目中使用的,坚决不会,如果领导非要用这样的垃圾,我会毅然辞职也不用这堆垃圾。

软件给用户的感觉必须足够傻瓜化,最好是在一个界面中拖拽几个图标就搞定,如果软件给使用者得是一堆黑乎乎的命令行窗口,一坨坨杂乱无章的配置文件,一滩滩不知来由的调用代码,那么,这个软件就是把用户当成了敌人,它想把自己的用户整疯。

所以,web框架也好,给最终用户的软件也罢,无论你面对的用户是真正的IT盲,还是面对的技术人员,你都应该把用户当做没有任何技术经验的普通市井平民,你要做到让用户对你的产品,思考时间不超过一分钟就知道是干什么的,就知道怎么用,更不要让用户去阅读那成千上万页的使用说明。

要达到这种境界,需要从UI入手……
21 楼 earthangry 2011-11-05 10:52
fjjiaboming 写道
真蛋疼, 这样的框架, 你这样练手, 用用就行了, 还发稿...


愿闻其详,不然看看就行了,别发评论了。
20 楼 冬天秋天 2011-11-05 10:19
这些人,引用的评论看得我蛋疼
19 楼 tywo45 2011-11-05 09:02
加油!做出好产品出来!让质疑者闭嘴
18 楼 fjjiaboming 2011-11-05 01:21
真蛋疼, 这样的框架, 你这样练手, 用用就行了, 还发稿...
17 楼 jrx0122 2011-11-04 16:57
直接用 spring mvc就好了,干嘛要用这个
16 楼 earthangry 2011-11-04 12:49
george_space 写道
kjj 写道
earthangry 写道
kjj 写道
那么多的配置xml还说简单!!!!!!!!!!!!

小伙别那么激动,注解不是万能的,有些场景并不适用

没激动,只是没看出来哪里特别!!!!!!!!!!!!!!!!!!!

好的框架,既不应该是配置文件一大片,也不应该是到处是注解,而是:约定优于配置
看url知道其controller 、view 和 Service,看 controller 知道其 URL、View,同样,看view知道其controller 、URL。
只有约定,采购敏捷。
不知道为什么众多的web框架开发者无视这一点。


感谢你的关注和指教,下一步我会尝试融入约定优于配置的思想。
15 楼 george_space 2011-11-04 12:26
george_space 写道
KimHo 写道
george_space 写道
kjj 写道
earthangry 写道
kjj 写道
那么多的配置xml还说简单!!!!!!!!!!!!

小伙别那么激动,注解不是万能的,有些场景并不适用

没激动,只是没看出来哪里特别!!!!!!!!!!!!!!!!!!!

好的框架,既不应该是配置文件一大片,也不应该是到处是注解,而是:约定优于配置
看url知道其controller 、view 和 Service,看 controller 知道其 URL、View,同样,看view知道其controller 、URL。
只有约定,采购敏捷。
不知道为什么众多的web框架开发者无视这一点。

你说的是restful风格吧
这个框架也有这样的影子


约定优于配置跟RESTful风格的URI无关,我的web框架中,Service的注入都是按照名字来约定注入的,不是依靠写注解,或者写配置文件,所以,约定由于配置是一种开发理念,是一种敏捷,或者说懒惰的系统在方方面面都应该做到的。

我喜欢的web开发框架,运行效率不是第一要务,功能是否强大也不是第一要务,是否支持RESTful式URI更不是第一要务。

一个对开发者最友好的web开发框架的第一要务是:尽量让使用者少写代码,少关心配置;越傻瓜化越好。

软件或者web开发框架,最基本的出发点和唯一的目的,就是减轻使用者的劳动强度,而不是让开发者围着框架团团转,忙得头昏脑胀。

我对待web开发框架的态度,和对待Linux命令行的态度一样,我极度讨厌命令行,我做的所有软件都有GUI图形界面,任何使用我软件的人,都不需要去关心什么黑乎乎的命令行,乱七八糟的配置文件,这就是以人为本。

软件为我服务,而不是我为软件折腾。

web开发框架也一样。

我在选择合作伙伴的配套软件时,第一眼看得不是软件功能是否强大,也不是看他的软件用得技术多么新颖,而是:他的软件是否足够傻瓜化。
如果他的软件让我都得忙活半天才能运行起来,我是绝对不会让这个软件在我们公司的项目中使用的,坚决不会,如果领导非要用这样的垃圾,我会毅然辞职也不用这堆垃圾。

软件给用户的感觉必须足够傻瓜化,最好是在一个界面中拖拽几个图标就搞定,如果软件给使用者得是一堆黑乎乎的命令行窗口,一坨坨杂乱无章的配置文件,一滩滩不知来由的调用代码,那么,这个软件就是把用户当成了敌人,它想把自己的用户整疯。

所以,web框架也好,给最终用户的软件也罢,无论你面对的用户是真正的IT盲,还是面对的技术人员,你都应该把用户当做没有任何技术经验的普通市井平民,你要做到让用户对你的产品,思考时间不超过一分钟就知道是干什么的,就知道怎么用,更不要让用户去阅读那成千上万页的使用说明。
14 楼 george_space 2011-11-04 12:13
KimHo 写道
george_space 写道
kjj 写道
earthangry 写道
kjj 写道
那么多的配置xml还说简单!!!!!!!!!!!!

小伙别那么激动,注解不是万能的,有些场景并不适用

没激动,只是没看出来哪里特别!!!!!!!!!!!!!!!!!!!

好的框架,既不应该是配置文件一大片,也不应该是到处是注解,而是:约定优于配置
看url知道其controller 、view 和 Service,看 controller 知道其 URL、View,同样,看view知道其controller 、URL。
只有约定,采购敏捷。
不知道为什么众多的web框架开发者无视这一点。

你说的是restful风格吧
这个框架也有这样的影子


约定优于配置跟RESTful风格的URI无关,我的web框架中,Service的注入都是按照名字来约定注入的,不是依靠写注解,或者写配置文件,所以,约定由于配置是一种开发理念,是一种敏捷,或者说懒惰的系统在方方面面都应该做到的。

我喜欢的web开发框架,运行效率不是第一要务,功能是否强大也不是第一要务,是否支持RESTful式URI更不是第一要务。

一个对开发者最友好的web开发框架的第一要务是:尽量让使用者少写代码,少关心配置;越傻瓜化越好。

软件或者web开发框架,最基本的出发点和唯一的目的,就是减轻使用者的劳动强度,而不是让开发者围着框架团团转,忙得头昏脑胀。

我对待web开发框架的态度,和对待Linux命令行的态度一样,我极度讨厌命令行,我做的所有软件都有GUI图形界面,任何使用我软件的人,都不需要去关心什么黑乎乎的命令行,乱七八糟的配置文件,这就是以人为本。

软件为我服务,而不是我为软件折腾。

web开发框架也一样。
13 楼 KimHo 2011-11-04 10:48
george_space 写道
kjj 写道
earthangry 写道
kjj 写道
那么多的配置xml还说简单!!!!!!!!!!!!

小伙别那么激动,注解不是万能的,有些场景并不适用

没激动,只是没看出来哪里特别!!!!!!!!!!!!!!!!!!!

好的框架,既不应该是配置文件一大片,也不应该是到处是注解,而是:约定优于配置
看url知道其controller 、view 和 Service,看 controller 知道其 URL、View,同样,看view知道其controller 、URL。
只有约定,采购敏捷。
不知道为什么众多的web框架开发者无视这一点。

你说的是restful风格吧
这个框架也有这样的影子
12 楼 george_space 2011-11-04 10:20
kjj 写道
earthangry 写道
kjj 写道
那么多的配置xml还说简单!!!!!!!!!!!!

小伙别那么激动,注解不是万能的,有些场景并不适用

没激动,只是没看出来哪里特别!!!!!!!!!!!!!!!!!!!

好的框架,既不应该是配置文件一大片,也不应该是到处是注解,而是:约定优于配置
看url知道其controller 、view 和 Service,看 controller 知道其 URL、View,同样,看view知道其controller 、URL。
只有约定,采购敏捷。
不知道为什么众多的web框架开发者无视这一点。
11 楼 wese345 2011-11-04 10:09
实际上我早上喝的豆浆就叫SoybeanMilk,看不出来那卖豆浆的大妈会有如此功力
10 楼 Tomcat911 2011-11-04 09:40
wangzjie 写道
现在很多框架就是把相关实现放在配置文件中,核心代码再对这些配置进行解析。

框架确实提供了极大的便利,但这降低了技术门槛,相信更久以来,框架会越来越傻瓜化,到时只要通过拖拽之类的简单操作,就能很轻松把应用搞定,只要把需求弄懂后人人都会j2ee,这可能是好消息,但对程序员从某种程度上说也是种杯具,所以还是要尽量明白框架的本质,不要停留在会用框架而已


有道理!:idea:
9 楼 liyaxi 2011-11-04 09:16
java还需要框架吗???
8 楼 caoyangx 2011-11-04 08:37
caoyangx 写道
实在没看出有什么革命性的突破

原来也是国产的开源框架,不过也要支持一下。
7 楼 caoyangx 2011-11-04 08:36
实在没看出有什么革命性的突破

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Python库 | templer.core-1.0b4.zip

    资源分类:Python库 所属语言:Python 资源全名:templer.core-1.0b4.zip 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

  • Python库 | zperfmetrics-1.0b4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:zperfmetrics-1.0b4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

  • Python库 | pyasice-1.0b4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:pyasice-1.0b4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

  • Python库 | sbol2-1.0b4-py3-none-any.whl

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:sbol2-1.0b4-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

  • Python库 | django_pastedeploy_settings-1.0b4-py2.7.egg

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:django_pastedeploy_settings-1.0b4-py2.7.egg 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

  • jqtouch-1.0-b4-rc

    jqtouch-1.0-b4-rc

  • PyPI 官网下载 | raptus.inlinelightbox-1.0b4.tar.gz

    资源来自pypi官网。 资源全名:raptus.inlinelightbox-1.0b4.tar.gz

  • jml-src-1.0b4

    jml-src-1.0b4 java操作msn的源码

  • Python库 | xoa_driver-1.0b4-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:xoa_driver-1.0b4-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

  • PyPI 官网下载 | AaronTools-1.0b4-py3-none-any.whl

    资源来自pypi官网,解压后可用。 资源全名:AaronTools-1.0b4-py3-none-any.whl

  • iOS实例开发源码——LucasTizma-Hebi-v1.0-1-g3b4e198.zip

    iOS实例开发源码——LucasTizma-Hebi-v1.0-1-g3b4e198.zip

  • iOS游戏应用源代码——LucasTizma-Hebi-v1.0-1-g3b4e198.zip

    iOS游戏应用源代码——LucasTizma-Hebi-v1.0-1-g3b4e198.zip

  • JAVA实现—UTF-8编码与解码

    java——UTF-8编码与解码 渗透测试有时候会遇到%E9%99%88这类的编码 在线转的结果 导入java中转换的结果: JAVA代码如下: import java.net.URLDecoder; import java.net.URLEncoder; //URLDecoder.decode("%E5%...

  • JAVA命令参数详解:-D

    原文地址:http://blog.sina.com.cn/s/blog_605f5b4f0100hlt9.html JAVA 命令参数详解: 1、-D= set a system property 设置系统属性。 java -D参数简化加入多个jar  java命令引入jar时可以-cp参数...

  • java -jar lib_java -jar命令运行jar包时指定外部依赖jar包 linxux or windows

    前尘回顾:setup.bat[chenquan@hostuser tartest]$ cat ../setup.shjavac -encoding UTF-8 -Djava.ext.dirs=./ -d . ./SignNatureTest.javaecho compile finished,generate .class under package test at curdirjava...

  • 微信公众号开发,原来这么简单?[java框架]

    可能你不知道,有个框架叫wx-tools(小心翼翼地说) Wx-tools是基于微信公众平台API的轻量级框架。 基于Wx-tools你可以开速开发一个订阅号/服务号的web应用后台。 博主最近终于有空!!已经更新到2.1.0啦!! ...

  • Java 函数式编程

    Java 函数式编程 一、Lambda表达式 1.1 函数式编程思想概述 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿数据做操作” 面向对象思想强调“必须通过对象的形式来做事情” 函数式思想强调则金量忽略...

  • Apollo 7.0行为预测模块升级:轨迹交互与评估器设计详解及其应用

    内容概要:本文详细解析了Apollo 7.0行为预测模块的关键升级点,主要包括新增的Inter-TNT模式、VECTORNET_EVALUATOR以及JOINTLY_PREDICTION_PLANNING_EVALUATOR。这些组件通过引入轨迹交互模拟、动态归一化、联合预测规划等创新机制,显著提高了障碍物轨迹预测的准确性和场景适应性。特别是在处理复杂交通场景如高速公路变道、十字路口交汇时表现出色。此外,文中还介绍了增量式特征更新机制的应用,有效减少了CPU占用,提升了系统的实时性能。 适用人群:适用于对自动驾驶技术感兴趣的开发者、研究人员和技术爱好者,尤其是那些希望深入了解Apollo平台行为预测模块工作原理的人群。 使用场景及目标:①帮助读者理解Apollo 7.0行为预测模块的技术细节;②指导开发者如何利用这些新技术提升自动驾驶系统的预测精度;③为研究者提供有价值的参考资料,促进相关领域的进一步探索。 其他说明:文章不仅提供了详细的代码解读,还包括了实际应用场景中的效果对比,使读者能够全面掌握新旧版本之间的差异。同时,附带的思维导图有助于快速理清各个子模块之间的调用关系和数据流向。

  • 基于S7-200 PLC与MCGS组态的智能交通灯控制系统设计及应用

    内容概要:本文详细介绍了利用西门子S7-200 PLC和MCGS组态软件构建智能交通灯控制系统的方法。首先阐述了系统的硬件配置,包括选用的PLC型号、输入输出设备及其具体的功能分配。接着深入探讨了梯形图编程的核心逻辑,如定时器嵌套、车流量检测与响应机制,确保红绿灯能够根据实际情况灵活调整。此外还讲解了MCGS组态界面的设计要点,通过图形化方式呈现交通状况并提供人机交互功能。最后分享了一些实际调试过程中遇到的问题及解决方案。 适合人群:从事工业自动化领域的工程师和技术人员,特别是对PLC编程和组态软件有一定了解的人群。 使用场景及目标:适用于城市交通管理部门或相关科研机构进行智能交通系统的研究与开发;旨在提高道路交叉口的通行效率,减少拥堵现象。 其他说明:文中不仅提供了详细的理论指导,还包括了许多实践经验教训,对于初学者来说非常有价值。同时提到一些进阶话题,如加入V2V通信模块的可能性,为未来研究指出了方向。

  • 光伏特性曲线建模:基于Matlab与Simulink的分布式光伏系统仿真

    内容概要:本文详细介绍了光伏特性曲线模型的基本概念及其在Matlab和Simulink中的实现方法。首先阐述了光伏电池的电流-电压(I-V)和功率-电压(P-V)曲线的基础理论,包括理想二极管方程及相关参数的意义。接着展示了如何使用Matlab编写代码来计算并绘制简单的I-V曲线,随后探讨了Simulink环境下构建光伏特性曲线模型的方法,强调了图形化界面的优势。此外,还讨论了分布式光伏系统的特点,通过修改基础模型以适应多电池串联或并联系统的需求。文中不仅提供了具体的代码实例,还分享了一些实用的经验和技术细节,如温度系数、辐照度变化对模型的影响等。 适合人群:从事光伏系统研究的技术人员、高校相关专业师生、对光伏建模感兴趣的工程爱好者。 使用场景及目标:①理解和掌握光伏电池的工作原理及其数学模型;②学会使用Matlab和Simulink进行光伏特性曲线的建模与仿真;③能够分析不同环境条件下光伏系统的性能表现,为优化设计提供依据。 其他说明:文章中包含了大量详细的代码片段和操作指南,有助于读者快速上手实践。同时提醒读者关注模型参数的选择与调整,确保仿真结果贴近实际情况。

Global site tag (gtag.js) - Google Analytics