strive框架:JavaEE开发框架

创建时间:2018-11-23 下载量:27 访问量:186 赞:0 踩:0
项目介绍

strive框架介绍

使用前请仔细阅读本文档

基于 SpringBoot 2.x 的 JavaEE 基础开发框架

本框架是基于SpringBoot开源技术,结合平时工作开发的经验,为了简化开发工作,提高开发效率, 自主研究集成的框架。

本框架细化了SpringBoot2.x在开发应用中的配置,并在本文档中介绍各种配置作用及修改所表示 的不同功能。

本框架采用完全开源的方式,框架中的配置与扩展的源码都是可以进行二次开发,同时具有学习研究参考的作用。

在开发中遇到的技术问题或建议请联系邮箱:system@glxxw2018.com

使用本框架开发的网站示例请参见:http://www.glxxw2018.com

如有不明白的可以登录工联信息网,在工联知道组下进行提问。

strive 框架的构成

本框架主要由SpringBoot2.x(Spring5,Spring MVC等技术)、数据库访问(Hibernate、Mybatis)、 安全框架(Spring Security)、页面模板(thymeleaf 3)。

  • Hibernate主要用来创建数据库实体,以实现自动建表的功能,包括简单的增删改查业务处理。
  • Mybatis主要用于复杂的结果集查询,使用SQL注解与Provider方式处理较复杂的增删改查业务。
  • Spring Security主要用于安全拦截与处理,自定义过滤器、验证处理器,包括同步与异步登录方式。
  • 本框架使用Thymeleaf(类似JSP页面)作为前端页面的显示模板,其它框架需要用户自己修改配置,本框架暂不研究针对别的模板的集成。
  • 本框架采用Java Config代码与注解的配置方式,摈弃xml配置方式,使用此框架的开发者须接受此约定。

框架中集成的相关技术如下所示:

  • Spring MVC 框架
  • Spring Ioc 容器
  • Hibernate 数据库访问
  • MyBatis 数据库访问
  • C3P0 连接池
  • Spring Security 安全框架
  • thymeleaf 页面模板
  • WebService 服务与调用接口
  • json 与 xml 处理技术
  • 基于Oauth2.0 单点登录功能
  • mail 邮件发送功能
  • 异步执行功能
  • Quartz 定时任务
  • 二维码生成服务
  • WebSockect 服务与调用接口【后续集成】
  • 基于 Redis 缓存技术【后续集成】
  • 使用注解日志【后续集成】
  • RabbitMQ 消息队列【后续集成】
  • Solr 全文检索功能【后续集成】

从gitee(码云)上获取该项目

  • 使用git命令获取项目:git clone https://gitee.com/zxstrive/strive.git
  • 本框架使用gradle构建,关于gradle的安装,参考互联网。
  • 使用gradle命令生成eclipse项目:gradle eclipse。需安装gradle插件。
  • Intellij Idea可以直接打开工程。关闭Inceptions设置。
  • 需要安装lobmok工具插件(使注注解生成getter与setter方法),否则会报错。
  • 使用gradle构建之前修改build.gradle中的maven-url,根据注释改成aliyun仓库镜像。
  • 框架使用内置H2数据库,构建好后可以直接运行,不需要任何其它操作,如果要使用其它数据库可修改c3p0.properties。
  • 框架黙认超级用户superadmin/123456,可使用此用户名与密码登录访问权限控制页面。

strive 框架的目录使用约定

