play框架使用起来(6)
2016-11-03 15:16
232 查看
1、概述
Play的控制层位于应用的controllers包中,其中的Java类即为控制器(Controller)。如图4.1所示,Application.java和MyController.java都属于控制层。
(图4.1 控制器为controllers包中的Java类)
控制器需要继承play.mvc.Controller:
在控制器中,每个以public static声明,返回值为void的方法称为Action。Action的方法声明如下:
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编码的表单数据的参数名。
HTTP请求中参数对象(params)在任何控制器中都是可访问的(该实现在play.mvc.Controller超类中定义),它包含了当前所有HTTP请求的参数,并且可以通过get()方法得到,具体如下:
这些参数也可以进行类型转换:
本节将推荐一种更好的解决方案。Play框架提供了自动将Action声明的参数与HTTP参数自动匹配的功能(只需要保持Action方法的参数名和HTTP参数名一致即可):
Action方法可以在声明中以id作为参数,以此匹配HTTP中变量名为id的参数:
当然,也可以使用其他Java参数类型,而不仅仅是String。在下面的例子中框架会自动将参数转换为正确的数据类型:
如果参数含有多个值,那么可以定义数组参数,具体如下:
参数甚至可以是List类型:
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框架使用起来(17)
- play框架使用起来(7)
- play框架使用起来(15)
- play框架使用起来(10)
- play框架使用起来(16)
- play框架使用起来(5)
- play框架使用起来(12)
- play框架使用起来(13)
- play框架使用起来(14)-高级指南
- play框架使用起来(18)
- play框架使用起来(8)
- play框架使用起来(11)
- play! 框架的搭建与基本使用方法
- play 1.x框架的配置与使用
- play使用起来(4)
- Play框架的验证码使用
- play框架配置使用过程中遇到的各种疑难问题汇总(学习同事经验)
- Web自动化框架LazyUI使用手册(2)--先跑起来再说(第一个测试用例-百度搜索)
- Web自动化框架LazyUI使用手册(2)--先跑起来再说(第一个测试用例-百度搜索)
- Play框架的基本使用