有没有前台和后台都带的java后台java开源会员管理系统统开源框架

【最新】最流行的java后台框架组合 springmvc mybaits HTML5_Java_ThinkSAAS
【最新】最流行的java后台框架组合 springmvc mybaits HTML5
【最新】最流行的java后台框架组合 springmvc mybaits HTML5
内容来源: 网络
获取【下载地址】 QQ:
【免费支持更新】
A 代码生成器(开发利器); B 阿里巴巴数据库连接池
数据库连接池 阿里巴巴的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势
C 安全权限框架 D ehcache 自定义二级缓存;
E 微信接口开发(后续会加入Activiti5 工作流 )免费升级
模块化、服务化,流程化,耦合度低、扩展性好,灵活度高,工具类封装完整,干净利索,调用简单方便
提供Rest服务,支持APP手机应用(android和ios)接口、php、.net、易语言、VB等第三方接口调用
全新高大尚HTML5+css3.0+bootstrap响应式开发界面UI,( 手机 PC 平板 截图在下面)、前沿. spring restful 风格
框架搭建完善成熟,在此基础上做过很多项目,系统具有并发处理、分布式、稳定性。
系统功能完善,此为框架平台,文档、注释齐全,提供技术支持,专门供二次开发
在此基础上可二次开发(OA、ERP、CRM ,医疗管理、金融、网站后台、APP后台、电子商务、商城(赠送UI)等等
7.我们这边是公司,主要业务是定制开发, 此系统为我们平时给客户做项目用的,经过很多项目实战考验
-------------------------------------------------------------------------------------------------------------------------系统模块
组织管理:角色管理,分角色组和成员,有组权限和成员权限。
系统用户:对各个基本的组会员增删改查,单发、群发邮件短信,导入导出excel表格,批量删除
会员管理:对前台用户管理,分配会员级别,到期时间,状态,联系信息等资料
菜单管理:增删改查菜单 ztree(自定义菜单)业务菜单和系统菜单分离
数据字典:无限级别,支持多级别无限分类。内设编号,排序等
系统设置:修改系统名称,邮件服务器配置,短信账号设置,图片水印配置,微信配置
代码生成:打开代码生成器模块
图库管理:对批量上传的图片统一管理
性能监控:监控整个系统的性能,SQL监控,SQL防火墙,URL监控,SPRING监控,SESSION监控等
接口测试:POST or GET 方式检测系统接口,参数加密,json返回结果,计算服务器响应时间
发送邮件:单发,群发邮件
置二维码:生成 or 解析二维码
13.地图工具:经纬度操作
14.即时通讯:打开即时聊天窗口
15.在线管理:(统计在线人数和在线列表,可强制某用户下线),同一用户只能在一个客户端登录
16.打印测试:页面打印预览测试
菜单权限:分配给每个角色不同的菜单权限, 每个角色看到的菜单不同
按钮权限:独立分配不同的角色不同的功能权限,增删改查权限分配具体到不同的菜单
支持多用户分权限管理后台, 权限具体到不同的菜单不同的按钮
--------------------------------------------------------------------------------------------------------------信息模块(小项目代码中)
新闻管理:新闻的维护、发布、权重排序等 采用百度ueditor富文本框
公告管理:公告的维护、发布
广告管理:广告的维护、发布,状态维护,上传广告图片
友情链接:友情链接的维护、状态维护
特别推荐:特别推荐、状态维护
关注回复:微信用户关注公众号回复
文本回复:匹配关键词进行文本回复
图文回复:匹配关键词进行图文回复
应用命令:匹配关键词进行命令操作,例如微信发送命令,执行服务器重启、关机、锁定等操作
-------------------------------------------------------------------------------------------------------------------------
1. 导出 导入 excel 文件
2 导出word文件
3. IO 流上传下载文件
4. 群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮件)
5. 群发or单独 发送短信,支持两种第三方短信商接口
6. spring aop 事物处理
7. 代码生成器 (freemarker), 代码 zip 压缩打包
8. MD5加密 SHA加密(登录密码用此加密)接口加密身份校验
9. 数据库连接池 阿里的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势,支持并发
10.加入安全框架 shiro (登录授权)(session管理)
11.根据汉字 解析汉字的全拼(拼音)和首字母(导入excel到用户表,根据用户的汉字姓名生成拼音的用户名)
(支持与其它语言数据交互)
13.极光推送 (推送给APP及时消息,APP不启动也能收到)
14.微信接口(身份验证,文本、图文回复等) 微信远程控制服务器重启、锁定、其它应用程序
15.java Quartz 定时器 (定时执行某程序,精确到秒,可设置周期)
16.java websocket 即时通讯技术,点对点,群聊,单聊,EXT4对话框
17.新增Lucene全文检索
18.Base64传输图片
19.图片加水印(图片水印,文字水印)
20.生成 or 解析 二维码
21.HTML5 + JAVAEE WebSocket 通信技术,WebSocket 验证用户登录,强制某用户下线
22.批量异步上传图片,可预览,有进度条,支持拖拽上传(百度webuploader )。列表动态滑动放大展示。
23.ehcache 自定义二级缓存 ,选择缓存存放目录,处理并发,增加系统性能
24.服务器内部GET POST 请求
25.uploadify 上传插件,单条、批量上传多线程,带进度条,异步,图片、视频, 其它文件格式均可上传
26.地图选点获取经纬度坐标,根据俩经纬度计算距离
27.tab标签页面功能,标签自由切换,不重复操作数据库
-------------------------------------------------------------------------------------------------------------------------
系统框架为:springmvc + mybaits 3.2 有 maven 版本和 非maven 版本 jdk 1.6 1.7 1.8 tomcat 6 7 8
数据库:oracle 版本 和 msyql 版本 ( spring3.0 和4.02 mybaits 3.2) 开发工具:myeclipse eclipse 均可
赠送 同UI springmvc + hibernate SpringSecurity Lucene Quartz MySQL、Oracle、SQL Server
赠送 同UI maven 分模块项目 springmvc + mybatis
-------------------------------------------------------------------------------------------------------------------------
系统演示视频:/s/1bnHdSYz 之前录的(有点粗糙, 凑合着看)
--------------------------------------------------------------------------------------------------------------------
PC实物截图如下
登录界面背景用HTML5特效自动切换(百叶窗,幕布等多种切换方式)
获取【下载地址】 QQ:
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信java项目前台页面和后台逻辑分开部署
rt,前台页面,后台逻辑,分成2个应用分开部署2台服务器,后台逻辑的应用加防火墙。
有没有成功的经验,求各位分享~~~~~~~
可以这样吗? 一般都是客户请求先访问到后台,然后后台跳转到jsp
你这样都是不同应用,不同服务器 ,也就是说跨界了……&
你觉得可以forward可以跨应用吗并且把数据完整传输过去?
除非你的前台都是ajax获取数据的方式 到有这个可能吧?
个人觉得是这样的,不知道其他人有没其他想法~!
介四嘛呀?没明白。。
用webservice
我们的项目就是这样的...
client ----& &server(调度请求的页面)----&server(调用请求的数据)----&data
client &-----&server(返回构造的页面)&----server(返回请求的数据) &&----- data
可以部署多种界面?
这种说法不太明确。一般说的前台页面值得是html,js,css,图片缓存。后台逻辑包括jsp和java代码,这样就可以了。
把你的后台做成对外提供数据的接口,跟开放平台的API一样&
前台web层专注做对数据的调用和展现
这样就分离开来了。可以分开部署
你说的后台可以用EJB,专门为你这种情况设计的。前台就随意了。15768人阅读
微信开发(1)
JavaWeb CURD 一键生成,再也不要重复搬砖了!
本文将给您介绍 AppAdmin 后台管理系统开发框架。
AppAdmin后台管理系统开发框架是一套Java开发的整合了当前众多比较流行的Java后台开发框架的系统,使用H5响应式布局。
整合了 spring + springMVC + hibernate (JPA) + shiro + ehcache 等框架,功能包括基本的系统管理、权限、角色、存储(oss、本地、ftp)、缓存、站内信、smtp邮件发送、微信公众号开发、富文本内容使用文件存储的统一实现等等众多模块,持续更新开发中。
主流技术框架
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由OP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。
JPA(Hiberntea)
JPA全称Java Persistence API。JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个,应该说无人能出其右。从功能上来说,JPA就是Hibernate功能的一个子集。Hibernate 从3.2开始,就开始兼容JPA。Hibernate3.2获得了Sun TCK的JPA(Java Persistence API) 兼容认证。
只要熟悉Hibernate或者其他ORM框架,在使用JPA时会发现其实非常容易上手。例如实体对象的状态,在Hibernate有自由、持久、游离三种,JPA里有new,managed,detached,removed,明眼人一看就知道,这些状态都是一一对应的。再如flush方法,都是对应的,而其他的再如说Query query = manager.createQuery(sql),它在Hibernate里写法上是session,而在JPA中变成了manager,所以从Hibernate到JPA的代价应该是非常小的。
在ORM的领域中,看来JPA已经是王道,规范就是规范。在各大厂商的支持下,JPA的使用开始变得广泛。
C3P0数据源
这是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
Freemarker
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。
Jetty服务器
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
Apache Shiro
这是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障-从命令行应用、移动应用到大型网络及企业应用。
这是一个开源的用来生成图形验证码的 Java 开源组件,使用起来也是非常的简单方便。
JackSon Json
这是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
MemoryCache
MemoryCache 是一个使用内存作为缓存的技术。
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将javaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁琐。
配置注解化、properties化、xml化
系统中有的配置通过properties文件实现【数据库、定时任务等】,有的配置通过xml实现【系统业务设置】,其他的框架机制上的配置则通过注解实现【控制器、业务层、数据访问层、实体类等】。
JPA Criteria查询封装
总所周知,使用Hibernate查询有很多种方式,可以使用Hibernate提供的HQL(hibernate query language)语言,还可以使用JPA标准的JPQL(Java Persistence Query Language)语言,还可以使用原生的数据库SQL语言。
SQL在效率、统计、需要使用特殊技巧的时候起到了很大的作用,但是相对比较难写。
HQL和JPQL类似,只是JPQL是标准,HQL是Hibernate查询语言,所以俩者之间选择JPQL,在遇到一些稍微复杂的问题时可以使用JPQL查询。
此外,系统中85%以上都是使用JPA提供的另外一套查询机制,Criteria查询方式。这种方式的特点是完全面向对象的查询,即使纯粹没有学过任何类SQL语言的开发者,只要Java学得好,面向对象的思想够深,看懂Criteria查询是很简单的。
高度抽取公用方法,查询,筛选,排序,分页等机制全部使用公用方法支持。通过泛型机制、配合少量反射技术实现公用方法的类型严格检测。
系统存储插件化
系统中当前支持三大中存储方式的实现,即本地存储、FTP存储、阿里云(OSS)存储。
三大存储方式都通过插件化开发,系统启动过程中,可通过后台存储插件相关功能处随时修改存储方式。
本地存储是默认方式。阿里云存储只需要您自行申请到OSS接口,将相关信息配置到后台即可,FTP存储同理。
高度模块化、子系统化
系统中分公用模块、业务子模块(buzz包下分类),比如微信模块、开发工具模块、演示实体模块等。
CURD生成(开发利器)
开发工具模块支持自定义实体名字、是否分页、是否可批量删除、是否树形实体、可以配置实体的属性(名字、类型、是否必须、是否支持搜索、是否支持字段排序、是否唯一)等。然后一键生成从后台到前台的所有代码文件、页面文件。
支持字符串、整数、长整数、日期、布尔、枚举、部分关联类型、BigDecimal、以及自定义类型等属性类型,关联类型当前支持select方式、search方式实现。
生成功能可支持分页、curd、字段排序搜索、页面验证、后台验证、ajax验证等等功能。
此外,开发模块高度二次开发化,使用主题开发方式,只要您的技术够好或者更好,支持自定义模板主题,生成您自己的主题页面。
Excel报表视图基类实现
当您再需要导出excel的时候,只需要简单的返回一个excel视图,配置好您要导出的实体的字段列表,字段列长(可选)即可立即实现excel报表导出功能了。
丰富的工具类
Freemarker模板操作工具类
Http请求工具类
图片处理工具类
JackSon处理工具类
MemoryCache工具类
RSA加密工具类
WebUtils工具类【操作cookie等】
多方面安全
自动实现Token机制
Shiro权限控制
resource等资源访问控制
属性筛选封装Filter类
public class Filter implements Serializable {
public enum Operator {
/** 等于 */
/** 不等于 */
/** 大于 */
gt, greaterThan,
/** 小于 */
lt, lessThan,
/** 大于等于 */
ge, greaterThanOrEqualTo,
/** 小于等于 */
le, lessThanOrEqualTo,
/** 相似 */
/** 包含 */
/** 为Null */
/** 不为Null */
/** 默认是否忽略大小写 */
private static final boolean DEFAULT_IGNORE_CASE = false;
/** 属性 */
/** 运算符 */
/** 标识值value是否是另外一个属性的名称 */
private Boolean isValuePropery = false;
/** 是否忽略大小写(仅针对value为String类型情况有效) */
private Boolean ignoreCase = DEFAULT_IGNORE_CASE;
* 初始化一个新创建的Filter对象
private Filter() {
* 初始化一个新创建的Filter对象(使用Object value)
* property
* operator
* isValuePropery
value是否是属性
private Filter(String property, Operator operator, Object value, boolean isValuePropery) {
this.property =
this.operator =
this.value =
this.isValuePropery = isValueP
* 初始化一个新创建的Filter对象(使用Object value)
* property
* operator
* isValuePropery
value是否是属性
* ignoreCase
忽略大小写
private Filter(String property, Operator operator, Object value, boolean isValuePropery, boolean ignoreCase) {
this.property =
this.operator =
this.value =
this.ignoreCase = ignoreC
this.isValuePropery = isValueP
BaseDaoImpl中的addRestrictions方法
protected void addRestrictions(CriteriaQuery&T& criteriaQuery, List&Filter& filters) {
if (criteriaQuery == null || filters == null || filters.isEmpty()) {
Root&T& root = getRoot(criteriaQuery);
if (root == null) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
Predicate restrictions = criteriaQuery.getRestriction() != null ? criteriaQuery.getRestriction() : criteriaBuilder.conjunction();
for (Filter filter : filters) {
if (filter == null || StringUtils.isEmpty(filter.getProperty())) {
if (filter.getOperator() == Operator.eq && filter.getValue() != null) {
if (filter.getIgnoreCase() != null && filter.getIgnoreCase() && filter.getValue() instanceof String) {
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(criteriaBuilder.lower(root.&String& get(filter.getProperty())), criteriaBuilder.lower(root.&String& get(filter.getComparePropery()))));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(criteriaBuilder.lower(root.&String& get(filter.getProperty())), ((String) filter.getValue()).toLowerCase()));
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(root.get(filter.getProperty()), root.get(filter.getComparePropery())));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(root.get(filter.getProperty()), filter.getValue()));
} else if (filter.getOperator() == Operator.ne && filter.getValue() != null) {
if (filter.getIgnoreCase() != null && filter.getIgnoreCase() && filter.getValue() instanceof String) {
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.notEqual(criteriaBuilder.lower(root.&String& get(filter.getProperty())), criteriaBuilder.lower(root.&String& get(filter.getComparePropery()))));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.notEqual(criteriaBuilder.lower(root.&String& get(filter.getProperty())), ((String) filter.getValue()).toLowerCase()));
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.notEqual(root.get(filter.getProperty()), root.get(filter.getComparePropery())));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.notEqual(root.get(filter.getProperty()), filter.getValue()));
} else if (filter.getOperator() == Operator.gt && filter.getValue() != null) {
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.gt(root.&Number& get(filter.getProperty()), root.&Number& get(filter.getComparePropery())));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.gt(root.&Number& get(filter.getProperty()), (Number) filter.getValue()));
} else if (filter.getOperator() == Operator.greaterThan && filter.getValue() != null) {
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.greaterThan(root.&Date& get(filter.getProperty()), root.&Date& get(filter.getComparePropery())));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.greaterThan(root.&Date& get(filter.getProperty()), (Date) filter.getValue()));
} else if (filter.getOperator() == Operator.lt && filter.getValue() != null) {
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.lt(root.&Number& get(filter.getProperty()), root.&Number& get(filter.getComparePropery())));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.lt(root.&Number& get(filter.getProperty()), (Number) filter.getValue()));
} else if (filter.getOperator() == Operator.lessThan && filter.getValue() != null) {
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.lessThan(root.&Date& get(filter.getProperty()), root.&Date& get(filter.getComparePropery())));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.lessThan(root.&Date& get(filter.getProperty()), (Date) filter.getValue()));
} else if (filter.getOperator() == Operator.ge && filter.getValue() != null) {
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.ge(root.&Number& get(filter.getProperty()), root.&Number& get(filter.getComparePropery())));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.ge(root.&Number& get(filter.getProperty()), (Number) filter.getValue()));
} else if (filter.getOperator() == Operator.greaterThanOrEqualTo && filter.getValue() != null) {
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.greaterThanOrEqualTo(root.&Date& get(filter.getProperty()), root.&Date& get(filter.getComparePropery())));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.greaterThanOrEqualTo(root.&Date& get(filter.getProperty()), (Date) filter.getValue()));
} else if (filter.getOperator() == Operator.le && filter.getValue() != null) {
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.le(root.&Number& get(filter.getProperty()), root.&Number& get(filter.getComparePropery())));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.le(root.&Number& get(filter.getProperty()), (Number) filter.getValue()));
} else if (filter.getOperator() == Operator.lessThanOrEqualTo && filter.getValue() != null) {
if (filter.valueIsPropery()) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.lessThanOrEqualTo(root.&Date& get(filter.getProperty()), root.&Date& get(filter.getComparePropery())));
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.lessThanOrEqualTo(root.&Date& get(filter.getProperty()), (Date) filter.getValue()));
} else if (filter.getOperator() == Operator.like && filter.getValue() != null && filter.getValue() instanceof String) {
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.like(root.&String& get(filter.getProperty()), (String) filter.getValue()));
} else if (filter.getOperator() == Operator.in && filter.getValue() != null) {
restrictions = criteriaBuilder.and(restrictions, root.get(filter.getProperty()).in((Collection&?&) filter.getValue()));
} else if (filter.getOperator() == Operator.isNull) {
restrictions = criteriaBuilder.and(restrictions, root.get(filter.getProperty()).isNull());
} else if (filter.getOperator() == Operator.isNotNull) {
restrictions = criteriaBuilder.and(restrictions, root.get(filter.getProperty()).isNotNull());
criteriaQuery.where(restrictions);
FilePlugin
public class FilePlugin extends StoragePlugin implements ServletContextAware {
/** servletContext */
private ServletContext servletC
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletC
public String getName() {
return "本地文件存储";
public String getVersion() {
return "1.0";
public String getAuthor() {
return "APP";
public String getSiteUrl() {
return "http://";
public String getInstallUrl() {
return "file/install.jhtml";
public String getUninstallUrl() {
return "file/uninstall.jhtml";
public String getSettingUrl() {
return "file/setting.jhtml";
public void upload(String path, File file, String contentType) {
File destFile = new File(servletContext.getRealPath(path));
FileUtils.moveFile(file, destFile);
} catch (IOException e) {
e.printStackTrace();
public String getUrl(String path) {
Setting setting = SettingUtils.get();
return setting.getSiteUrl() +
public List&FileInfo& browser(String path) {
Setting setting = SettingUtils.get();
List&FileInfo& fileInfos = new ArrayList&FileInfo&();
File directory = new File(servletContext.getRealPath(path));
if (directory.exists() && directory.isDirectory()) {
for (File file : directory.listFiles()) {
FileInfo fileInfo = new FileInfo();
fileInfo.setName(file.getName());
fileInfo.setUrl(setting.getSiteUrl() + path + file.getName());
fileInfo.setIsDirectory(file.isDirectory());
fileInfo.setSize(file.length());
fileInfo.setLastModified(new Date(file.lastModified()));
fileInfos.add(fileInfo);
return fileI
WeiXinConfig中的refreshAccessToken方法
* 刷新 AccessToken
public void refreshAccessToken() {
if (pareAndSet(false, true)) {
long lastWeixinAccessTokenStartTime = weixinAccessTokenStartT
this.weixinAccessTokenStartTime = System.currentTimeMillis();
Map&String, Object& jsonMap = WeiXinHttpUtils.getJson(WeiXinURL.get_accessTokenUrl, this, null, null);
if (jsonMap.containsKey("access_token")) {
this.accessToken = jsonMap.get("access_token").toString().trim();
if (jsonMap.containsKey("expires_in")) {
this.expireTime = (Integer) jsonMap.get("expires_in") * 1000;
("WeiXinConfig.refreshAccessToken() info. jsonMap = " + jsonMap.toString());
} else if (jsonMap.containsKey("errcode")) {
log.error("WeiXinConfig.refreshAccessToken() error. jsonMap = " + jsonMap.toString());
this.weixinAccessTokenStartTime = lastWeixinAccessTokenStartT
log.error("WeiXinConfig.refreshAccessToken() unknown error. jsonMap = " + jsonMap.toString());
this.weixinAccessTokenStartTime = lastWeixinAccessTokenStartT
} finally {
accessTokenRefreshingFlag.set(false);
高大上的登录界面
开发工具基本配置
CURD属性配置
CURD一键生成
微信状态查看
树形演示实体
管理员列表
存储插件列表
二维码生成
以上仅仅是部分功能,很多列表页面比较类似就不重复了。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:33082次
排名:千里之外
原创:14篇
(1)(1)(2)(5)(4)(8)

我要回帖

更多关于 java开源相册管理系统 的文章

 

随机推荐