源代码目录:

  • com.fight.strive
    • app //业务开发时使用的目录
      • bean //非数据库实体的辅助模型pojo类,如业务中使用的xml或json转换的中间对象
      • controller //web请求处理器类,此目录中只存放Spring使用@Controller注解的类
      • dao //此目录中只存放访问数据库的类,如JPA Repository、MyBatis Mapper或Provider等
        • jpa //存放JPA Repository
        • mybatis //存放MyBatis Mapper 与 provider
          • mapper //存放MyBatis Mapper接口,即使用@Mapper注解的接口
          • provider //存放MyBatis Provider,即MyBatis动态SQL生成类
      • entity //存放访问数据库的实体
        • jpa //存放JPA实体类,即使用@Entity注解的类
        • solr //存放solr实体类,即与Solr Document相关的类
      • property //此目录中的类是获取.properties文件中的配置信息
      • service //此目录存放业务服务类,即使用@Service注解的类。
      • webservice //提供webservice功能的接口与实现都放在此目录中
      • websocket //提供websockect处理功能的接口与实现都放在此目录中
    • sys //框架相关的配置与工具或扩展类,正常开发时不用修改此目录下的代码,尽量不要使用此目录
      • annotaion //框架扩展注解存放目录
      • aspect //Spring切面处理类的存放目录
      • bean //框架所需的或预定义的辅助pojo
      • config //框架java config存放目录
      • controller //框架预定义的Spring 控制器存放目录
      • entity //框架预定义的数据库实体类存放目录
      • exception //框架预定义的异常类目录,包括全局异常处理,与框架自定义异常类
      • extend //框架集成项目的相关扩展如Spring Security自定义过滤器和认证处理器,Thymeleaf自定义标签等存放目录
      • interceptor //框架预定义的自定义拦截器存放目录
      • property //此目录中的类是获取.properties文件中的配置信息,框架自定义properties文件为strive.properties
      • service //框架预定义的服务类存放目录
      • utils //框架预定义的工具类存放目录

资源目录:

  • static //静态资源存放的文件
    • app //开发中使用的css、js与静态html文件存放目录
    • sys //框架预定义的资源文件存放目录,开发中尽量不要向此类目录中添加内容
  • templates.views //动态模板存放的文件
    • admin //需要访问权限认证的页面放在此目录中
    • user //不需要认证的页面放在此目录中

资源文件:

  • c3p0.properties //C3P0连接池的配置文件
  • strive.properties //自定义属性文件,可以通过StriveProperties类进行注入使用,用户可以新建一个.properties文件, 也可以复用框架中的StriveProperties类和strive.properties文件
  • banner.txt // console banner 图案文字
  • application.yml //Spring Boot 核心配置文件

注意:开发中使用的源代码目录为com.fight.strive.app,使用的资源目录为static/app和 templates.views。其它目录尽量不要修改。

strive 框架的基本使用

本章主要描述基本且重要的开发功能,如下:

  • 页面模板与示例
  • 登录认证与权限控制
  • 数据库访问示例
  • 自定义的@RestRequestMapping注解

页面模板与示例

