任务调度
在 Web 应用开发中,有时候会需要定期执行一些调度任务,比如数据库备份和数据同步等。这些任务不是通过 HTTP 请求来触发的,而是定时执行的。Play 框架提供了内置的任务调度支持的能力。创建新任务的时候,只需要继承自 play.jobs.Job类,并覆写 doJob()方法即可。如果要创建的任务有返回结果的话,覆写 doJobWithResult()方法即可。任务创建完成之后,可以选择不同的调度方式。一种方式是在应用启动的时候执行一次。只需要在任务的 Java 类上添加标注 @OnApplicationStart即可。对于定期执行的任务,Play 框架提供了两个标注:一个是 @Every,用来按照固定的时间间隔调度任务,如 @Every("1h")声明任务每个小时执行一次;另外一个是 @On,用来声明描述调度策略的 CRON 表达式。
安全
Play 框架提供了对 Web 应用安全性方面的支持,可以防范一些常见的攻击方式。前面提到过,Play 框架中的会话数据是保存在浏览器的 cookie 中的。这些数据是经过签名的,可以防止被恶意攻击者所篡改。应用中的重要数据也不应该保存在会话中。Play 框架中的模板在输出 HTML 内容的时候,会自动对内容进行转义,可以防范跨站点脚本攻击。对于 SQL 注入攻击,开发人员应该尽量使用提供的 find() 方法来查询领域对象。对于自己创建的查询语句,应该在语句中使用占位符并进行参数绑定,而不是通过字符串相加的方式来创建。为了防范跨站点请求伪造,Play 框架中的控制器的动作方法都可以使用 checkAuthenticity() 方法来声明调用此方法时的请求中必须包含合法的令牌。这个令牌用来确保当前请求是由应用自身发出的,而不是被伪造的。通过 session.getAuthenticityToken() 方法可以生成一个只对当前会话有效的令牌,需要在请求的时候附带此令牌。如果是通过页面上的表单来提交请求的话,Play 框架也提供了一个标签 #{authenticityToken /} 用来生成一个包含了令牌的隐藏域,可以直接在模板中使用。
总结
Play 框架作为一个优秀的 Java Web 应用开发框架,可以帮助开发人员快速高效的构建 Web 应用。它为开发人员提供了一个良好的基础架构,并屏蔽了很多底层的实现细节。开发人员可以用一个简单的视角来看待 Web 应用开发,而不需要关心过多的细节。Web 开发人员可以熟悉 Play 框架,并在开发中选用这个框架。