play框架使用起来
Posted zyhlal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了play框架使用起来相关的知识,希望对你有一定的参考价值。
1、概述
Play的控制层位于应用的controllers包中,其中的Java类即为控制器(Controller)。如图4.1所示,Application.java和MyController.java都属于控制层。
(图4.1 控制器为controllers包中的Java类)
控制器需要继承play.mvc.Controller:
package controllers;
import models.Client;
import play.mvc.Controller;
public class Clients extends Controller
public static void show(Long id)
Client client = Client.findById(id);
render(client);
public static void delete(Long id)
Client client = Client.findById(id);
client.delete();
在控制器中,每个以public static声明,返回值为void的方法称为Action。Action的方法声明如下:
public static void action_name(params…);
Play会自动将HTTP请求参数转化为与之相匹配的Action方法参数,这部分内容会在后面的获取HTTP参数小节进行详细讲解。通常情况下,Action方法无需返回任何值,以调用结果方法来终止执行。在上述例子中,render(…)方法就是用来渲染模板的结果方法。
2、获取HTTP参数
HTTP请求中往往包含各种参数,这些参数的传递形式如下:
- URI路径:在路径/clients/1541中,1541是URI的动态部分。
- 查询字符串:clients?id=1541。
- 请求体:如果请求是来自html的表单提交(GET或者POST),那么请求体包含的是表单数据(采用x-www-urlform-encoded作为编码格式)。
针对以上几种情况,Play会自动提取这些HTTP参数并将他们保存在Map<String,String>类型的变量中,以参数名作为Map的key。这些参数名分别来自于:
- URI中动态部分的名称(在routes文件中定义)。
- 查询字符串中“名称/值”对中的名称部分 。
- 采用x-www-urlform-encoded编码的表单数据的参数名。
2.1 使用Map参数#
HTTP请求中参数对象(params)在任何控制器中都是可访问的(该实现在play.mvc.Controller超类中定义),它包含了当前所有HTTP请求的参数,并且可以通过get()方法得到,具体如下:
public static void show()
String id=params.get("id");
String[] names=params.getAll("name");
这些参数也可以进行类型转换:
public static void show()
Long id=params.get("id",Long.class);
本节将推荐一种更好的解决方案。Play框架提供了自动将Action声明的参数与HTTP参数自动匹配的功能(只需要保持Action方法的参数名和HTTP参数名一致即可):
/clients?id=1541
Action方法可以在声明中以id作为参数,以此匹配HTTP中变量名为id的参数:
public static void show(String id)
System.out.println(id);
当然,也可以使用其他Java参数类型,而不仅仅是String。在下面的例子中框架会自动将参数转换为正确的数据类型:
public static void show(Long id)
System.out.println(id);
如果参数含有多个值,那么可以定义数组参数,具体如下:
public static void show(Long[] id)
for(Long anId:id)
System.out.println(anId);
参数甚至可以是List类型:
public static void show(List<Long> id)
for(Long anId:id)
System.out.println(anId);
以上是关于play框架使用起来的主要内容,如果未能解决你的问题,请参考以下文章