惡補J2EE Web 開發(講稿大綱)

gudesheng發表於2008-01-03

這篇文章是給具備一些基本的j2ee開發的兄弟們看的 

1 Webwork 2 作為MVC

要讓伺服器支援webwork,首先需要對web伺服器的web.xml進行配置,這裡用/*,表示所有請求都作為webwork的action,也可以使用*.action, 這樣只有字尾名為action的才執行。

web.xml 

  webwork
  com.opensymphony.webwork.dispatcher.FilterDispatcher


  webwork
  /*

配置好上面以後,webwork就可以執行了,我們新增兩個action試試

xwork.xml


  /WEB-INF/jsp/employee/employeeList.jspx
  /WEB-INF/jsp/employee/employeeForm.jspx
  employee.action

這裡新增了一個action叫做employee,也就是說,所有請求http://site/employee 訪問,都被看成觸發一個action.其具體內容如下:

這是一個最簡單的action,它起到了控制器的作用,實現了CRUD的基本功能,程式碼非常簡介。幾乎和PHP,ROR差不多

EmployeeAction.java

public class EmployeeAction extends ActionSupport implements Preparable {


public String execute() throws Exception {  //如果URL沒有指定Action,預設呼叫它
  return list();  //轉到list
}

public String list() {
  return "list";
}

public String add() {
  employee = new Employee();
  return Action.INPUT;
}
public String edit() {
  employee = employeeDao.getEmployee(id);
  return Action.INPUT;
}

public String save() {
  if (nullOrZero(employee.getEmployeeId())) {
    employeeDao.insert(employee);
  } else {
    employeeDao.update(employee);
  }
    return Action.SUCCESS;
}

public String delete() {
  employeeDao.delete(id);
  return Action.SUCCESS;
}

public void prepare() {
  departmentList = departmentDao.getAllDepartments();  //用於selectbox中下拉選單
  employeeList = employeeDao.getAllEmployees();
}

}

webwork是基於MVC2的,因此上面的控制器對應下面兩個模板檔案。當然實際應用中不一定所有的介面都要採用MVC.

employeeList.jspx

Add New Employee

 

employeeForm.jspx


 


 



            value="%{employee.firstName}" label="%{getText('label.firstName')}" size="40"/>
            value="%{employee.lastName}" label="%{getText('label.lastName')}" size="40"/>
            value="%{employee.age}" label="%{getText('label.age')}" size="20"/>
            value="%{employee.department.departmentId}"
        list="departments" listKey="departmentId" listValue="name"/>
            value="%{employee.employeeId}"/>
   
   

我們看到,這個表單非常簡單,由於其名字的規範定義。webwork的action響應時,會自己裝載其中的變數,和struts的formbean差不多。

EmployeeAction-validation.xml


 
    
       
     
 
 
    
       
     
 
 
    
       
     
     
       18
       65
       
     
 

可以通過獨立的檔案來定義欄位驗證

EmployeeAction.properties
errors.required.age.limit=Please provide an age between ${min} and ${max}.

2 簡化訪問資料庫

3 部分使用Spring連線系統原有資源,例如EJB

要使webwork支援spring,只要簡單的下面的配置即可

web.xml


  contextConfigLocation
  /WEB-INF/classes/net/reumann/demo/spring.xml


  org.springframework.web.context.ContextLoaderListener

修改webwork的配置檔案objectFactory=spring

webwork.properties

webwork.devMode=false
webwork.objectFactory=spring

然後定義好需要IoC的元件

spring.xml


 
 
 
 
   
   
 

你就可以在action中自由的IoC了

action

public EmployeeAction(EmployeeDao employeeDao,
    DepartmentDao departmentDao) {
  this.employeeDao = employeeDao;
  this.departmentDao = departmentDao;
}

 

頁面結構設計
1 jsp include (部分使用taglib)
     name=”birthday”>
   
 
2 sitemesh
3 使用OA皮膚框架
4 ajax + dojo

業務層的設計
1 action中直接呼叫JDBC SQL/Proc, 即action + jdbc

2 action + service/session bean + dao + jdbc/ibatis/hibernate/entity bean (兩個介面,兩個實現)
public class DepartmentDaoService implements DepartmentService {
  DepartmentDao dao = new DepartmentDaoIbatisImpl();
}

3 沒有service層,只有action + dao + jdbc/ibatis/hibernate/entity bean ,(如上面的EmployeeAction)

其它一些Struts的比較

Struts不是一個框架,而是一組專案
兩個框架:
  Action: Action model
  Shale: Component model
  Action 和 Shale 會盡可能多的共享程式碼
各種子專案,例如Tiles

Struts 2將是Webwork 2.2和一些Struts的特性的結合

Class (re)Loading
1 Java 也可以像指令碼語言那樣支援 edit-refresh 風格的開發
2 Janino, Eclipse compiler 以及一些其他的編譯器都使用 Commons-JCI is used
3 所有的庫和框架都必須擺脫editcompile-package-deploy-wait-refresh的思想

Webwork 允許動態重新裝載xml配置檔案 (例如, 自動重新裝載 actions.xml).
webwork.properties: webwork.configuration.xml.reload=true

EclipseWork 是Eclipse的WebWork外掛
http://eclipsework.sourceforge.net/

 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1144287


相關文章