play框架使用起来(15)
Posted zyhlal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了play框架使用起来(15)相关的知识,希望对你有一定的参考价值。
高级指南1、验证码
1.1 生成验证码#
Play中的play.libs.Images类提供了生成验证码的支持,操作也非常简单。我们可以通过静态方法Images.captacha()快速生成默认大小为150*50的验证码图片,也可以使用Images.captacha(int width, int height)方法生成指定大小的验证码图片。
在Application控制器中增加captcha Action:
public static void captcha()
Images.Captcha captcha=Images.captcha();
renderBinary(captcha);
Action定义完后,在路由文件中配置验证码的路由规则:
GET /captcha Application.captcha
打开http://localhost:9000/captcha查看验证码。每次刷新浏览器,都会生成随机的验证码。
10.4.2 添加噪点#
上例生成的验证码还是存在安全隐患的。我们通常会为验证码添加适当的噪点,降低验证码被程序识别的可能性。我们可以使用addNoise()方法为验证码添加默认为黑色的噪点,也可以使用addNoise(java.lang.String color)方法指定噪点的颜色。
修改Application控制器中的captcha Action:
public static void captcha()
Images.Captcha captcha=Images.captcha();
captcha.addNoise();
renderBinary(captcha);
10.4.3 设置背景#
play.libs.Images提供的setBackground(java.lang.String color)方法可以为验证码设置背景色,下例将验证码背景色设置为#E4EAFD。
修改Application控制器中的captcha Action:
public static void captcha()
Images.Captcha captcha=Images.captcha();
captcha.addNoise();
captcha.setBackground("#E4EAFD");
renderBinary(captcha);
此外还有为验证码添加渐变背景色的setBackground(java.lang.String from, java.lang.String to)方法;为验证码添加波浪曲线背景的setSquigglesBackground()方法,本节就不展开介绍了。
10.4.4 文本操作#
验证码中唯一的信息就是文本内容,通过getText()方法可以获取验证码中的文本内容。我们也可以通过getText(java.lang.String color)方法在获取文本内容的同时设置验证码中文本的颜色。
修改Application控制器中的captcha Action:
public static void captcha()
Images.Captcha captcha=Images.captcha();
captcha.addNoise();
String code = captcha.getText("#ABCDEF");
captcha.setBackground("#E4EAFD");
renderBinary(captcha);
2、配置Log
Play内置的日志记录器是在Log4j之上的封装。Log4j的配置之简单使它遍及于越来越多的项目中,在开发中使用Log4j的好处主要可以归纳为以下几个方面:
- 通过修改配置文件,就可以决定日志信息的目的地————控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等 。
- 通过修改配置文件,定义每一条日志信息的级别,控制日志的输出。我们可以在系统开发阶段打印详细的日志信息以便跟踪系统运行情况,当系统稳定后关闭日志输出,在能跟踪系统运行情况的同时,减少了垃圾代码(由System.out.println打印的信息)的产生。
- 整个系统采用统一的日志机制,有利于系统的规划。
Log4j是Apache的一个开放源代码项目。
2.1 程序日志#
play.Logger是Play的默认日志记录器,该日志记录器通过Log4j记录消息和异常。下例为记录简单的程序日志:
Logger.info("A log message");
Logger.error(ex, "Oops");
play.Logger类支持标准的Java格式化语法:
Logger.debug("The param was %s", param);
Logger.info("I want to log %s and %s and %s", a, b, c);
特定需求下,我们仍然可以直接使用Log4j来创建其他记录器:
org.apache.log4j.Logger.getLogger("another.logger");
2.2 日志级别#
通过修改application.conf配置可以更改play.Logger的日志记录级别:
application.log=INFO
修改此值无需重新启动服务器就可生效。此日志级别配置只针对应用程序产生的消息有效。
如果读者需要充分配置Log4j,我们可以在conf/目录下创建log4j.properties文件。由于conf目录是在classpath路径配置中的第一个元素,所以这个配置文件将会被所有库使用。标准Log4j配置如下:
log4j.rootLogger=ERROR, Console
log4j.logger.play=INFO
# Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%dABSOLUTE %-5p ~ %m%n
读者可以参考默认配置并在此基础上根据自己的需求进行修改。
10.5.3 Play中Log4j配置详解#
Log4j支持两种配置文件,properties文件(log4j.properties),以及XML文件(log4j.xml),本书以log4j.properties配置文件为例进行讲解。
Log4j包含三个重要的组件,分别为Logger,Appender以及Layout。Logger被称作日志记录器,用于记录日志的类别;Appender可以被理解为输出源,即日志所输出的位置;Layout是日志布局,体现为日志以何种形式输出。
Logger
Logger(日志记录器)是日志处理的核心组件,负责处理日志记录的大部分操作。日志级别分为多种,从低到高分为ALL、TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF,当然也可以自定义日志级别。标准的日志级别粒度划分如下:
Level ALL:所有信息。
Level TRACE:级别为细粒度的信息。
Level DEBUG: 级别为细粒度的信息,粒度粗于TRACE,该级别打印的信息有助于调试应用程序。
Level INFO: 级别为粗粒度的信息,该级别日志主要用于记录程序运行过程的信息。
Level WARN:警告信息,预报潜在危险。
Level ERROR:错误信息,但应用程序仍可继续运行。
Level FATAL:严重错误信息,往往会造成应用程序的退出。
Level OFF:不打印任何信息。
Log4j建议只使用其中的四个级别,因为这些已经可以满足绝大部分应用的需求,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。
根Logger配置语法为: log4j.rootLogger = [ level ] , [ appenderName],[ appenderName], ...
具体配置写法如下:
log4j.rootLogger=INFO,Console,DailyRolling该配置信息表明记录了INFO级的日志信息,并输出到Console和DailyRolling这两个目的地,其中Console和DailyRolling可以任意起名。这里定义的是INFO级别,只有等于及高于这个级别的信息才进行处理,所以应用程序中所有DEBUG及以下级别的日志信息将不被打印。
Appender
Appender(输出源)负责控制日志记录的输出,其语法为:log4j.appender.[ appenderName ] = fully.qualified.name.of.appender.class
其中appenderName在Logger中定义(如Console和DailyRolling),Log4j提供多种fully.qualified.name.of.appender.class:
org.apache.log4j.ConsoleAppender:将日志信息打印到控制台。
org.apache.log4j.FileAppender:将日志信息打印到文件中。
org.apache.log4j.DailyRollingFileAppender:将日志信息打印到文件中,并每天产生一个文件。
org.apache.log4j.RollingFileAppender:将日志信息打印到文件中,文件大小到达指定尺寸时产生一个新文件。
具体配置写法如下:
#将日志信息打印到文件中,并每天产生一个文件Appender的不同配置带有相应的操作,其语法为: log4j.appender.[ appenderName ].[ option ] = [ value ]。
log4j.appender.DailyRolling=org.apache.log4j.DailyRollingFileAppender
具体配置写法如下:
#将日志信息文件以.log格式保存在logs/目录下,并以Oopsplay命名。
log4j.appender.DailyRolling.File = logs/Oopsplay.log
Layout
Layout提供了四种日志输出样式,读者可以根据需求格式化日志的输出,其语法为:log4j.appender.[ appenderName ].Layout= fully.qualified.name.of.layout.class。
Log4j为Layout提供多种fully.qualified.name.of.appender.class:
org.apache.log4j.htmlLayout:日志信息采用HTML表格形式布局。
org.apache.log4j.PatternLayout:日志信息采用灵活的指定布局模式。
org.apache.log4j.SimpleLayout:日志中包含信息的级别和信息字符串。
org.apache.log4j.TTCCLayout:日志中包含信息产生的时间、线程、类别等信息。
具体配置写法如下:
#将日志信息采用灵活的指定布局模式Layout的格式配置与Java格式化语法类似:
log4j.appender.R.layout=org.apache.log4j.PatternLayout
%m:输出代码中指定的消息。
%p:输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
%r:输出自应用启动到输出该log信息耗费的毫秒数。
%c:输出所属的类目,通常就是所在类的全名。
play框架使用起来(17)