é¦å
Playæ两个åæ¯, 1.xå2.x
1.x使ç¨Javaå¼å, åªæ¯æJava项ç®.
2.x使ç¨Scalaå¼å, åæ¶æ¯æJavaåScala项ç®.
1.xæ没ç¨è¿, Play2ç¨è¿ä¸æ®µæ¶é´. 说说Play2çéªå
ç¹.
1. Play2ç模æ¿å¼æ.
Play2ç模æ¿æ¯å¾å¼ºå¤§å¹¶ä¸å®¹æä¸æç. ç¸å¯¹äºJavaé¢åå
¶ä»æ¨¡æ¿å¼æ(Freemarker, Velocity, JSP, Groovy, etc), 主è¦æä¸ä¸ªç¹ç¹.
1) ç®åæä¸æ, 没æJSPéé¢ç¹æçå
置对象åæ令, ææåè½é½éè¿æ¹æ³è°ç¨å®æ.
2) 主æµIDEä¸é½æ¯æPlay模æ¿çéæç±»åæ£æ¥, 类似JSP.
3) æ¯æååè·¯ç±.
没代ç æ说个XX
举个ä¾å, ä¸è¬ç³»ç»é½ä¼æä¸ä¸ªåºå®ç页é¢å¸å±, æ¯å¦ååº é¡µå¤´é¡µå°¾.å¦æç¨JSPæè
Velocityä¹ç±»ç模æ¿, ä¸è¬é½æ¯éè¿sitemesh+filteræè
å¨æ¯ä¸ªé¡µé¢includeæ¥å®æå¸å±. 使ç¨Play模æ¿, å®æè¿ä¸ªåè½é常容æ.
é¦å
å®ä¹ä¸ä¸ªmain页é¢,
@(title: String = "é»è®¤æ é¢")(staticFile: Html = Html(""))(content: Html)
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta charset="utf-8" />
<title>@title</title>
</head>
<body>
@header() <-- 页头 -->
@navigator() <!-- å¯¼èª -->
@content
<script src="@routes.Assets.versioned("js/jquery-1.11.2.min.js")"></script>
@staticFile
声æäºä¸ä¸ªåæ°:
titleæ é¢, æé»è®¤å¼
staticFile为html代ç å, å¯ä»¥ä¼ jsç
content为页é¢å
容
å 为main页é¢æåä¼è¢«ç¼è¯æä¸ä¸ªæ¹æ³(åç¡®å°è¯´æ¯ä¸ä¸ªScala object), æ以å
¶ä»é¡µé¢
å¯ä»¥ç´æ¥è°ç¨è¿ä¸ªæ¹æ³, ä¼ å
¥èªå·±èªå®ä¹çå
容.æ¯å¦
@main() {
<script type="text/javascript">
FG.user.login();
</script>
} {
<div class="login width1200">
<!-- login -->
</div>
}
è¿æ ·å°±å®æäºé¡µé¢å¸å±, 没æéå¤å¯è§çinclude, ä¹æ²¡ææç®±æä½çfilter, ææçä¸åé½æ¯æ¹æ³è°ç¨, æ¯ä¸æ¯å¾ç®åæ¸
æ°?
éæç±»åæ£æ¥å°±ä¸è¯´äº, æ¬æ¥Javaçä¸å¤§ä¼ç¹(缺ç¹)å°±æ¯ç±»åæ£æ¥ æ以å¨Javaéç¨Freemarkeræè
Velocityè¿ç§æ¨¡æ¿çåæ³å¼å¾å榷.
ååè·¯ç±çæææ¯, å¨Playä¸, ææçController urlé½é
ç½®å¨ä¸ä¸ªroutesæ件ä¸, ä¾å¦
GET /register @controllers.user.LoginController.registerPage
ä¹åæ 论æ¯å¨Controlleréè¿æ¯æ¨¡æ¿ä¸, é½ä¸ç¨ç¡¬ç¼ç url. èæ¯ä½¿ç¨routesæ件.
ä¾å¦å¨Controllerä¸: redirect(routes.LoginController.registerPage())å°±è½å®ç°éå®å
èå¨æ¨¡æ¿ä¸: <a href="@controllers.routes.LoginController.registerPage()">
使ç¨ååè·¯ç±ç好å¤å°±æ¯å
¥å£æ¸
æ°, 项ç®éçææurlç»ä¸é
ç½®å¨ä¸ä¸ªæ件é, æ¹ä¾¿ç»ç»åç»´æ¤.routesè¿ç§é£æ ¼ç±»ä¼¼äºRESTéçURI模æ¿, å
¶å®Playæ¯Javaé¢åéæéåå¼åREST项ç®çæ¡æ¶ä¹ä¸.
2. çé¨ç½², è¿ä¸ªåºè¯¥é½ç¥éäº. ç°å¨çJava Webæ¡æ¶æ²¡è¿ä¸ªåè½é½ä¸å¥½æææ¿åºæ¥è¯´.
è½ç¶Scala代ç ç¼è¯å¾æ
¢, ä½æ¯å¦æåªæ¯ä¿®æ¹å 个类, sbtçå¢éç¼è¯é度è¿æ¯å¾å¿«ç. åºæ¬ä¸æ¹ä»£ç åå·æ°é¡µé¢å°±è½çå°ç»æ.
3. å
ç½®dev/prodç¯å¢é离, å
ç½®é¨ç½²èæ¬.
å¹³
常å¼åçæ¶å使ç¨runå¯å¨Play, æ¯è·å¨dev模å¼. Playä¼å®æ¶æ«ææºç ç®å½è¿è¡çæ´æ°, 并ä¸ç±»é½æ¯è®¿é®çæ¶ååå è½½, æé«å¯å¨é度.
使ç¨startå¯å¨é¡¹ç®å°±è¿è¡å¨prod模å¼.Playå
ç½®distå½ä»¤, å¯ä»¥æææçæ件æå
æä¸ä¸ªzip,
解åä¹åç´æ¥è¿è¡binç®å½ä¸çå¯æ§è¡æ件å³å¯å¯å¨é¡¹ç®, é¤äºJDKä¹å¤æ 须任ä½å
¶ä»å¤é¨ä¾èµ.
4. 使ç¨Playå¼åçServer大é¨åè½åå°Stateless.
Play
æå¼äºServlet/JSPésession, contextçæ¦å¿µ,
å
置没ææä¾æ¹æ³å°å¯¹è±¡ä¸æå¡å¨å®ä¾è¿è¡ç»å®(ä½ è¦ä½¿ç¨HashMapåçè¯Playä¹æ²¡åæ³). æ¨èçåæ³æ¯ä½¿ç¨å¤é¨ç¼å, æ¯å¦Redis,
Memcachedç. å¯è½ä½ è§å¾è¿æ¯Playçä¸ä¸ªç¼ºç¹, ä½æ¯åªè¦ä½ å¼åè¿æµéç¨å¾®å¤§ä¸ç¹çåºç¨, ä½ å°±ä¼ç解è¿ç¹.
5. 好ç¨çé
ç½®åº.
å¦æä½ ä¹åå¼åè¿Java项ç®, è¯å®åè¿**.propertiesæè
管çä¸å¤§å çxml..
Java
å
ç½®åºå¯¹propertiesæ件çå¤çæ¯å¾å¼±ç, ä½ ä¸å¾ä¸èªå·±åä¸äºå·¥å
·ç±»å»è¿è¡å¤ç.èä¸propertiesæ件è¿ä¸æ¯ææ´å¤æçè¯æ³.
Playçé
ç½®æ件使ç¨HOCONæ ¼å¼, é»è®¤é
ç½®æ件为application.conf.ä½ è½å¾å®¹æ读åéé¢çé
ç½®,
并ä¸ä½ ä¹å¯ä»¥æèªå·±çé
ç½®åå¨éé¢.æ以åºæ¬ä¸å°±ç¨ä¸å°propertiesæè
xmlæ件äº.
6. Playæ件.
Playææ¯è¾å¤çå®æ¹å第ä¸æ¹æ件å¯ä»¥ä½¿ç¨. æ¯å¦åé®ä»¶, ææåéªè¯, 第ä¸æ¹ç»å½çç.èªå·±åä¸ä¸ªæ件ä¹å¾ç®å.
7. ä¼ç§çæµè¯æ¯æ(以ä¸çä¾å为Play Javaçæ¬)
å 为Playè¯ççæ¶åTDDå·²ç»å¾ç«ç, æ以Play对æµè¯çæ¯æé常好.
éè¿Helpers.fakeApplication()ä¸è¡ä»£ç å°±è½æ¨¡æåºä¸ä¸ªApplication(Playä¸çApplicationä½ å¯ä»¥ç解为类似äºSpringçContext).
FakeRequest request = new FakeRequest(POST, routes.LoginController.requestPhoneCode(phone).url());
Result result = route(request);
assertThat(status(result), is(OK));
ä¸è¡ä»£ç å°±è½å¯¹Controllerè¿è¡æµè¯.
éè¿è¦æµè¯å®æ´çHttp请æ±, å¯ä»¥éè¿fakeServerå¨æµè¯ä¸å¯å¨ä¸ä¸ªPlayåºç¨, éè¿è¯·æ±è¿ä¸ªPlayåºç¨æ¥å®ææµè¯.
Playè¿å
ç½®äºå¯¹ Selenium WebDriverçæ¯æ, å¯ä»¥æ¨¡ææµè§å¨è¿è¡æµè¯.以ä¸æ¯å®æ¹çä¾å:
@Test
public void runInBrowser() {
running(testServer(3333), HTMLUNIT, browser -> {
browser.goTo("
http://localhost:3333");
assertThat(browser.$("#title").getText()).isEqualTo("Hello Guest");
browser.$("a").click();
assertThat(browser.url()).isEqualTo("
http://localhost:3333/login");
});
}
以ä¸è¯´çé½æ¯ä¼ç¹. å½ç¶åä¹æä¸äº.
ä¸è¿ç¨äºPlay2ä¹å, å¦æ让æå¨Javaéååææ¯éå, æä¼ä¸ç¹è±«çéPlay.