走进Groovy (一)

时间:2022-02-25 09:13:39

一直很喜欢脚本语言,但是一直在不大的公司工作,用得一直是“高大上”的JAVA语言,在真正的项目中,没什么机会用到脚本语言。这两年,又断断续续的用了2年的Ruby,再回头继续用JAVA,说实话,真感觉JAVA语法的啰嗦——哪怕像C#那样多些语法糖也好。

虽然在JVM上也有像JRuby,scala那样的动态语言,不知道怎么的,就是不想去用,直到最近心血来潮看了一下Groovy,突然被吸引住了,原因,一开始估计是被他的全兼容JAVA语法所吸引,再慢慢稍微了解一下,也被他类似Ruby的语法,动态特性,与JAVA的互相调用,Spring支持等吸引,终于决定好好的看一下Groovy,同时要是有机会,也在公司的小项目中尝试一下。

在写这篇文章的时候,我也只是个看了几页文档的Groovy新手,所以接下来的文章,大家当个学习笔记看就好。

一. 开发环境

所谓“工欲善其事,必先利其器”,一个好的开发环境,对于我们写代码,可是大大有益。我的开发环境是Eclipse 4.5(Mars),配合Groovy Eclipse插件,Groovy为2.4.3。下面先讲一下插件的安装。

在Groovy的官方网站中,文档页中有专门讲到开发工具的,其中一项就是讲解对各IDE的支持

Groovy官方文档

IDE支持说明

走进Groovy (一)我用的就是Groovy Eclipse Plugin,点击打开项目主页: Groovy Eclipse

在主页上给出了安装方式的WIKI,可以根据自己的版本,来安装需要的插件。需要说明一下的是,由于有些运营商(比如电信)限制了出口带宽,所以有些同学安装该插件的速度(<5K),会让人无比的蛋疼及抓狂,并且很有可能在你等待了半小时后,告诉你安装失败了(暂时来说,移动网络访问速度快得多,早晨访问速度比其他时间快得多)。一句话,你要是有耐心把插件安装成功了,那么相信学习Groovy已经完全不成问题了。

二. 建立项目

学习新语言自然要写代码,我的目的是用上Groovy的特性,写一个简单的Blog,所以省得以后再建立新的工程,索性一开始就建立一个WEB项目了,初始语言学习阶段,就在某个package中建立一个类,慢慢试就成了。项目建立基于Maven,建于Maven还不了解的同学,可以自学一下。至于为什么学习Groovy了,还不用Gradle,很简单,暂时不会,以后再学,而且Maven有OSCHINA的源,速度比较快。

1.建立项目

创建项目,选择Maven Project,进去后钩上“Create a simple project”选项,建立一个简单Maven工程,Group Id和Artifact Id根据自己情况随意,Packaging选择war,用以生成网站结构。

走进Groovy (一)

走进Groovy (一)

建立完成后,项目必然会出错,因为一个WEB项目,没有web.xml文件,这个比较好解决,在webapp目录下,新建WEB-INF文件夹,再在WEB-INF下新建web.xml即可,至于web.xml的内容,随便去哪个WEB工程复制一下吧。

2. 编写Groovy代码

在源文件夹下,新建一个包名,然后右键点击包,”New”-> “Other”,在弹出窗口中输入“Groovy”,排除掉其他项目,选择Groovy Class,即可建立一个Groovy类,如果是第一次在这个项目中建立Groovy类,会在*提示没有Groovy支持,会在建立好类后,自动加入Groovy的DSL支持。

当然,建立好类后,Eclipse又报错了,其实这是理所当然的,因为没有Groovy包的支持(我碰到过,在创建类的时候,Eclipse会自动引入Groovy包,如果你的环境自动帮你做这一步了,那就不用接下来的操作了)。

打开pom.xml,加入groovy-all包,因为这是一个网站,随便把JAVA-EE也加上了,我的pom.xml看起来是这样的。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.fly84</groupId>
<artifactId>self-rock</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>SelfRock</name>
<description>SelfRock</description> <dependencies>
<!-- groovy支持 -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.3</version>
</dependency> <!-- JavaEE支持 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
</dependencies>
</project>

保存后,Maven自动下载包,讨厌的红叉叉就不见了:)

3. 代码跑起来

在刚才建立的类中,新建一个main函数,和JAVA的不一样,这个可清爽多了

static main(args) {
println 'Groovy,我来了'
}

右键,Run As,选择Groovy Script,怎么样,结果出来了吧。

接下来试试引用JAVA文件,还是在这个包下面,建立一个Java类,就叫Food吧,内容如下:

public class Food {
public void eat(){
System.out.println("好吃");
}
}

然后改写一下刚才的Groovy类

static main(args) {
def food = new Food()
food.eat()
}

结果成功的在Groovy中引用了Java类,相像一下,是不是以后在项目中,喜欢写JAVA就写JAVA,喜欢写GROOVY就写GROOVY呢?

同样的,建立一个Groovy类后,在JAVA中调用也是完全的没有问题。

4. 网站跑起来

一开始我就说了,学习的目标,是用Groovy编写一个简单的Blog,所以这是一个WEB程序,但是现在还没有任何WEB方面的功能。在Groovy中,增加了gsp和groovy servlet,其实也就是jsp和servlet的改进版,就顺便加到项目中吧。

打开web.xml,加上如下配置,增加对gsp和groovy servlet的支持

<servlet>
<servlet-name>GroovyServlet</servlet-name>
<servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>GroovyTemplate</servlet-name>
<servlet-class>groovy.servlet.TemplateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GroovyServlet</servlet-name>
<url-pattern>*.groovy</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GroovyTemplate</servlet-name>
<url-pattern>*.gsp</url-pattern>
</servlet-mapping>

在web.app下建立一个index.gsp试试,里面随便写点啥,比如

<html>
<head>
<title>groovy</title>
</head>
<body> <% for (c in 'GROOVY'){ %>
<h1> <%=c%> </h1>
<% } %> </body>
</html>

有可能会碰到找不到groovy.servlet.TemplateServlet的异常,这是因为项目没有把Maven引用的包复制到WEB-INF/lib文件夹下面,解决方式,可以在项目上右键,选择项目属性,选择Deployment Assembly,点击Add按钮,选择Java Build Path Entries,然后选择Maven Dependencies,会自动把Maven引用的包复制到WEB-INF/lib目录下

走进Groovy (一)的更多相关文章

  1. 走进Groovy (二)

    承接上一篇,配置好环境后,开始正式学习语法.我假设看此文的同学至少会一定的JAVA语法,因此一些太过基础的就不记录了,基本上,大家看看示例就明白了. Groovy的卖点之一,就是全兼容JAVA的语法, ...

  2. 虚拟机--第一章走进java--(抄书)

    这是本人阅读周志明老师的<深入理解Java虚拟机>第二版抄写的,有很多省略,不适合直接阅读,需要阅读请出门左转淘宝,右转京东,支持周老师(侵权请联系删除) 第一章走近java 世界上并没有 ...

  3. &lbrack;C&num;&rsqb; 走进异步编程的世界 - 开始接触 async&sol;await

    走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...

  4. &lbrack;C&num;&rsqb; 走进 LINQ 的世界

    走进 LINQ 的世界 序 在此之前曾发表过三篇关于 LINQ 的随笔: 进阶:<LINQ 标准查询操作概述>(强烈推荐) 技巧:<Linq To Objects - 如何操作字符串 ...

  5. 【NLP】前戏:一起走进条件随机场(一)

    前戏:一起走进条件随机场 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都有 ...

  6. 走进缓存的世界(三) - Memcache

    系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...

  7. 小丁带你走进git的世界三-撤销修改

    一.撤销指令 git checkout还原工作区的功能 git reset  还原暂存区的功能 git clean  还没有被添加进暂存区的文件也就是git还没有跟踪的文件可以使用这个命令清除他们 g ...

  8. 小丁带你走进git的世界二-工作区暂存区分支

    小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git  init git  clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...

  9. 小丁带你走进git世界一-git简单配置

    小丁带你走进git世界一-git简单配置 1.github的简单配置 配置提交代码的信息,例如是谁提交的代码之类的. git config  –global user.name BattleHeaer ...

随机推荐

  1. csapp2e-chapter2-homework

    一 前言 看了csapp2e第二章,感觉讲的很透彻,理解了一些以前学组成原理没有学懂的东西.这章最让我感觉深刻的还是计算机是怎么实现c语言中的基本数据类型的表示和操作的,这对程序员理解程序无疑是帮助巨 ...

  2. Caffe学习系列&lpar;3&rpar;:视觉层(Vision Layers&rpar;及参数

    所有的层都具有的参数,如name, type, bottom, top和transform_param请参看我的前一篇文章:Caffe学习系列(2):数据层及参数 本文只讲解视觉层(Vision La ...

  3. underscorejs-indexBy学习

    2.19 indexBy 2.19.1 语法 _.indexBy(list, iteratee, [context]) 2.19.2 说明 给定一个list,和 一个用来返回一个在列表中的每个元素键 ...

  4. C&plus;&plus;&OpenCurlyDoubleQuote;窗体”程序设计启蒙

    [摘要]本文以C++菜菜鸟(仅仅须要学习了C++数据类型和控制结构就可以)为目标读者,用求解一元二次方程作为实例,展示窗体式程序的开发过程,获得初步体验.写作目的包含:(1)让学生通过模仿,开发出类似 ...

  5. spring杂记

    AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想,并不是一种具体的实现,谈到实现一般有Filter和代理模式两种常见的使用方式.Java中常见的AOP技术有 ...

  6. Python变量赋值的秘密

    在Python中,我们令一个变量等于另外一个变量时,并不是把值传递给它,而是直接把指向的地址更改了.我们想要查看一个变量在内存中的地址,可以通过id(变量) 来查看.我们通过一个小例子来看看这个有趣的 ...

  7. &lbrack;原创&rsqb;手把手教你写网络爬虫(4):Scrapy入门

    手把手教你写网络爬虫(4) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 上期我们理性的分析了为什么要学习Scrapy,理由只有一个,那就是免费,一分钱都不用花! 咦?怎么有人扔西红柿 ...

  8. C&num; TextBox 焦点

    TextBox焦点问题 1.失焦 KeyBoard.ClearFocus(); 存在一个问题,失去焦点之后,中文通过输入法依旧是可以输入的. 如果是中文文本框,按Enter失焦,同时禁止输入中文,可以 ...

  9. 【ASP&period;NET MVC系列】浅谈ASP&period;NET MVC 视图

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  10. open-falcon ---客户机agent操作

    open-falcon的agent用于采集机器负载监控指标,比如cpu.idle.load.1min.disk.io.util等等,每隔60秒push给Transfer.agent与Transfer建 ...