SpringBoot+Thymeleaf, 页面上嵌入groovy的demo

SpringBoot+Thymeleaf, 页面上嵌入groovy的demo

  • 说明
  • 代码
    • 依赖
    • 前端页面
    • Controller
    • dto
    • 试用
      • 无参
      • 有参

SpringBoot+Thymeleaf, 页面上嵌入groovy的demo_第1张图片

说明

因为项目中使用到了groovy做一个比较轻量级的前端公式脚本,所以闲来无事也自己做了一个。

groovy和java整合的方式有三种

  • GroovyClassLoader
  • ScriptEngine
  • GroovyShell

这个可以大家自行百度, 我这里用的第三种

代码

依赖

在SpringBoot的基础上, 加入下面两个依赖. thymeleaf 主要是前端模板要用.

放在resources/templates文件夹下


<dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-thymeleafartifactId>
            <version>2.2.1.RELEASEversion>
        dependency>
 <dependency>
            <groupId>org.codehaus.groovygroupId>
            <artifactId>groovy-allartifactId>
            <version>2.5.6version>
            <type>pomtype>
        dependency>

前端页面


<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>在线运行groovytitle>
    <style type="text/css">
        input {
            height: 30px;
        }

        td {
            padding: 0px;
        }

        table {
            border-collapse: separate;
            border-spacing: 20px;
            width: 300px;
            line-height: 22px;
            font-size: 12px;
        }
    style>
head>
<body>
<div align="center">
    <H2>在线运行groovyH2>
    <div style="padding:0 20px;">
        <form th:action="@{/groovy}" th:object="${groovyDto}" method="post">
            <table>
                <tr>
                    <td>参数td>
                    <td><input type="text" name="params" th:field="*{params}">td>
                tr>
                <tr>
                    <td>代码td>
                    <td><textarea name="code" th:field="*{code}">textarea>td>
                tr>
                <tr>
                    <td>结果td>
                    <td><textarea name="result" th:field="*{result}">textarea>td>
                tr>
                <tr >
                    <td colspan="2" align="center">
                        <input type="submit" value="提交" >
                    td>

                tr>
            table>
        form>
    div>
div>
body>
html>

Controller

package com.zgd.demo.web.controller;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.zgd.demo.web.dto.GroovyDto;
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

/**
 * GroovyController
 *
 * @author zgd
 * @date 2020/6/23 12:04
 */
@Controller
@Slf4j
public class GroovyController {


  @PostMapping("/groovy")
  public String groovy(@ModelAttribute GroovyDto groovyDto, Model model){
    log.info("提交了groovy: {}",groovyDto);
    String params = groovyDto.getParams();
    String[] paramArr;
    if (StrUtil.isNotBlank(params)){
      paramArr = params.split(",");
    }else {
      paramArr = new String[]{};
    }

    Object evaluate = byGroovyShell(groovyDto, paramArr);

    groovyDto.setResult(ObjectUtil.defaultIfNull(evaluate,"").toString());
    model.addAttribute("groovyDto",groovyDto);
    return "groovy";
  }

  private Object byGroovyShell(@ModelAttribute GroovyDto groovyDto, String[] paramArr) {
    Binding binding = new Binding(paramArr);
    GroovyShell shell = new GroovyShell(binding);
    return shell.evaluate(groovyDto.getCode());
  }


  @GetMapping("/groovy")
  public String groovy(Model model){
	  //这里必须设置属性groovyDto, 否则页面渲染会报错
    model.addAttribute("groovyDto",new GroovyDto());
    return "groovy";
  }
}

dto

package com.zgd.demo.web.dto;

import lombok.Data;
import lombok.ToString;

/**
 * GroovyDto
 *
 * @author zgd
 * @date 2020/6/23 12:07
 */
@Data
@ToString
public class GroovyDto {

  private String params;

  private String result;

  private String code;

}

试用

直接启动SpringBoot, 访问 localhost:8080/groovy
SpringBoot+Thymeleaf, 页面上嵌入groovy的demo_第2张图片

这里直接试下调用groovy脚本.

无参

SpringBoot+Thymeleaf, 页面上嵌入groovy的demo_第3张图片

有参

SpringBoot+Thymeleaf, 页面上嵌入groovy的demo_第4张图片

可以直接用groovy请求一些简单restful接口, 获取值直接展示, 或者在此基础上添砖加瓦吧

你可能感兴趣的:(mvc,springboot,java,groovy,mvc,SpringBoot,thymeleaf)