groovy 服务器上运行_使用Groovy和超轻量级HTTP服务器通过HTTP公开功能

groovy 服务器上运行

我需要一种快速简单的方法来使某些用户能够查询表,并且发现最简单的解决方案是使用嵌入式的轻量级HTTP服务器,以便用户可以在其浏览器中键入URL并获取结果。 问题是,当然,哪台服务器最适合。 我想在这里总结一下我发现的选项-包括Gretty,Jetty,Restlet,Jersey等-以及它们的优缺点以及其中大多数的完整示例。 我故意避免使用各种可能轻松支持此功能的框架,例如Grails,因为它感觉并不轻巧,我只需要一个非常简单的临时应用程序。

我使用Groovy来提高生产率,尤其是在JDBC方面。使用GSQL,我只需要两行就可以以用户友好的格式从数据库中获取数据。

我理想的解决方案将使得可以通过对HTTPS和授权的支持来启动服务器,并以编程方式在单个文件(Groovy脚本)中用几行代码声明URL的处理程序。 (非常类似于下面的Gretty解决方案和安全性内容。)

旁注

注意葡萄

Groovy打包引擎Grape可以通过@Grab批注在运行时下载依赖项。 如果您运行常规脚本f.ex。 通过/ bin / groovy,它就可以正常工作,因为Groovy与Ivy一起分发,这对于Grape来说是必需的。 (如果使用IntelliJ,则将ivy.jar手动添加到项目的类路径中,然后在@Grab批注上调用意图操作(Mac:Alt + Enter)以将其下载并添加到类路径中。)

关于HTTPS / SSL配置的注意事项

要启用HTTPS,您将需要创建带有密钥对的密钥库,Jetty文档 (步骤1a)对此进行了详细介绍

对于急躁的人:

  • keytool -keystore $HOME/.keystore -alias myGroovyServer -genkey -keyalg RSA
  • 当被问及“您的姓氏和名字是什么?”时,请提供运行服务的主机名,例如“ localhost”或“ myserver.example.com”。
  • 为密钥库和生成的密钥指定相同的密码(例如“ myKeystorePsw”)
  • 运行服务器时,(以服务器特定的方式)提供生成文件.keystore的(绝对)路径,并将系统属性javax.net.ssl.keyStorePassword设置为密码

1.简单的HTTP请求和响应解决方案

尝试1:贪吃

Gretty是用于异步Web服务器Netty的Groovy包装器,是用Groovy ++编写的。 ( 有关Gretty的介绍性文章 。)

优点 :与Groovy集成良好,易于上手,支持服务静态资源,并且Netty很酷。

缺点 :未记录,该项目似乎处于Hibernate状态,没有添加用户授权和HTTPS的明确方法。

代码:

@GrabConfig(systemClassLoader=true)
@GrabResolver(name='gretty', root='http://groovypp.artifactoryonline.com/groovypp/libs-releases-local')
@Grapes([
    @Grab('org.mbte.groovypp:gretty:0.4.279'),
    @Grab('mysql:mysql-connector-java:5.1.16')])

import org.mbte.gretty.httpserver.*
import groovy.sql.Sql

class Main {

    final def db = [url: 'jdbc:mysql://localhost:3306/user', user: 'dbUser', psw: 'dbPsw' ]

    def run() {
        startServer()
    }

    def getUser(def code) {
        println "Connecting to the DB to check '$code'..."
        def sql = Sql.newInstance( db.url, db.user, db.psw)
        return sql.firstRow("select * from users where code = $code") ?: "No such code found"
    }

    def startServer() {
        GrettyServer server = []
        server.groovy = [
                localAddress: new InetSocketAddress(6789), // no host => all
                defaultHandler: {
                    response.redirect "/"
                },
                "/:code": {
                    get {
                        def user = getUser(it.code)
                        response.text = "The code '${it.code}' refers to $user\n"
                        // => st. like: "The code 'abc' refers to [id:123, name:me@somewhere.no, code:abc]"
                    }
                }
        ]
        server.start()
        println "Groovy server is ready to serve"
    }
}

new Main().run()

码头

优点 :成熟,功能强大,通常以嵌入式形式使用,支持HTTPS和<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值