一个简单的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. 第三步,没有了,你可以执行你的程序了,是不是很简单。

你可能感兴趣的:(spring,编程,框架,Web,webform)