JAVA 急速WEB框架Blast

——对JavaWeb的学习性框架,参考了spring的实现

——阅读Blast源码可以快速掌握JavaWeb常用技术和方法论,并付诸实践

Blast 是基于 Java 语言的极速 WEB 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级。在拥有Java语言所有优势的同时再拥有ruby、python等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 ;)

实现功能

  • IOC 依赖注入
  • AOP 面向切面
  • 注解支持

样例

启动Blast容器

代码方式启动

  1. ApplicationContext.start("tk.tankpao");
  2. Tww tww = (Tww) ApplicationContext.getBean("tww");

Web方式启动

  1. <context-param>
  2. <param-name>contextConfigLocation</param-name>
  3. <param-value>blast.properties</param-value>
  4. </context-param>
  5. <listener>
  6. <listener-class>tk.tankpao.blast.web.core.ContextLoaderListener</listener-class>
  7. </listener>
  8. <servlet>
  9. <servlet-name>blast</servlet-name>
  10. <servlet-class>tk.tankpao.blast.web.servlet.DispatcherServlet</servlet-class>
  11. <load-on-startup>1</load-on-startup>
  12. </servlet>
  13. <servlet-mapping>
  14. <servlet-name>blast</servlet-name>
  15. <url-pattern>/</url-pattern>
  16. </servlet-mapping>

context-param和ContextLoaderListener启动了Blast容器,可以管理bean和实现AOP。

DispatcherServlet启动了Blast对Web功能的支持。

赋配置文件blast.properties内容:

  1. base_package=tk.tankpao,com.wzg
  2.  
  3. views_base_path_prefix=/WEB-INF/page/
  4.  
  5. views_base_path_suffix=.jsp

其中base_package配置需要扫描的包路径以逗号分割。

views_base_path_prefix配置返回视图的根路径。

views_base_path_suffix配置返回视图文件的后缀。

控制器

  1. @RequestMapping(path="/test")
  2. @Component(name="testAction")
  3. public class TestAction {
  4.  
  5. @ResponseBody
  6. @RequestMapping(path="/test1")
  7. public User test1(User user, String name, Integer age){
  8. System.out.println("asdasdasdasdasd");
  9. System.out.println("name="+name);
  10. System.out.println("age="+age);
  11. System.out.println(user);
  12. return user;
  13. }
  14.  
  15. @RequestMapping(path="/test2")
  16. public String test2(){
  17.  
  18. return "NewFile";
  19. }

@RequestMapping(path="/test") 请求映射地址

@Component(name="testAction") 类似spring的Component注解,标注该bean交由Blast管理

@ResponseBody 返回内容转成json

注:控制层方法接收前端请求参数能自动转换成对象。

AOP实现

  1. @Aspect
  2. @Pointcut(path="tk..core#*w#dd,tk..core#Tww#dd,tk..core#Tw*#dd")
  3. public class AspectSetting extends BaseInterceptor{
  4.  
  5. /* (非 Javadoc)
  6. * Description:
  7. * @see tk.tankpao.blast.core.aop.BaseInterceptor#beforeRunning(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
  8. */
  9. @Override
  10. public void beforeRunning(Object target, Method method, Object[] args) throws Throwable {
  11. System.out.println();
  12. System.out.println(target.getClass().getName() + "." + method.getName());
  13. System.out.println("Interceptor start");
  14.  
  15. }
  16.  
  17. /* (非 Javadoc)
  18. * Description:
  19. * @see tk.tankpao.blast.core.aop.BaseInterceptor#afterReturning(java.lang.Object, java.lang.reflect.Method, java.lang.Object[], java.lang.Object)
  20. */
  21. @Override
  22. public void afterReturning(Object target, Method method, Object[] args, Object returnValue) throws Throwable {
  23. System.out.println("Interceptor end");
  24. System.out.println(target.getClass().getName() + "." + method.getName());
  25. System.out.println();
  26. }
  27.  
  28. }

该类为AOP配置类 需集成BaseInterceptor类,按需实现前置beforeRunning和后置afterReturning方法。

Blast支持同一类的多层代理。

@Aspect 标注该类为AOP配置类 @Pointcut(path="tk..core#w#dd,tk..core#Tww#dd,tk..core#Tw#*d") 标注切点,支持模糊匹配。

匹配规则

包名#类名#方法名[,]

其中

..      表示任意多层级包

*      表示模糊匹配

,      分割多种不同路径

JAVA 急速WEB框架Blast-本人开发的JavaWeb急速框架Blast上线了的更多相关文章

  1. 本人开发的JavaWeb急速框架Blast上线了

    JAVA 急速WEB框架Blast --对JavaWeb的学习性框架,参考了spring的实现 --阅读Blast源码可以快速掌握JavaWeb常用技术和方法论,并付诸实践 Blast 是基于 Jav ...

  2. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  3. 转: 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    from: https://github.com/RubyLouvre/agate/issues/8 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以 ...

  4. 在做java 的web开发,为什么要使用框架

    现在做项目都会使用框架,现在很常见的框架就是SSH(Struts+SpringMVC+spring+hibernate),SSM(Struts/springMVC+Spring+Hibernate), ...

  5. Java开发web的几种开发模式

    Java Web开发方案有多种可供选择,这里列举一些经典的开发模式进行横向比较,为Java Web的开发模式选择提供参考.除此之外还有好多方案(如Tapestry和Wicket等等)并不了解,这里就不 ...

  6. Java在Web开发语言上败给了PHP

    PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...

  7. Java在Web开发语言上败给了PHP(转)

    PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...

  8. Java开发工程师(Web方向) - 03.数据库开发 - 第5章.MyBatis

    第5章--MyBatis MyBatis入门 Abstract: 数据库框架的工作原理和使用方法(以MyBatis为例) 面向对象的世界与关系型数据库的鸿沟: 面向对象世界中的数据是对象: 关系型数据 ...

  9. 【码云周刊第 23 期】Web 高效开发必备的 PHP 框架(从这里学起)good

    码云项目推荐 1.项目名称:多功能 THinkPHP 开源框架 项目简介:使用 THinkPHP 开发项目的过程中把一些常用的功能或者第三方 sdk 整合好,开源供亲们参考,如 Auth 权限管理.支 ...

随机推荐

  1. User survey(用户调研)

    郑文武——小学二年级学生 姓名 郑文武  性别.年龄 男.9岁                      职业 学生 收入 父母给的零花钱 知识层次和能力 会使用手机 生活/工作情况 努力学习但数学成 ...

  2. ACM的fflush(stdin)的问题

    在最近的刷题过程中,因为用到了很多字符串的操作,有时需要多次清空缓冲区,所以用了fflush(stdin);的语句,确实很好用,但是发现在OJ上提交后会出现runtime error的问题.当时并没有 ...

  3. CSS+JS笔记

    CSS篇: 1.a标签去掉下划线 a { text-decoration:none; }

  4. 一致性Hash算法(KetamaHash)的c#实现

    Consistent Hashing最大限度地抑制了hash键的重新分布.另外要取得比较好的负载均衡的效果,往往在服务器数量比较少的时候需要增加虚拟节点来保证服务器能均匀的分布在圆环上.因为使用一般的 ...

  5. 模拟alert,confirm 阻塞状态

    /*** * 模拟alert弹窗 * content 为弹框显示的内容 * 确定按钮对应的下面取消关闭显示框 * **/function oAlert(content) { var oWrap = $ ...

  6. build.xml

    下载ant 解压ant 后设置ANT_HOME, PATH中添加ANT_HOME目录下的bin目录(如:ANT_HOME:,PATH:D:\apache-ant-1.9.2%ANT_HOME%\bin ...

  7. Java并发编程中的设计模式解析(二)一个单例的七种写法

    Java单例模式是最常见的设计模式之一,广泛应用于各种框架.中间件和应用开发中.单例模式实现起来比较简单,基本是每个Java工程师都能信手拈来的,本文将结合多线程.类的加载等知识,系统地介绍一下单例模 ...

  8. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

    题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...

  9. MT【136】一道三次函数的最佳逼近问题

    已知函数\(f(x)=-x^3-3x^2+(1+a)x+b(a<0,b\in R)\), 若\(|f(x)|\)在\([-2,0]\)上的最大值为\(M(a,b)\),求\(M(a,b)\)的最 ...

  10. 【比赛】NOIP2017 列队

    一直忘了发,现在赶快补 用权值线段树维护有人的位置,动态开点省空间 多加的人用个vector存下来就可以了 #include<bits/stdc++.h> #define ui unsig ...