Spring和play framework整合

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项目结构如下:

QQ图片20140514205658




创建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>

最后看下目录结构吧

1

 

 

 

分享到