用Groovy写Servlet

本文参考自Servlet support,大部分代码引用了原文档。

快速开始

Groovy语言提供了一个模块,可以让我们写用Groovy脚本的方式来编写Servlet,这叫做Groovlets。先看看一个简单的例子吧。下面这几个例子都来自官方文档。

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

也可以使用Groovy的标记模板引擎。不太了解的可以看看我的文章Groovy模板引擎,或者直接看原文档。

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

当然了,还需要配置Servlet来处理这些Groovlets。这些Groovlets要放在原来JSP放的位置,也就是项目的WEB根目录下。如果放到源代码目录下就错了。

<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>

在Groovlets中预定义了几个变量,让我们能方便的使用。

  • request
  • response
  • context
  • application,以上几个和JSP中的一样,直接用就行了
  • session,该对象可能为空,只有当你向session放东西之后它才不为空,不然就要像官方的例子那样先判断是不是空,然后手动创建一个session
  • params
  • headers,和上面的params一样,都是Map类型
  • out,相当于response.getWriter()
  • sout ,相当于response.getOutputStream()
  • html,Groovy的标记模板,相当于new MarkupBuilder(out)
  • json,输出json的,相当于new StreamingJsonBuilder(out)

我的小例子

本来最后想用Groovlets写点东西,结果发现它的语法虽然挺好用,但是视图部分有点坑。我用标记模板想迭代一个表格,结果显示无法在空对象上使用属性,查了半天没找到解决办法。所以只好写这么一个小例子,例子很简单,输入一个名称给服务器,然后返回问候。

def name = params['name'] ?: '易天'


html.html {
    head {
        title('主页')
        link(rel: 'stylesheet', src: 'site.css')
    }
    body {
        h1 "${name} 你好"

        form(method: 'get', action: 'index.groovy') {
            label(for: 'name', value: '请输入名称')
            input(id: 'name', type: 'text', name: 'name')
            input(type: 'submit', value: '提交')
        }

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,338评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,943评论 18 399
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,229评论 6 342
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,645评论 11 349
  • 要问时下最火的手游是什么,街头采访,那一定是非《王者荣耀》莫属了。拿出手机就开战,体检战斗的快感,等公交、地铁的空...
    此木无为阅读 404评论 0 0

友情链接更多精彩内容