本框架使用的页面模板是 Thymeleaf3.0 框架,本框架提供了一个示例页面,即在templates.views目录 下面的example.html,开发时复制此html页面修改即可,也可以将此页面定义为IDE的html的template。 Thymeleaf模板语法可以参考:(https://www.e-learn.cn/thymeleaf)

thymeleaf 模板配置源码:com.fight.strive.sys.config.WebAppConfig类中的 templateResolver()的方法与templateEngine()的方法。

了解 example.html

example.html与普通的html是有区别的。

  • 首先,声明了3个名称空间xmlns:

    • th是thymeleaf模板专用标签;
    • sec是spring security安全控制标签,如获取当前登录用户,用户是否具有某权限等标签。
    • <span sec:authentication="principal.username" />这里的principal相当于
    • com.fight.strive.sys.extend.security.CustomUserDetails中定义的属性。
    • strive是框架提供的thymeleaf模板的自定义标签。
  • 再次,框架目前自定义了两种类型的标签:

    • 第1种是<strive:common /> 这个会引入基本的html头信息,包括系统提供的css与预定义js库,加入这个标签, 就会自动在html页面的<head />元素中生成如下几个html元素:
    <link rel="stylesheet" href="/strive/app/css/style.css" >
    <link rel="stylesheet" href="/strive/sys/css/style.css" >
    <script src="/strive/sys/js/strive.js"></script>
    

    也就是自动引入了全局的css样式文件与js文件,开发人员可以在/app/css/style.css文件中编写全局样式,框架用的全局css会写在 /sys/css/style.css样式文件中。strive.js是框架提供的js扩展与常用工具库,具体的工具函数可以查看源代码:

    com.fight.strive.sys.extend.thymeleaf.CustomElementTagCommonProcessor

    • 第2种标签是<strive:import lib="" />

    主要是方便引入第三方js类库,目前仅提供jquery、vue与elementui三个前端js和UI库。 在lib属性中写入对应库的名称即可,框架黙认引用的是互联网上的cdn地址。如果开发人员不方便引用cdn, 可以将第三方前端框架放到/static/sys/jslib目录下, 修改标签处理类的源代码com.fight.strive.sys.extend.thymeleaf.CustomElementTagProcessor即可。

  • 最后在<script type="text/javascript" th:inline="javascript"/>脚本区域的声明:

    script标签中加上了th:inline属性,这样就可以在js中获取请求Reqeust或Session中的数据。获取方式查看example.html中的示例, 黙认已获取 context 上下文路径变量,ajax请求时带上context,这里值是/strive。还获取了一个_csrf变量,这个参数只有 在启用了_csrf时才可用,如果启用了_csrf防跨站请求伪造,在要ajax请求时要带上这个参数,否则服务器会拒绝请求。框架黙认 禁用了_csrf功能。

    上面说明过,框架自定义了工具库strive.js,如果要使用则先声明:var striveUtils = new Strive(); 这样就可以使用其中的方法了。注意到所有的js程序都被包括在/*<![CDATA[*//*]]>*/之间,因为thymeleaf是 按xml规则解析的,因此在js中请求的数据中可能包括xml特殊字符,导致报错。

可以将example.html设置为IDE的html模板,这样新建Html时就自动出现该页面结构

框架提供的登录页面login.html

此页面主要是提供系统登录入口的页面,主要提供了用户名,密码,验证码与记住我等功能。页面可以通过 /login进行访问,访问路径在配置类com.fight.strive.sys.config.WebAppConfig中的addViewControllers() 方法中进行了映射。如果仅仅是页面返回,则可以addViewControllers方法中进行映射。如果是要根据业务模型 的不同返回视图,则要在Controller中使用ModelAndView进行返回。此方法中映射的其它页面,开发人员可以了解下。

不支持的浏览器拦截返回的页面browser_error.html

框架提供了一个Spring拦截器,拦截器源码com.fight.strive.sys.interceptor.UserAgentInterceptor, 在源码中可以看到拦截的浏览器版本。如果判断不通过则跳转到browser_error.html页面。如果需要继续 浏览功能,单击页面上的“继续浏览”按钮,跳转了StriveController中的browserAccessContinue方法, 将session属性isContinue设置为continue即可,并带上之前访问的视图名称。

系统发生异常错误时的跳转页面e500.html

本框架定义了一个全局异常处理,源代码在com.fight.strive.sys.exception.CustomExceptionHandler类中。 当使用Ajax请求发生异常时,返回com.fight.strive.sys.bean.StatusBean类的JSON对象,当使用页面请求 发生异常时,就会跳转到e500.html视图。当服务器发生无法捕获的异常即500内部错误时,也会跳到这个 页面。因为在com.fight.strive.sys.config.WebAppConfig配置类的registerErrorPages方法中注册了 对应500错误的跳转页面,当然你可以定义其它错误页面,如NOT_FOUND等。

登录认证与权限控制

  • 登录页面与访问
  • SpringSecurity配置
  • 自定义UserDetailsService
  • 页面权限控制标签
  • 单点登录服务端源码与客户端配置

登录页面与访问

启动项目,访问http://127.0.0.1:8080/strive/index,这个是链接访问 的视图中/templates.views/user/index.html,这个首页是不受权限控制的,可以直接访问。点击 访问后台管理首页,需要登录这个链接,就会 跳转到http://localhost:8080/strive/admin/index页面,这个页面是需要登录的用户才可以访问, 因此会先跳转到登录页面/login。输入“用户名”、“密码”、“验证码“或勾选“记住我一周” 复选框。其中“验证码”图片的获取源码在com.fight.strive.sys.controller.AuthenticationController 类中的getCaptchaImage()方法,其它的安全控制在SpringSecurity配置中详细说明。

SpringSecurity 配置

配置的源代码在类com.fight.strive.sys.config.WebSecurityConfig中。

在此配置类中,提供了自定义的错误处理、成功处理与拒绝访问的处理器。这些自定义处理器开发 人员可以自行查看源码。源码在com.fight.strive.sys.extend.security包中。框架提供自定义 处理器的原因是支持ajax异步登录返回JSON,如果Session过期也可以返回JSON到前端并进行提示, 这主要是通过自定义未授权入口点类CustomUnathorizedEntryPoint进行处理的。

configure(HttpSecurity http)方法配置基本的http认证规则。首先添加了一个验证码过滤器,http.addFilterBefore(captchaProcessingFilter(), UsernamePasswordAuthenticationFilter.class); 验证码过虑器在用户名密码验证之前进行验证。

后面配置了权限拦截地址:antMatchers("/admin/**", "/oauth/authorize"),符合此规则的路径 都需要登录认证,这也就说明了之前访问/admin/index路径时需要跳转到登录页面的原因。其它 路径都可以直接访问。

后面配置了与登录表单相关的内容:登录页面路径为/login,登录处理器路径为/loginProcess,用户名和 密码的参数名称为userNamepassword。登录路径/login已经映射到login.html视图,login.html是使用ajax方式登录, 这个ajax地址要写为/loginProcess,参数名称为userNamepassword,“记住我一周”的参数名称rememberMe 也是在后面的rememberMe中配置。验证码参数名称,可以查看验证码过滤器源代码。里面使用了 request.getParameter("captcha");,这就清楚了。

后面配置了记住我的功能:rememberMe(),通过tokenValiditySeconds(3600 * 24 * 7)定义一周 时间,因为记住我是通过cookie保存登录信息的,所以后面须配置相关的cookie参数。

后面配置在请求头部加上response.addHeader("Access-Control-Allow-Origin", "*");,这样就可以 允许独立前端进行跨域访问。

后面配置Session管理:sessionManagement(),最大只允许1人在线,通过.maximumSessions(1)配置, 如果在另一个地方登录,本地会被迫退出,再次访问时会跳转到/login?expired页面,也就是登录页面。

后面配置了_csrf跨站请求伪造,在最使用http.csrf().disable();禁用了_csrf。如果注释掉此行代码 http.csrf().disable();,那么在页面请求,无论是页面请求还是ajax请求都需要带上有效的_csrf参数, 否则服务器拒绝访问。

configure(AuthenticationManagerBuilder auth)方法主要配置了自定义UserDetailsService和密码加密方式, 这里使用的是MD5加密方式。开发人员可以修改加密方式,注意保存密码到数据库时也要使用相同的加密方式。

自定义 UserDetailsService 类

在开发中基本上都会自定义UserDetailsService类,因为用户信息都是我们自己管理,使用我们自己的 数据库访问方式。自定义UserDetailsService涉及到两个类,一个是自定义UserDetails,另一个就是 自定义UserDetailsService。这两个自定义类的完整包名为:

com.fight.strive.sys.extend.security.CustomUserDetails //自定义UserDetails

com.fight.strive.sys.extend.security.CustomUserDetailsService //自定义UserDetailsService

Spring Security在用户名、密码的验证中,主要是回调UserDetailsService中loadUserByUsername方法, 获得UserDetails,然后Spring Security又通过UserDetails获取用户名或密码进行验证,UserDetails 中其它重写方法自行参考文档, 如isEnabled()方法,返回该用户是否有效。实际开发中需要好好设计该类,这个CustomUserDetails类 中定义的所有属性数据都会随着用户登录存放在Session中,可以通过Principal进行获取。框架中自定义 的CustomUserDetails除了定义UserDetails基本功能外,还提供了User实体类,也就是在用户登录后, 可以访问到该User类中的数据。也就是说,如果后续需要加入部门、公司、角色和权限等与用户相关的 实体数据都可以放在此自定义UserDetails类中。

在CustomUserDetailsService类中的loadUserByUsername()方法中,主要通过用户登录名在数据库中查 找User用户实体,再构建一个UserDetails类并返回,在此方法中,除了查询User实体,后续扩展也可以查询 用户所在的部门、公司、角色和权限等实体并存放在UserDetails类中返回。在本框架中权限是固定的。 超级管理员具有ROLE_SUPERADMINROLE_USERROLE_ACTUATOR权限,普通用户只有ROLE_USER权限, 实际开发中的权限可以保存在数据库并与用户关联即可。框架中超级管理员是固定在代码中的,这样开始 时在没有任何基础数据的前提下运行本框架并访问相关的页面。

页面权限控制标签

可以参考这里:thymeleaf-extras-springsecurity5 里详细说明了如何通过标签来进行权限控制,并显示登录用户名等相关信息。可以使用SpringEL表达式方式,也可以通过 前面所述的sec标签方式。

要想使用thymeleaf扩展,在com.fight.strive.sys.config.WebAppConfig配置类templateEngine方法 中需要加上templateEngine.addDialect(new SpringSecurityDialect());

单点登录服务端源码与客户端配置

服务端配置说明

单点登录服务器端使用两个配置类,如下所示:

com.fight.strive.sys.config.AuthorizationServerConfig //客户端认证服务

com.fight.strive.sys.config.ResourceServerConfig //资源管理服务,第三访应用系统需要访问的资源都要在此配置

在第三方应用使用本系统进行单点登录前,需要注册应用,这就涉及到一个第三访应用注册信息,这些信息需要保存在表中。 第三方应用表实体定义com.fight.strive.sys.entity.jpa.OAuthClientDetailsEntity,表名为oauth_client_details。 具体如何插入应用信息,可以参考百度,下表提供了一个示例。这里需要注意,表中clientSecret字段需要进行md5加密后存储, 因为在AuthorizationServerConfig客户端认证类中配置了passwordEncoder,使用MD5加密。

CLIENT_ID ACCESS_TOKEN_VALIDITY ADDITIONAL_INFORMATION AUTHORITIES AUTHORIZED_GRANT_TYPES AUTOAPPROVE CLIENT_SECRET REFRESH_TOKEN_VALIDITY RESOURCE_IDS SCOPE WEB_SERVER_REDIRECT_URI
CompanyApp 14000 附加信息 auth_read authorization_code user_info e10adc3949ba59abbe56e057f20f883e 14000 资源ID user_info http://localhost:8091/strive/loginProcess
客户端配置说明

数据库访问示例

本框架写一个基于学生实体类的一个实例,实现了DAO、Service类及Service测试。相关类如下所示:

com.fight.strive.app.entity.jpa.StudentEntity //实体类继承自CommonEntity类
com.fight.strive.app.dao.jpa.StudentRepository //JPA方式的Repository类
com.fight.strive.app.dao.mybatis.mapper.StudentMapper //MyBatis方式的Mapper类
com.fight.strive.app.dao.mybatis.provider.StudentProvide //MyBatis方式动态SQL提供类
com.fight.strive.app.service.StudentService //Student Service类,主要访问数据库

//测试类在src.test包下
`com.fight.strive.app.service.StudentServiceTests //StudentService 测试类

开发人员详细查看StudentEntity、StudentReposity、StudentMapper与StudentProvider源码,这些 示例列举了几乎大部分数据库访问方式。然后运行测试类查看测试结果。示例源码注释明确。

开发人员在开发时所有实体类最好都要继承CommonEntity,可以查看一下CommonEntity源码,里面定义了 比较常用的字段信息如ID,时间等。继承CommonEntity类还有一个用途,就是框架定义了一个切面编程, 定义的切面类com.fight.strive.sys.aspect.CrudSaveAspect这个类会在所有使用JPA方式保存实体 (执行save方法)之前将实体中的如createUser等与登录用户相关的字段都注入当前登录的用户信息与时间信息, 这样就省去了在保存前手动填写操作用户信息,包括操作的用户名、时间等。

本框架建议使用Jpa方法自动建表,执行数据插入操作,数据更新,复杂查询使用MyBatis,也可 以使用Jpa的@Query注解方式或DSL方式。

自定义的@RestRequestMapping注解

@RestRequestMapping注解其实就是@ResponseBody与@RequestMapping混合注解

Controller类中的方法开发约定

  • 在@Controller类上使用@RequestMapping注解,以实现此Controller中所有请求方法的通用上下文路径。例如: 如果此Controller中的所有的请求方法都是受保护的,并且都是与Student有关的,那就这样注解: @RequestMapping("/admin/student")。然后对每个具体的请求方法指定特定的路径。
  • 如果请求的方法返回JSON字符串,请使用@RestRequestMapping注解。
  • 对于Controller中所有返回JSON的请求方法,如果不是前端组件特殊要求的,一律使用StatusBean状态组件类返回。 可参见StatusBean源码,内部主要有标志成功与否的状态,相关的信息,与后台返回的数据,在 前端ajax调用时,可先判断返回的状态是否成功,如:if('success' == resp.status){} else {} 。

小知识,如果前端ajax向后台传递数组数据,在请求方法的参数前面使用@RequestParam注解,如:public StatusBean getStudentsByIds(@RequestParam(value="ids[]",required=false) String[] ids){}

strive 框架其它功能说明

  • 配置文件密文属性
  • 邮件服务功能
  • json、xml与Java对象的相互转换示例
  • Spring 异步执行功能
  • Quantz 定时任务功能
  • 文件上传服务
  • 二维码生成服务

配置文件密文属性

c3p0配置文件中的数据库的用户名与密码使用了密文形式,使用的是 jasypt 加密方式。

密文的生成参见测试类源码:com.fight.strive.sys.test.StringEncryptorTests //测试类在src.test包下

使用testGetEncryptorInfo()测试方法生成用户名与密码的密文字符串,并在配置文件中使用ENC(密文)的形式给属性赋值。这样在 项目启动时 jasypt 就会对相应的属性进行解密。

邮件服务功能

application.yml配置文件中,已经对邮件服务进行了参数配置,包括邮件服务,邮箱地址与客户端授权码,黙认的邮箱地址与客户 端授权码都是可用的,直接使用其测试即可。

邮件发送测试类:com.fight.strive.sys.service.MailServiceTests //测试类在src.test包下

邮件服务类源代码:com.fight.strive.sys.service.MailService

MailService提供的方法:

  • 发送简单的文本邮件
  • 发送Html文本邮件
  • 发送带附件的邮件

json、xml与Java对象的相互转换示例

json、xml与Java对象单独的转换在开发与其它互联网应用的接口通信时非常有用。

  • Json字符串转Java对象(fasterxml jackson)
  • Java对象转Json字符串(fasterxml jackson)
  • 直接生成Json字符串,免去创建对象的步骤(json-lib)
  • xml字符串转Java对象(simple-xml)
  • Java对象转Xml字符串(simple-xml)

以上功能可以查看框架相关的源代码(注释明确):

com.fight.strive.app.bean.PersonBean //Json对象
com.fight.strive.app.bean.EmployeeBean //Xml对象

//测试类在src.test包下
com.fight.strive.app.bean.BeanTests //相关转换的代码测试,包含了大部分用法

注意:jackson有两个版本包,一个是fastxml版本,一个是codehaus,不管你使用什么版本的,注解与ObjectMapper类 保持一致即可。不然会得不到想要的结果。

建议:在开发过程中遇到业务上需要Json的Java对象,Xml的Java对象以及其它的非MVC层相关的POJO都放在bean包下。

Spring 异步执行功能

Spring Boot 实现异步调用功能是很简单的,框架在com.fight.strive.sys.config.WebAppConfig配置类上加了@EnableAsync注解。 在异步执行方法上加上@Async注解即可。

异步执行的示例服务类:com.fight.strive.app.service.AsyncService

异步执行的示例测试类:com.fight.strive.app.service.AsyncServiceTests //测试类在src.test包下

经过以上测试表明:Future<String> future = asyncService.handleSomeWork();这行调用会立即返回,在下一行等待任务执行完成。

打印调用结果,顺序如下所示:

主程序请求异步调用
主调用已经返回
开始执行任务
任务执行完成
0
任务结果数据

以上结果表明,打印了“主调用已经返回”后才打印异步方法中执行的内容。最后打印出“任务结果数据”是在异步任务中返回的 AsyncResult中的数据。正常情况下是不用关注异步调用结果的,这个结果可要通过其它方法来关注,如通过定时检测方式检查。 如果每次调用都等待异步调用的结果,异步程序就没有意义了。这里是测试运行,如果不等待,主方法会立即返回导致程序终止。

Quantz 定时任务功能

定时任务配置源码:com.fight.strive.sys.config.SchedulingConfig //测试时取消对方法内容的注释 定时任务服务类源码:com.fight.strive.app.service.SchedulingService

实际开发时,在SchedulingSevice服务类中定义好业务逻辑方法,然后注册到SchedulingConfig类中定时执行。 具体定时配置参见注释。测试时取消方法中的注释。

文件上传服务

文件上传是使用的是Spring MVC的文件上传功能,框架已经写好了一些易于使用的方法供开发人员使用,并写了一个Controller示例, 和示例的测试。相关的源代码:

com.fight.strive.sys.service.UploadService // 这里写了一些易用的服务方法
com.fight.strive.sys.controller.UploadController //这里了一些上传示例

//测试类在src.test包下
com.fight.strive.sys.controller.UploadControllerTests //上传文件的Controller测试

文件上传功能中还有只针对图片的上传功能,图片上传不保存在磁盘上,只是将其输入流转成Base64字符串返回到前台。

二维码生成服务

二维码相关的类与下所示:

com.fight.strive.sys.service.QRCodeService // 二维码服务类,方法使用都注释了
com.fight.strive.sys.controller.QRCodeController //二维码请求

//测试类在src.test包下
java.io.FileOutputStream.QRCodeServiceTests //二维相关操作测试类

QRCodeController类中有一个方法,这个方法请求可以直接应用在前端html中的上, 在要显示二维码图片的位置写入这样的标签即可: <img th:href="@{/qrcode/image(content='strive_framework',length=200)}" /> ,这是thymeleaf模板语法,相当于:<img href="/strive/qrcode/image?content=strive_framework&lenth=200" />

strive 框架工具类介绍

由于经验有限,本框架提供的工具类仅有很少部分功能,但必有它的用处,当然Spring等提供的工具类更好。

  • BeanUtils(组件工具类)
  • DateUtils(日期工具类)
  • FileUtils(文件工具类)
  • ImageUtils(图片工具类)
  • RandomUtils(随机数生成工具类)
  • StringUtils(字符串工具类)
  • ValidateUtils(验证工具类)
评论
 我想说:
==已经到底了==
Copyright ©2018 工联信息网——打造最实用且免费的互联网资源共享社区
如有疑问和需求请致邮箱:need@glxxw2018.com
不良信息反馈及建议请致邮箱:accusation@glxxw2018.com
沪ICP备18018158号-1