groovy 服务器上运行
我使用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和<