play framework打破了web开发中容器的概念,默认支持RESTful,快速开发、部署,感觉不错。缺憾的是IOC得依靠其他框架支持,spring当之无愧啊,废话不说,上手操作。
背景介绍:window平台,play2.2.3,Spring3.1,java语言
一、引入Spring容器
play快速入门请移步http://www.playframework.com/documentation/2.3.x/JavaTodoList
原始的play项目结构如下:


创建Global类作为Spring容器的bootstrap,
PS:类型必须是Global,且只能放到default package下,攻破技能尚未修炼。
代码如下:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import play.Application;
import play.GlobalSettings;
public class Global extends GlobalSettings {
/**
- Spring容器
*/
private ApplicationContext context;
@Override
public void onStart(Application arg0) {
//初始化Spring容器
context = new ClassPathXmlApplicationContext(“applicationContext.xml”);
}
@Override
public <A> A getControllerInstance(Class<A> clazz) throws Exception {
//根据类型获取控制器
return context.getBean(clazz);
}
}
二、Spring容器配置
我用的是注解配置,简单不述,代码如下:
Controller层:
package controllers.user;
import javax.annotation.Resource;
import play.Logger;
import play.data.DynamicForm;
import play.data.Form;
import play.libs.Json;
import play.mvc.Controller;
import play.mvc.Result;
import services.user.UserService;
import com.fasterxml.jackson.databind.node.ObjectNode;
@org.springframework.stereotype.Controller
public class UserController extends Controller {
@Resource(name = “userServiceImpl”)
private UserService userService;
/**
- 登陆<p>
- 用户名和密码正确则跳转到index.html,否则返回给客户端json形式的结果。
- @return
*/
public Result login() {
try {
DynamicForm requestData = Form.form().bindFromRequest();
String username = requestData.get(“username”);
String password = requestData.get(“password”);
if (userService.check(username, password)) {
return redirect(“/index.html”);
} else {
ObjectNode result = Json.newObject();
result.put(“status”, “KO”);
result.put(“message”, “用户名或者密码错误”);
return ok(result);
}
} catch (Exception e) {
Logger.error(“登录失败”, e);
return badRequest();
}
}
}
Service层:
package services.user.impl;
import org.springframework.stereotype.Service;
import services.user.UserService;
@Service(“userServiceImpl”)
public class UserServiceImpl implements UserService {
@Override
public boolean check(String username, String password) throws Exception {
return “admin”.equals(username) && “111111”.equals(password);
}
}
routes配置:
Home page
GET / @controllers.Application.index
POST /user/login @controllers.user.UserController.login
Map static resources from the /public folder to the /assets URL path
GET /*file controllers.Assets.at(path=”/public”, file)
三、访问请求
登陆页面:
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”>
<title>登陆页面</title>
</head>
<body>
<div>
<form action=”/user/login” method=”post”>
用户名:<input type=”text” name=”username” /><br/>
密 码:<input type=”password” name=”password” /><br/>
<input type=”submit” name=”登录” />
</form>
</div>
</body>
</html>
最后看下目录结构吧