当前位置: 首页 > 软件库 > Web应用开发 > Web框架 >

jfinal-dreampie

基于 jfinal 的开源框架库
授权协议 GPL
开发语言 Java JavaScript HTML/CSS
所属分类 Web应用开发、 Web框架
软件类型 开源软件
地区 国产
投 递 者 方鸿羲
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

jfinal-dreampie 是一个基于jfinal的开源框架库,主要集成或调优功能如下:

1.缓存维护更细粒度

 @CacheNameRemove(name = AppConstants.DEFAULT_CACHENAME)


@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface CacheNameRemove {
  String name();

  String[] keys() default {};
}

//根据key值来移除基于某个特定方法的缓存,而不是移除整个controller下的缓存

String controllerKey = ai.getControllerKey();
    if (!ValidateUtils.me().isNullOrEmpty(removeCacheName)) {
      String keyPrefix = null;
      if (!ValidateUtils.me().isNullOrEmpty(removeCacheKeys)) {
        for (String removeKey : removeCacheKeys) {
          keyPrefix = controllerKey + SLASH + removeKey;
          removeByCacheKey(removeCacheName, keyPrefix);
        }
      } else {
        keyPrefix = controllerKey;
        removeByCacheKey(removeCacheName, keyPrefix);
      }
    }

2.增加Slf4jLogger实现,然日志配置能基于任何Slf4j下的log实现,如logback

public class Slf4jLogFactory implements ILoggerFactory

3.基础model实现,实现基础的常用的部分功能用于复用

 public List<M> findAll() {
    return find(getSelectSql() + getExceptSelectSql());
  }

  public List<M> findBy(String where, Object... paras) {
    return find(getSelectSql() + getExceptSelectSql() + getWhere(where), paras);
  }

  public List<M> findTopBy(int topNumber, String where, Object... paras) {
    return paginate(1, topNumber, getSelectSql(), getExceptSelectSql() + getWhere(where), paras).getList();
  }

  public M findFirstBy(String where, Object... paras) {
    return findFirst(getSelectSql() + getExceptSelectSql() + getWhere(where), paras);
  }

  public Page<M> paginateAll(int pageNumber, int pageSize) {
    return paginate(pageNumber, pageSize, getSelectSql(), getExceptSelectSql());
  }

  public Page<M> paginateBy(int pageNumber, int pageSize, String where, Object... paras) {
    return paginate(pageNumber, pageSize, getSelectSql(), getExceptSelectSql() + getWhere(where), paras);
  }

  public boolean updateAll(String set, Object... paras) {
    return Db.update(getUpdateSql() + getSet(set), paras) > 0;
  }

  public boolean updateBy(String set, String where, Object... paras) {
    return Db.update(getUpdateSql() + getSet(set) + getWhere(where), paras) > 0;
  }

  public boolean deleteAll() {
    return Db.update(getDeleteSql()) > 0;
  }

  public boolean deleteBy(String where, Object... paras) {
    return Db.update(getDeleteSql() + getWhere(where), paras) > 0;
  }

  public boolean dropAll() {
    return Db.update(getDropSql()) > 0;
  }

  public boolean dropBy(String where, Object... paras) {
    return Db.update(getDropSql() + getWhere(where), paras) > 0;
  }

4.akka异步执行框架

public class AkkaPlugin implements IPlugin


Akka.system().scheduler().scheduleOnce(Duration.create(1000, TimeUnit.MILLISECONDS),
        new Runnable() {
          @Override
          public void run() {
            //do Something
          }
        }, Akka.system().dispatcher());

5.atmosphere  chat demo

@ManagedService(path = "/im/{room: [a-zA-Z][a-zA-Z_0-9]*}")
public class ChatRoom {
}

6.coffeescript  compiler plugin,编译coffeescript代码,并监控文件改动重新编译

public class CoffeeScriptPlugin implements IPlugin {
}

7.Flyway 数据库自动脚本升级 Plugin,用于自动生成或升级数据库,避免不断使用数据库工具修改数据导致的版本问题

public class FlywayPlugin implements IPlugin {
}

8.lesscss compiler plugin,编译less代码,并监控文件改动重新编译

