美文网首页
[译] Groovy 支持 Servlet

[译] Groovy 支持 Servlet

作者: 翼徳 | 来源:发表于2018-11-14 17:34 被阅读9次

    原文地址:http://groovy-lang.org/servlet.html

    您可以在 Groovy 中编写(Java)Servlet(称为Groovlets)。还有一个GroovyServlet

    此功能将自动编译 .groovy 源文件,将它们转换为字节码,加载类并缓存它直到您更改源文件。

    这是一个简单的例子,向您展示可以从 Groovlet 中执行的操作。

    注意使用隐式变量来访问会话,输出和请求。另请注意,这更像是一个脚本,因为它没有类包装器。

    if (!session) {
      session = request.getSession(true)
    }
    
    if (!session.counter) {
      session.counter = 1
    }
    
    println """
    <html>
        <head>
            <title>Groovy Servlet</title>
        </head>
        <body>
            <p>
    Hello, ${request.remoteHost}: ${session.counter}! ${new Date()}
            </p>
        </body>
    </html>
    """
    session.counter = session.counter + 1
    

    或者,使用 MarkupBuilder 执行相同的操作:

    if (!session) {
        session = request.getSession(true)
    }
    
    if (!session.counter) {
        session.counter = 1
    }
    
    html.html { // html is implicitly bound to new MarkupBuilder(out)
      head {
          title('Groovy Servlet')
      }
      body {
        p("Hello, ${request.remoteHost}: ${session.counter}! ${new Date()}")
      }
    }
    session.counter = session.counter + 1
    

    1. 隐式变量

    以下变量已准备好在 Groovlet 中使用:

    变量名 绑定 备注
    request ServletRequest -
    response ServletResponse -
    context ServletContext -
    application ServletContext -
    session getSession(false) 可以是 null(参考<1>)
    params Map 对象
    headers Map对象
    out response.getWriter() 参考<2>
    sout response.getOutputStream() 参考<2>
    html new MarkupBuilder(out) 参考<2>
    json new StreamingJsonBuilder(out) 参考<2>
    1. 如果已存在session对象,则仅设置session变量。请参阅上面示例中的 if (session == null) 检查。
    2. 无法在 Groovlet 中重新分配这些变量。它们在第一次访问时受到约束,允许例如在使用之前调用response 对象上的out方法。

    2.设置 groovylets

    在你的web.xml 中添加以下代码:

    <servlet>
        <servlet-name>Groovy</servlet-name>
        <servlet-class>groovy.servlet.GroovyServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Groovy</servlet-name>
        <url-pattern>*.groovy</url-pattern>
    </servlet-mapping>
    

    然后将所需的 groovy jar文件放入WEB-INF/lib

    现在将 .groovy 文件放在根目录中(即放置html文件的位置)。GroovyServlet 负责编译 .groovy 文件。

    所以例如使用 tomcat 你可以像这样编辑 tomcat/conf/server.xml

    <Context path="/groovy" docBase="c:/groovy-servlet"/>
    

    然后使用 http://localhost:8080/groovy/hello.groovy 访问它。

    相关文章

      网友评论

          本文标题:[译] Groovy 支持 Servlet

          本文链接:https://www.haomeiwen.com/subject/cgwjfqtx.html