用Groovy写Servlet

简介: 本文参考自Servlet support,大部分代码引用了原文档。快速开始Groovy语言提供了一个模块,可以让我们写用Groovy脚本的方式来编写Servlet,这叫做Groovlets。

本文参考自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: '提交')
        }

    }
}
相关文章
|
4月前
|
Java 数据库连接 容器
8:Servlet生命周期-Java Web
8:Servlet生命周期-Java Web
27 0
|
1月前
|
Java 数据处理 数据库
Java Web开发中的Servlet
Java Web开发中的Servlet
|
4月前
|
开发框架 网络协议 Java
4:Servlet-Java Web
4:Servlet-Java Web
29 1
|
4月前
|
Java 编译器 应用服务中间件
5:Servlet程序-Java Web
5:Servlet程序-Java Web
15 1
|
10月前
|
Java 数据安全/隐私保护
【Java Web编程 十】深入理解Servlet过滤器
【Java Web编程 十】深入理解Servlet过滤器
90 0
|
11月前
|
XML Java 数据安全/隐私保护
JSP 和 Servlet 中的过滤器都是 Java 类。
JSP 和 Servlet 中的过滤器都是 Java 类。
60 0
|
Java API
Java Web学习---Servlet学习(servlet中的ServletConfig对象)
Java Web学习---Servlet学习(servlet中的ServletConfig对象)
82 0
|
XML Java 应用服务中间件
Java Web(六)servlet
主要是对servlet对象的使用
71 0
Java:模板引擎FreeMarker
Java:模板引擎FreeMarker
159 0
Java:模板引擎FreeMarker
|
安全 Java 应用服务中间件
Java Web——Servlet初探
Java Web——Servlet初探
Java Web——Servlet初探

相关课程

更多