我們知道,一個基於請求轉發模型的Web MVC框架需要解決如何告知框架使用哪一個視圖來進行程序執行結果呈現?對於Struts1.x來說,需要在struts-config.xml中配置一大堆的page或者在程序中硬編碼使用new Forward來告知框架使用哪一個視圖界面來呈現輸出結果;而對於Struts2或webwork來說,需要使用return SUCCESS或””,並在配置文件中使用配置來指定具體的輸出路徑。一堆一堆或長串長串的代碼有時候把程序員壓得喘不過氣來,其實這也是Rails之所以叫囂的原因之一。
而EasyJWeb引入了很多靈活適用的功能,解決了傳統MVC框架中處理頁面查找的功能,使用慣例代替配置的方式,可以不用寫任何代碼或任何配置文件,EasyJWeb自動知道程序所需要的視圖,並使用該視圖來呈現輸出結果。
比如一個簡單的需求,我們需要在頁面上顯示一個用戶的信息,這個簡單需求涉及到用戶向服務器端發送一個記取用戶信息的請求,然後用戶程序作一些業務處理後(比如從數據中查詢或創建新對象等),然後導向到顯示頁面並顯示數據。
User類的內容如下:
public class User {
private String name;
private String email;
private Date bornDate;
private Integer loginTimes;
public User(String name,String email,Date bornDate)
{
this.name=name;
this.email=email;
this.bornDate=bornDate;
this.loginTimes=5;
}
public String getName() {
return name;
}
//省略其它getter及setter方法
}
private String name;
private String email;
private Date bornDate;
private Integer loginTimes;
public User(String name,String email,Date bornDate)
{
this.name=name;
this.email=email;
this.bornDate=bornDate;
this.loginTimes=5;
}
public String getName() {
return name;
}
//省略其它getter及setter方法
}
用於顯示用戶信息的html頁面模板,內容如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>html模板</title>
</head>
<body>
<h1>用戶信息</h1>
<p>姓名:${name}<br />
郵箱:${email}<br />
出生日期:${bornDate}<br />
登錄次數:${loginTimes}</p>
</body>
</html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>html模板</title>
</head>
<body>
<h1>用戶信息</h1>
<p>姓名:${name}<br />
郵箱:${email}<br />
出生日期:${bornDate}<br />
登錄次數:${loginTimes}</p>
</body>
</html>
給該模板取名爲show.html,並存放在WEB-INF/views/hello目錄下。最後我們需要寫一個HelloAction,從而實現動態顯示各種用戶的信息。HelloAction中的代碼如下:
package com.easyjf.demo.mvc;
import java.util.Date;
import com.easyjf.web.WebForm;
import com.easyjf.web.core.AbstractPageCmdAction;
public class HelloAction extends AbstractPageCmdAction {
public void show(WebForm form)
{
User user=new User("天一","[email protected]",new Date());
form.addPo(user);
}
}
import java.util.Date;
import com.easyjf.web.WebForm;
import com.easyjf.web.core.AbstractPageCmdAction;
public class HelloAction extends AbstractPageCmdAction {
public void show(WebForm form)
{
User user=new User("天一","[email protected]",new Date());
form.addPo(user);
}
}
在web.xml中添加一個自動掃描Action的配置,如下:
然後起動Web服務器,在地址欄中輸入, 執行結果如下:
<context-param>
<param-name>defaultActionPackages</param-name>
<param-value>
com.easyjf.demo
</param-value>
</context-param>
<param-name>defaultActionPackages</param-name>
<param-value>
com.easyjf.demo
</param-value>
</context-param>
可以看到,HelloAction的show方法中語句非常少,沒有一條用來處理關於頁面跳轉的語句,也沒有像Struts那些必須的return語句,EasyJWeb會自動找到相應的用戶最想要的模板頁面,然後進行輸出。
當然,頁面的跳轉及組織並非固定死了的,如果你不願意守這個規矩,想把show.html這個模板文件改名爲show1.html,並存放到WEB-INF/views/myHello這個目錄,則上面的show方法則可以寫成如下的形式:
public Page show(WebForm form)
{
User user=new User("天一","[email protected]",new Date());
form.addPo(user);
return new Page("/myHello/show1.html");
}
{
User user=new User("天一","[email protected]",new Date());
form.addPo(user);
return new Page("/myHello/show1.html");
}
另外,對於頁面的組織,EasyJWeb是使用Module及模塊的形式進行組織的,把多個相關的頁面及功能都組裝到一個模塊中,比如假如上面的HelloAction中還要處理用戶編輯,用戶刪除,用戶列表顯示等操作,則我們直接在上面的類中添加名爲add、del、list等名稱的方法即可,同時把相關的模板頁面都統一存放在hello這個目錄中。