public class LessCssPlugin implements IPlugin {
}

9.mailer 邮件发送plugin,使用akka异步发送邮件

 Akka.system().scheduler().scheduleOnce(Duration.create(1000, TimeUnit.MILLISECONDS),
        new Runnable() {
          @Override
          public void run() {
            MailerConf mailerConf = MailerPlugin.mailerConf;
            HtmlEmail htmlEmail = new HtmlEmail();
            htmlEmail.setCharset(mailerConf.getCharset());
            htmlEmail.setSocketTimeout(mailerConf.getTimeout());
            htmlEmail.setCharset(mailerConf.getEncode());
            htmlEmail.setHostName(mailerConf.getHost());
            if (!ValidateUtils.me().isNullOrEmpty(mailerConf.getSslport()))
              htmlEmail.setSslSmtpPort(mailerConf.getSslport());
            if (!ValidateUtils.me().isNullOrEmpty(mailerConf.getPort()))
              htmlEmail.setSmtpPort(Integer.parseInt(mailerConf.getPort()));
            htmlEmail.setSSLOnConnect(mailerConf.isSsl());
            htmlEmail.setStartTLSEnabled(mailerConf.isTls());
            htmlEmail.setDebug(mailerConf.isDebug());
            htmlEmail.setAuthenticator(new DefaultAuthenticator(mailerConf.getUser(), mailerConf.getPassword()));
            try {
              htmlEmail.setFrom(mailerConf.getFrom(), mailerConf.getName());
              htmlEmail.setSubject(subject);
              htmlEmail.addTo(recipients);
              htmlEmail.setHtmlMsg(body);
              // set the alternative message
              htmlEmail.setTextMsg("Your email client does not support HTML messages");
              if (!ValidateUtils.me().isNullOrEmpty(attachment))
                htmlEmail.attach(attachment);
              htmlEmail.send();
            } catch (EmailException e) {
              e.printStackTrace();
            }
          }
        }, Akka.system().dispatcher());

10.自定义验证码,可以自定义使用字符或者数字,颜色和样式可以自调

public class PatchcaRender extends Render {
  private static final String CODE_CHAR = "0123456789";
}

11.QuartzPlugin使用quartz执行定时任务,参照部分网络实例,简易实现

QuartzFactory.me().startJobOnce(TimeUtils.me().toString(DateTime.now()), ++jobId, "stati", this.getClass().getSimpleName(), OrderDataJob.class, param);

12.shiro权限框架,基于数据库url配置过滤,验证码验证

//读取数据库权限只需实现该接口
public interface JdbcAuthzService {
  public Map<String, AuthzHandler> getJdbcAuthz();
}

13.shiro的freemarker标签库

<@shiro.hasPermission name="P_USER">
                <li><a href="/admin/user">${i18n.getText("admin.user")}</a></li>
            </@shiro.hasPermission>

14.xss过滤的StringEscapeUtils过滤器实现

public class AttackHandler extends Handler {
  @Override
  public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
    request = new HttpServletRequestWrapper(request);
    nextHandler.handle(target, request, response, isHandled);
  }
}

15.json数据请求时,返回的error信息使用json字符串

public class JsonErrorRenderFactory implements IErrorRenderFactory {
  public Render getRender(int errorCode, String view) {
    if (ThreadLocalUtil.isJson())
      return new JsonErrorRender(errorCode, view);
    else
      return new ErrorRender(errorCode, view);
  }
}

16.自动绑定多数据源的tablebind

AutoMultiSourceTableBindPlugin tableBindDefault = new AutoMultiSourceTableBindPlugin(druidDefault, SimpleNameStyles.LOWER);
//让default数据源排除shop目录下的model,因为该目录的model属于custom数据源
tableBindDefault.addExcludePaths("cn.dreampie.function.shop");

 AutoMultiSourceTableBindPlugin tableBindCustom = new AutoMultiSourceTableBindPlugin(druidCustom, SimpleNameStyles.LOWER);
//让custom只扫描shop目录,注意当使用includepaths是只会扫描配置的路径,如果没有使用includepaths会扫描全路径
tableBindCustom.addIncludePaths("cn.dreampie.function.shop");

