`
jander
  • 浏览: 9365 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

一个简单的web框架-beetlefly

阅读更多
设计思想:http://jander.iteye.com/admin/blogs/393754

项目主页:http://code.google.com/p/beetlefly/

下载:http://beetlefly.googlecode.com/files/beetlefly-eclipse-project-0.1.zip

欢迎各种意见。

简单介绍:
使用Beetlefly构建web程序,不用任何配置:

Beetlefly在服务程序加载时,自动扫描各个Action,并将它们注入到Guice容器。
在客户端请求时,将request url 自动映射为Action的 method。

使用Beetlefly构建web程序,只需要简单几步:

1. 在web.xml中加入

        <listener>
                <listener-class>org.beetlefly.example.blog.WebContextListener</listener-class>
        </listener>
        <servlet>
                <servlet-name>Beetle</servlet-name>
                <servlet-class>org.beetlefly.web.BeetleflyServlet</servlet-class>
                <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
                <servlet-name>Beetle</servlet-name>
                <url-pattern>/page/*</url-pattern>
        </servlet-mapping>


其中org.beetlefly.example.blog.WebContextListener 进行Guice注入,需要使用者自己编写,格式如下:

public class WebContextListener implements ServletContextListener {

        @Override
        public void contextDestroyed(ServletContextEvent event) {
                GuiceInjector.destory();
        }

        @Override
        public void contextInitialized(ServletContextEvent event) {
                //Here,you can add your Gurice Modules.
                //在"org.beetlefly.example"的Package下,扫描Action.
                GuiceInjector.createInjector("org.beetlefly.example",new AbstractModule(){
                        @Override
                        protected void configure() {
                                bind(Service.class).to(ServiceImpl.class).asEagerSingleton();
                                //如果想控制Exception的话
                                //bind(ExceptionHandler.class).to(MyExceptionHandler.class).asEagerSingleton();
                        }
                });
        }

}

  BeetleflyServlet,作为Beetlefly的分配器,将客户端发送给各个Action,上面的配置,说明 BeetleflyServlet?将作用于http://hostname/rootname/page/下的url。

2. 编写自己的Action文件。所有Action类,都implements Action接口,Action接口是一个标记接口,其中不含任何方法。每个Action都要进行一个标记,用于BeetleflyServlet从容器中查找它。
//对Action进行标记
@ActionAnnotation("blog")
public class BlogAction implements Action {

        private Service service;

        @Inject
        public BlogAction(Service service) {
                super();
                this.service = service;
        }
        
        //这个方法的url: http://hostname/rootname/page/blog/list
        public View list(HttpServletRequest req, HttpServletResponse resp){
                Map<String,Object> map=new HashMap<String,Object>();
                map.put("blogs", service.findAllBlogs());
                return new JstlView("/blog/list.jsp",map);
        }

        //这个方法的url: http://hostname/rootname/page/blog/creat    
        public View create(HttpServletRequest req, HttpServletResponse resp){
                String title=req.getParameter("title");
                String content=req.getParameter("content");
                Blog blog=new Blog(service.nextKey(),title,content);
                service.create(blog);                

                return new RedirectView("/page/blog/list");
        }
}

3. 第三步,没有了,你可以执行你的程序了,是不是很简单。

分享到:
评论
27 楼 jindw 2009-06-02  
<div class="quote_title">stworthy 写道</div>
<div class="quote_div">
<div class="quote_title">jindw 写道</div>
<div class="quote_div">没看到什么亮点。<br><br>#         public View create(HttpServletRequest req, HttpServletResponse resp){  <br>#                 String title=req.getParameter("title");  <br>#                 String content=req.getParameter("content");  <br><br>不能吧getParameter去掉吗?繁琐。<br><br>给个建议,http参数可以自动注入吗?<br>比如:<br>public String cteate(String title,String content,int pageSize,int[] otherParams){<br>}<br><br>编译的时候,参数名称可能被去掉,不过好像可以通过系统标注提醒编译器保留参数名称的。</div>
<p> </p>
<p>我的山寨框架就有基本的参数绑定功能</p>
<p>http://stworthy.iteye.com/admin/blogs/367304</p>
</div>
<p>自动参数绑定,我来推广一下<a href="http://lite.googlecode.com"> Lite XML</a>的JSEL 表达式引擎吧。</p>
<p> </p>
<p>JSEL表达式引擎可以自动装配对象,吧一个parameterMap 直接装配到一个特定的JavaBean中。</p>
<p>功能和OGNL类似,但是,更加简单,呆上Lite XML合集,也就是100多K。</p>
26 楼 天机老人 2009-06-01  
jander 写道
jindw 写道
没看到什么亮点。

#         public View create(HttpServletRequest req, HttpServletResponse resp){ 
#                 String title=req.getParameter("title"); 
#                 String content=req.getParameter("content"); 

不能吧getParameter去掉吗?繁琐。

给个建议,http参数可以自动注入吗?
比如:
public String cteate(String title,String content,int pageSize,int[] otherParams){
}

编译的时候,参数名称可能被去掉,不过好像可以通过系统标注提醒编译器保留参数名称的。


这个想法好,一直用spring mvc ,思想僵化了。
其实,实现起来也很简单,以后改进。


哈哈现在Spring MVC就是这么干的,其实Spring mvc可以更大胆.

下面是Domain(也可以同时是Model)
@Entity
public Person{
   @Id
   pirvate int id
   private String name;
   private String password;

   get();set();这个就先省了。
}


下面Controller
@Controller
public PersonController{
   
    
    public String addPerson(String password,String name,ModelMap model){
          处理从得到的Parameter(password,name),只要和页面的name一致就行。
           model.add..(password);(此向前台返回数据)
           return "/index.jsp"
    }

    上面不算露骨的,下面更方便
     public addPerson(Person person,ModelMap model){
        如果前台password为空person也不会报错,只会给person的password一个默认值!
    }

}






25 楼 key232323 2009-05-31  
哎,看看php/ruby是咋实现这些东西的

java本来就简单不到哪去,因为servlet api本身就没那么动态。

如果要简单多规定,少编程就是了,不要再要什么url mapping、注解注入业务类了。
24 楼 jander 2009-05-31  
to stworthy.
谢谢,提供。我已经下载了。有时间,参考你的实现一下。
23 楼 stworthy 2009-05-31  
<div class="quote_title">jindw 写道</div>
<div class="quote_div">没看到什么亮点。<br><br>#         public View create(HttpServletRequest req, HttpServletResponse resp){  <br>#                 String title=req.getParameter("title");  <br>#                 String content=req.getParameter("content");  <br><br>不能吧getParameter去掉吗?繁琐。<br><br>给个建议,http参数可以自动注入吗?<br>比如:<br>public String cteate(String title,String content,int pageSize,int[] otherParams){<br>}<br><br>编译的时候,参数名称可能被去掉,不过好像可以通过系统标注提醒编译器保留参数名称的。</div>
<p> </p>
<p>我的山寨框架就有基本的参数绑定功能</p>
<p>http://stworthy.iteye.com/admin/blogs/367304</p>
22 楼 司徒正美 2009-05-30  
能写山寨框架的都是牛人!
21 楼 jander 2009-05-29  
jindw 写道
没看到什么亮点。

#         public View create(HttpServletRequest req, HttpServletResponse resp){ 
#                 String title=req.getParameter("title"); 
#                 String content=req.getParameter("content"); 

不能吧getParameter去掉吗?繁琐。

给个建议,http参数可以自动注入吗?
比如:
public String cteate(String title,String content,int pageSize,int[] otherParams){
}

编译的时候,参数名称可能被去掉,不过好像可以通过系统标注提醒编译器保留参数名称的。


这个想法好,一直用spring mvc ,思想僵化了。
其实,实现起来也很简单,以后改进。
20 楼 jindw 2009-05-29  
没看到什么亮点。

#         public View create(HttpServletRequest req, HttpServletResponse resp){ 
#                 String title=req.getParameter("title"); 
#                 String content=req.getParameter("content"); 

不能吧getParameter去掉吗?繁琐。

给个建议,http参数可以自动注入吗?
比如:
public String cteate(String title,String content,int pageSize,int[] otherParams){
}

编译的时候,参数名称可能被去掉,不过好像可以通过系统标注提醒编译器保留参数名称的。
19 楼 neora 2009-05-28  
jianfeng008cn 写道
可以参照springside看看,先不说struts2的理念和扩展性,他的用法是很灵活的,零配置也很方便,而且通过自己设计拦截器和result,可以用得很舒服,山寨框架自己练练编程蛮好的,但是往往作者报喜不报忧,实际上和主流框架的差距不是一点点,je上很多以前发过的框架都是如此,框架开发者一般能力比较强,我想还是投入开源阵地做点是实实在在的贡献吧。(菜鸟谈想法,老鸟别愤怒哈~~)


“山寨框架”,这种说法........
18 楼 天机老人 2009-05-28  
支持自己搞!
现在的SSH框架都不是很好用!
17 楼 gqf2008 2009-05-28  
有点像warp framework
16 楼 evancess 2009-05-28  
cloud21 写道
说实话真的很麻烦,我建议你有时间看一下我曾经写过的框架把。
Action什么都不需要写
要执行的方法上加上@Job就可以
要访问ServletAPI,可以通过提供了ActionContext类提供的借口访问。
@Name("Login")
pulbic class LoginAction {

@Job
public String execute(WebForm form){

User u=(User)form.toEntity(User.class);
String name=form.get("name");
Map m=ActionContext.getSession();
String secret=ActionContext.getSession("secret");

FreemarketTemplate().putParameter("name",name);

return "success";
}
}


支持~~
15 楼 pancras 2009-05-28  
看了一下,很不错的想法,支持一下
14 楼 sslaowan 2009-05-28  
其实我觉得你还不如像我这样,http://sslaowan.iteye.com/blog/396331
然后写一个bean自动扫描继承了Spring的控制器的类,完全零配置。
因为你使用了注解,却还在方法里绑定request和response,说明你并不希望控制器是个POJO,那么你继承一个类和继承一个接口也关系不太大,因为你已经失去了POJO的单元测试了。并且我觉得这个控制器就是实现了Command模式,跟Servlet耦合也不是什么问题,本身也没啥业务逻辑,集成测试就够了。
像RoR、Springside里都是靠具体继承,也没啥问题。
13 楼 eyes2near 2009-05-28  
看一下playframework就知道什么叫简单了。 www.playframework.org
12 楼 秀才的梦想 2009-05-27  
想要点设计思路什么的
11 楼 whaosoft 2009-05-27  
想法挺不错的呢~
10 楼 zozoh 2009-05-27  
cloud21 写道
说实话真的很麻烦,我建议你有时间看一下我曾经写过的框架把。
Action什么都不需要写
要执行的方法上加上@Job就可以
要访问ServletAPI,可以通过提供了ActionContext类提供的借口访问。
@Name("Login")
pulbic class LoginAction {

@Job
public String execute(WebForm form){

User u=(User)form.toEntity(User.class);
String name=form.get("name");
Map m=ActionContext.getSession();
String secret=ActionContext.getSession("secret");

FreemarketTemplate().putParameter("name",name);

return "success";
}
}


请LZ放出 WebForm 的源代码,瞻仰一下。 并且最好再放出,如何构建 WebForm 的那段代码
9 楼 jander 2009-05-27  
cloud21 写道
说实话真的很麻烦,我建议你有时间看一下我曾经写过的框架把。
Action什么都不需要写
要执行的方法上加上@Job就可以
要访问ServletAPI,可以通过提供了ActionContext类提供的借口访问。
@Name("Login")
pulbic class LoginAction {

@Job
public String execute(WebForm form){

User u=(User)form.toEntity(User.class);
String name=form.get("name");
Map m=ActionContext.getSession();
String secret=ActionContext.getSession("secret");

FreemarketTemplate().putParameter("name",name);

return "success";
}
}


Action有两个Servlet参数,返回一个View就麻烦吗?
个人不觉得,而且也很好地与spring mvc对接(其实是抄袭)。
还有,你那个我下载了,说句实在话,别介意,设计思路,注释文档,测试一概没有,神仙才会看。
要交流,起码先让别人知道你的思想不是?
8 楼 cloud21 2009-05-27  
说实话真的很麻烦,我建议你有时间看一下我曾经写过的框架把。
Action什么都不需要写
要执行的方法上加上@Job就可以
要访问ServletAPI,可以通过提供了ActionContext类提供的借口访问。
@Name("Login")
pulbic class LoginAction {

@Job
public String execute(WebForm form){

User u=(User)form.toEntity(User.class);
String name=form.get("name");
Map m=ActionContext.getSession();
String secret=ActionContext.getSession("secret");

FreemarketTemplate().putParameter("name",name);

return "success";
}
}

相关推荐

    手把手带你写一个 Web 框架 从 0 到 1,实现自己的工业级 Web 框架-392M网盘下载.txt

    课程介绍 在 Web 领域,特别是中小型项目,开发效率往往是...他将使用 Go 语言,从标准库开始,逐步演进,手把手带你研发一个工业级的 Go Web 框架,以基本概念与核心理论为指导,实战演练总结底层框架的设计技巧。

    架构探险-从零开始写Java Web框架-全书源码

    《架构探险-从零开始写Java Web框架》是一本深入探讨Java Web开发的书籍,作者黄勇通过本书向读者展示了如何从零构建一个完整的Web框架。全书源码的提供,使得读者能够更加直观地理解并实践书中的理论知识,这对于...

    spring-web-5.2.3.RELEASE和spring-webmvc-5.2.3.RELEASE

    Spring Web模块和Spring Web MVC模块是Spring框架中的两个关键组成部分,它们在构建Web应用程序时起着至关重要的作用。 Spring Web模块(spring-web-5.2.3.RELEASE.jar)主要负责提供Web相关的功能支持,包括HTTP...

    dwz - 简单实用国产jQuery UI框架 - DWZ富客户端框架(jUI)

    这个框架旨在简化网页开发过程,提供了一系列组件和工具,使得开发者能够快速构建功能丰富、用户体验良好的Web应用程序。 DWZ框架的核心特性包括: 1. **组件丰富**:DWZ包含了多种常见的Web组件,如表格、表单、...

    高效Python Web开发框架 - 基于Flask源码项目

    项目概述: 项目名称:高效Python Web...项目简述:本项目是基于流行的Python Web框架Flask进行深化与扩展的版本,旨在提升Web开发的效率与性能,通过丰富的文件类型支持,为开发者提供了一整套完善的开发工具和资源。

    Linux 通用 WebAdmin (webui) 开发框架-C语言 源码

    提供了一个结构化的WebAdmin开发框架,它的前后台部分均采用插件式的程序开发方法,借助提供的插件开发模板,WebAdmin系统开发者不必关WebAdmin开发框架的具体实现,就可设计出界面统一、操作简单、安全稳定的WebGUI...

    架构探险 从零开始写Java Web框架.pdf

    本书首先从一个简单的Web应用开始,让读者学会如何使用IDEA、Maven Git等开发工具搭建Java web应用:接着通过一个简单的应用场景,为该Web应用添加若干业务功能,从需求分析与系统设计开始,带领读者动手完成该Web...

    java-简易web框架EasyJWeb源码.zip.zip

    "java-简易web框架EasyJWeb源码.zip.zip" 是一个压缩包文件,其中包含的主要是Java语言编写的简易Web框架——EasyJWeb的源代码。EasyJWeb是一个轻量级的Java Web开发框架,旨在简化Web应用的开发过程,提高开发效率...

    Python Django Web开发教程 Python web框架-Django框架开发实战 共86页.pdf

    【提纲】 Django简介 Django环境搭建 Django环境使用 Django创建Blog网站 小结

    web框架搭建.pdf

    这个框架可以帮助开发者快速构建一个基于Java的Web应用程序。 一、框架下载 在开始搭建Web框架之前,我们需要下载相关的框架。包括Struts2、Spring和iBATIS三个框架。 1.1 Struts2框架 Struts2框架是Apache开源...

    java webservices.jar

    在java开发services中,会用到: 1.webservices-api.jar 2.webservices-extra.jar 3.webservices-rt.jar 4.webservices-tools.jar 5.webservices-extra-api.jar 此压缩文件里就是这五个jar文件。

    SSM-空框架-java

    SSM框架是Java开发Web应用时常用的三大组件——Spring MVC、Spring和Mybatis的集成,它们协同工作,提供了一个高效且灵活的开发环境。在这个"SSM-空框架-java"项目中,开发者已经搭建了一个基础的SSM框架,方便其他...

    spring-webmvc5.3.6 jar包.rar

    spring-webmvc 是 Spring MVC 的一个实现。spriing-webmvc 依赖于 spring-web如果直接使用spring-webmvc,就会隐式地添加 spring-web。不必显示添加 spring-web。 该jar包含Spring MVC框架相关的所有类,如Servlets,...

    spring-webmvc-portlet.jar

    spring mvc 框架jar包;Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

    Node.js-asgc-web是傲世孤尘开源的一个nodejs一站式web框架

    Node.js ASGC-Web是由傲世孤尘开发并开源的一款全面的Node.js Web框架,旨在为开发者提供一个高效、便捷的环境来构建前后端一体化的Web应用。这款框架结合了后端服务器和前端库,实现了数据的双向绑定,大大提升了...

    webFramework-ts:使用Typescript构建的简单Web框架

    【标题】"webFramework-ts:使用Typescript构建的简单Web框架"揭示了这个项目的核心——一个基于TypeScript的轻量级Web开发框架。TypeScript是JavaScript的一个超集,它为开发者提供了静态类型检查、类、模块等现代...

    一个简单而现代的Java和Kotlin Web框架-Android开发

    Javalin-Java和Kotlin的简单Web框架Javalin是Kotlin和Java的...Javalin更像是一个库,而不是一个框架。 一些关键点:您不需要扩展任何内容没有@Annotations没有反射没有其他魔术;没有其他魔术。 只是代码。 一般信息:

    Python-一个现代快速简单的异步python3web框架

    "Python-一个现代快速简单的异步python3web框架"的标题表明我们将讨论的是一个基于Python 3的Web框架,它具有现代特性、高效性能以及对异步操作的良好支持。在Python Web开发中,异步功能变得越来越重要,因为它们...

    cpp-Crow一个非常快速和易于使用的C微型web框架

    这个框架的主要目标是提供一种简单、高效的方式来构建Web服务和应用程序。在C++的世界里,相比于其他重量级的Web框架,Crow以其轻量级和高性能著称。 Crow的核心特性包括: 1. **简洁的API**:Crow的API设计直观且...

Global site tag (gtag.js) - Google Analytics