play框架使用起来
Posted zyhlal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了play框架使用起来相关的知识,希望对你有一定的参考价值。
1、拦截器
控制器中可以定义拦截方法(也可称之为拦截器),为控制器及其子类的所有Action提供服务。当所有的Action都需要进行通用的处理时,该功能就显得非常有用:比 如验证用户的合法性,加载请求范围内的信息等。
读者在使用时需要注意的是,这些拦截器方法不能定义为public,但必须是static,并通过有效的拦截标记进行注解。
1.1 @Before#
使用@Before注解的方法会在每个Action调用之前执行。如创建具有用户合法性检查的拦截器:
public class Admin extends Application
@Before
static void checkAuthentification()
if(session.get("user") == null) login();
public static void index()
List<User> users = User.findAll();
render(users);
...
如果不希望@Before注解拦截所有的Action方法,那么可以使用unless参数列出需要排除的方法:
public class Admin extends Application
@Before(unless="login")
static void checkAuthentification()
if(session.get("user") == null) login();
public static void index()
List<User> users = User.findAll();
render(users);
...
或者直接使用only参数把需要拦截的方法列举出来:
public class Admin extends Application
@Before(only="login","logout")
static void doSomething()
...
...
unless和only参数对@After,@Before以及@Finally注解都适用。
1.2 @After#
使用@After注解的方法会在每个Action调用之后执行:
public class Admin extends Application
@After
static void log()
Logger.info("Action executed ...");
public static void index()
List<User> users = User.findAll();
render(users);
...
1.3 @Catch#
如果有Action方法抛出了异常,那么使用@Catch注解的方法就会执行,且抛出的异常会以参数的形式传递到@Catch注解的方法中。具体实现如下:
public class Admin extends Application
@Catch(IllegalStateException.class)
public static void logIllegalState(Throwable throwable)
Logger.error("Illegal state %s…", throwable);
public static void index()
List<User> users = User.findAll();
if (users.size() == 0)
throw new IllegalStateException("Invalid database - 0 users");
render(users);
使用@Catch注解和普通的Java异常处理程序一样,捕获父类往往可以获得更多的异常类型。如果拥有多个需要捕获的方法,可以通过指定优先级来确定他们的执行顺序。具体实现如下:
public class Admin extends Application
@Catch(value = Throwable.class, priority = 1)
public static void logThrowable(Throwable throwable)
// Custom error logging…
Logger.error("EXCEPTION %s", throwable);
@Catch(value = IllegalStateException.class, priority = 2)
public static void logIllegalState(Throwable throwable)
Logger.error("Illegal state %s…", throwable);
public static void index()
List<User> users = User.findAll();
if(users.size() == 0)
throw new IllegalStateException("Invalid database - 0 users");
render(users);
1.4 @Finally#
@Finally注解的方法总是在每个Action调用之后执行(无论Action是否成功执行):
public class Admin extends Application
@Finally
static void log()
Logger.info("Response contains : " + response.out);
public static play框架使用起来(17)