17.压缩请求数据的gzipFilter,可测试

<!--gzip compress filter-->
  <filter>
    <filter-name>gzipFilter</filter-name>
    <filter-class>cn.dreampie.common.web.filter.gzip.GZIPFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>gzipFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>ERROR</dispatcher>
  </filter-mapping>
  <!--gzip compress filter-->

18.http缓存cacheFilter,和gzipFilter共同用于提高用户性能

<!-- cache filter-->
  <filter>
    <filter-name>cacheFilter</filter-name>
    <filter-class>cn.dreampie.common.web.filter.cache.CacheFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>cacheFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>ERROR</dispatcher>
  </filter-mapping>
  <!--cache filter-->
  • 这个定时任务插件精确的时间可以到秒,使用方面跟jfinal-scheduler插件的使用方式差不多 Dreampie/jfinal-quartz https://github.com/Dreampie/jfinal-quartz/blob/master/pom.xml Quartz学习——Quartz大致介绍(一) https://blog.csdn.net/u010648555/article/

  • https://github.com/Dreampie/jfinal-captcha jfinal-captcha是一款验证吗插件: 1 <dependency> 2 <groupId>cn.dreampie</groupId> 3 <artifactId>jfinal-captcha</artifactId> 4 <version>${jfinal-captc

  • cn.dreampie jfinal-lesscss ${jfinal-lesscss.version} 目前刚刚发布第一个版本0.1: 0.1 使用方法: 在jfinal config里configPlugin方法加入 plugins.add(new LessCssPlugin("/lesscss/", "/style/"));//第一个参数是less的文件目录,第二个是输出的css目录 只有这

  • https://github.com/Dreampie/jfinal-coffeescript    jfinal-coffeescript是一款java下的coffeescript实时编译插件: cn.dreampie jfinal-coffeescript ${jfinal-coffeescript.version} 目前刚刚发布第一个版本0.1: 0.1 使用方法: 在jfinal conf

  • 背景介绍 之所以想要写这一篇分享是因为前一段时间看了另一个分享,使用日志打印出完整的sql语句,而不是像jfinal内置的devMode中带”?”的sql语句.Jfinal中使用日志框架输出完整sql语句信息 但是遇到了一个问题,该分享中使用的日志框架是logback,但是我的项目中使用的是jfinal自带的日志框架(即配置了log4j.properties),会打印出来很多无用的日志,当时并不知

  • maven 引用 ${jfinal-captcha.version}替换为相应的版本如:0.1 <dependency> <groupId>cn.dreampie</groupId> <artifactId>jfinal-captcha</artifactId> <version>${jfinal-captcha.version}</version> </dependency> /

 相关资料
  • dreampie-jfinal 使用JFinal框架,并提供akka异步执行集成,多数据源自动orm映射,flyway数据库脚本升级,shiro+权限系统+freemarker支持,以及其他改进 bootstrap前端 该项目剥离出的框架jfinal-dreampie,大家可以看新demo:jfinal+angular(icedog) 新增前端:requireJs+backbone+coffees

  • 一、安装 Maven Maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。 Maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展,利用 Maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。 1. 下载 Maven http://maven.apa

  • JFinal 是基于 Java 语言的极速 WEB + ORM + AOP + Template Engine 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。

  •     JFinal 是基于 Java 语言的极速 WEB + ORM + AOP + Template Engine 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :) JFinal有如下主要特点: MVC 架构,设计精

  • 前置技能 java基础 B/S应用开发经验 入门推荐学习路线 强烈要求,看本文档前,至少结合官方demo看过一遍pdf文档 官网:http://www.jfinal.com/ 手册:http://download.jfinal.com/upload/2.2/jfinal-2.2-manual.pdf IntelliJ IDEA开发环境搭建 前置条件 操作系统已经安装IntelliJ IDEA 14

  • 本文向大家介绍JFinal极速开发框架使用笔记分享,包括了JFinal极速开发框架使用笔记分享的使用技巧和注意事项,需要的朋友参考一下 记录第一次使用JFinal,从简单的框架搭建到增删改查,从自带的方法到正常框架习惯的使用方式。 JFinal官网:http://www.jfinal.com/ JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少