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)

play框架使用起来(11)

play框架使用起来

play框架使用起来(15)

play框架使用起来(15)

play框架使用起来(12)