论坛首页 Java企业应用论坛

一个简单的web框架-beetlefly

浏览 9429 次
精华帖 (0) :: 良好帖 (5) :: 新手帖 (7) :: 隐藏帖 (3)
作者 正文
   发表时间:2009-05-25   最后修改:2009-05-27
OO
设计思想: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. 第三步,没有了,你可以执行你的程序了,是不是很简单。

   发表时间:2009-05-25  
每个Action都要带这么一个(HttpServletRequest req, HttpServletResponse resp)
够麻烦的。
个人认为不妥。
0 请登录后投票
   发表时间:2009-05-25   最后修改:2009-05-25
stworthy 写道
每个Action都要带这么一个(HttpServletRequest req, HttpServletResponse resp)
够麻烦的。
个人认为不妥。

设计一个HttpServletRequest req, HttpServletResponse resp的包装Class,放入ThreadLocal?
个人认为这样也不妥。与原来的编程风格差异太大了。这个项目的目标就是简单。只要会Servlet编程,看了说明就会使用。
0 请登录后投票
   发表时间:2009-05-25  
还是struts2更简单。
0 请登录后投票
   发表时间:2009-05-25  
jianfeng008cn 写道
还是struts2更简单。

看了一遍:http://struts.apache.org/2.0.9/docs/struts-2-spring-2-jpa-ajax.html。
不明白struts2简单到哪里?struts.xml要是不需要配置才能更我这个一样简单。
0 请登录后投票
   发表时间:2009-05-25  
思路挺好的。鼓励一下

0 请登录后投票
   发表时间:2009-05-27  
可以参照springside看看,先不说struts2的理念和扩展性,他的用法是很灵活的,零配置也很方便,而且通过自己设计拦截器和result,可以用得很舒服,山寨框架自己练练编程蛮好的,但是往往作者报喜不报忧,实际上和主流框架的差距不是一点点,je上很多以前发过的框架都是如此,框架开发者一般能力比较强,我想还是投入开源阵地做点是实实在在的贡献吧。(菜鸟谈想法,老鸟别愤怒哈~~)
0 请登录后投票
   发表时间:2009-05-27  
to:jianfeng008cn
我这个只是一个试验性的原型项目,不是让大家用的,而是用来探讨的。说句实话,这个东西的编码2天功夫就完成了。
公布出来,不是对开源阵地做贡献,难道只有改进strut,spring才是。
0 请登录后投票
   发表时间:2009-05-27   最后修改: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";
}
}
0 请登录后投票
   发表时间: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对接(其实是抄袭)。
还有,你那个我下载了,说句实在话,别介意,设计思路,注释文档,测试一概没有,神仙才会看。
要交流,起码先让别人知道你的思想不是?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics