编程出错小心挨枪子-Scooter1.1让子弹飞!
- 编译错误音像提醒
- Active Record的查询接口
- Active Record 支持非缺省数据库联结
- 更好的HTTP请求支持
- 支持SQL Server数据库
- 支持FreeMarker模板
- 从任何数据库生成脚手架(scaffold)程序
放心。 没人会因编程出错中枪。但你还是会听到枪声。只是为了好玩吧。
编程不光要有效率,还要有乐趣。在这一版中,我们继续沿着这一方向前进。以下是本版新引近的主要功能。浏览本版的全部新功能,请按这里。
编译错误音像提醒
Scooter会在你编程出错时提醒你。我们不妨试一下。
1. 打入以下命令,启动Scooter自带的Hello World例子:
>java -jar tools/server.jar examples/greeting
2. 打开Java文件: greeting/WEB-INF/src/greeting/controllers/HelloController.java
3. 有意通过删除一个分号‘;’来制造编程错误
4. 保存文件。这时你应该听到一声枪响。
5. 浏览 http://localhost:8080/greeting。你会看到如下页面:

6. 点击文件链接。你可以在线编辑此文件。(用户名/密码:admin/welcome)
猜猜编译成功时,会听到什么声音?自己动手试一下吧。
Active Record的查询接口
Scooter现在支持类似Rails3.0的查询接口。
以下是新的查询接口实例。点击这里获取更多例子。
//提取名叫Leo的宠物 ActiveRecord Leo = Pet.where("name='Leo'").getRecord(); //提取id是6和10的宠物,结果按出生日期倒排序 List pets = Pet.where("owner_id IN (6, 10)").orderBy("birth_date DESC").getRecords(); //提取3条记录,省去前5条记录,结果按name排序 List pets = Pet.limit(3).offset(5).orderBy("name").getRecords(); //提取姓名是以E开头的人以及他们的宠物的记录 List owners = Owner.where("last_name='E%'").includes("pets").getRecords();
上面最后一个例子用到了includes()方法和两个表pets以及owners. 只有一个SQL被执行。这就是Scooter如何做到eager loading的。
Active Record 支持非缺省数据库联结
通过overriding getConnectionName() 方法,你可以指定ActiveRecord到专门的数据库。
//Post记录从blog_development(缺省)数据库提取出来 public class Post extends ActiveRecord { } //Post记录从blog_mysql数据库提取出来 public class Post extends ActiveRecord { public String getConnectionName() { return "blog_mysql"; } } ActiveRecord post = Post.newRecord(); post.setData("content", "Java programming is fun."); post.create();//create a new record in the posts table in blog_mysql. ActiveRecord post10 = Post.findById(10);//retrieve post record with id #10.
你甚至可以join指向不同的数据库的ActiveRecord model。 点击这里获取更多说明。
更好的HTTP请求支持
现在你有更多的方法在controller类中来处理HTTP请求。
//获取HTML表单中的选择列表(Selection list)或复选框(Checkboxes)信息 String[] selectedEmployees = pArray("employees"); //获取HTML表单中的单选按钮(Radio Buttons)信息 Boolean gender = pBoolean("sex"); //获取HTML表单中文本域(Text Fields)日期 Date birthday = pDate("birthday");
你也可以指定日期的格式,使用pFile()和pFiles()来处理上传文件。点击这里获取更多说明。
Greeting项目的例3中具体演示了如何处理HTML表单中各种不同的类型(http://localhost:8080/greeting/examples)。

支持SQL Server数据库
Scooter现在支持SQL Server数据库。下面让我们来做一个基于SQL Server和AJAX的应用。你事先要从微软网站下载AdventureWorks实例数据库。
1. 生成一个名为adventureworks的应用.
>java -jar tools/create.jar adventureworks sqlserver

2. 修改adventureworks/WEB-INF/config/database.properties文件中的adventureworks_development条目,加入数据库用户名以及密码。
database.connection.aw=\ driver=com.microsoft.sqlserver.jdbc.SQLServerDriver,\ url=jdbc:sqlserver://localhost:1433;databaseName=adventureworks,\ username=sa,\ password=welcome,\ max_pool_size=10,\ min_pool_size=1
3. 启动web服务器
>java -jar tools/server.jar adventureworks
4. 浏览AdventureWorks数据库
http://localhost:8080/adventureworks/admin/databases/adventureworks_development/tables

5. 下面让我们来做一个基于AJAX的应用来管理product架构(Schema)中的location表。
5.1 首先,在adventureworks/WEB-INF/config/database.properties文件中设use.plural.table.name为false。
缺省值是true。AdventureWorks数据库不用名词复数来命名表。
5.2 生成AJAX应用。
>java -jar tools/generate.jar adventureworks scaffold-ajax production.location
6. 浏览product架构(Schema)中的location表: 我们可以增删查改表中的记录而不用离开页面了。
http://localhost:8080/adventureworks/productionlocations

更多AJAX用法,参见这里。
支持Freemarker模板
除了JSP和StringTemplate模板,Scooter现在支持FreeMarker模板。你甚至可以把它们混合使用。
你可以通过改动返回语句来看不同模板的调用。例如改动greeting/WEB-INF/src/greeting/controllers/WelcomeController.java文件的返回语句。 模板文件在greeting/WEB-INF/views/welcome目录下。
public class WelcomeController { public String sayit() { flash("notice", "Successfully found the message"); setViewData("content", "Java programming is fun!"); //render default view (.jsp) return renderView("sayit"); //render FreeMarker view //return renderView("sayit.ftl"); //render StringTemplate view //return renderView("sayit.st"); } }
浏览以下URL验示你的改动。每次改动不需要重启web server。
http://localhost:8080/greeting/welcome/sayit
更多关于Scooter表视层,可在这里找到。
从任何数据库生成脚手架(scaffold)程序
使用Scooter现在可以从任何数据库生成脚手架(scaffold)程序了。
下面的例子生成基于Oracle数据库里posts表的脚手架(scaffold)程序:
>java -jar tools/generate.jar blog scaffold post@blog_oracle
你可以通过以下URL来浏览posts记录:
http://localhost:8080/blog/posts
更多关于程序生成,可打入以下命令::
>java -jar tools/generate.jar -help
关于Scooter工具的更多帮助,可在这里找到。