程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 在JSP開發中模擬.NET WebForm

在JSP開發中模擬.NET WebForm

編輯:關於JSP

WebForm是事件驅動的,控件狀態可以在http請求之間自動保持,並且使用後置代碼很好地實現了頁面外觀與頁面邏輯控制的分離,一改以往html,服務器段代碼、javaScript混雜在一起的web開發方式。stucts提供了大量的定制標簽,由tag、form、bean、action及配置文件構建了一個優秀的MVC模式的web開發方式。但相比較其WebForm來,竊以為stucts更為復雜,需要協同工作的元素較多,解決問題的效果不如WebForm顯著(僅是個人看法)。

在現實開發中,常常需要在某個頁面中處理很多Form控件,且要處理這個頁面可能引發的多個事件,在事件觸發後,又請求同一個頁面,又需要在請求之間保持狀態,在頁面中處理所有這些,真實不勝其煩。受到WebForm啟發,我在用JSP進行開發時,借鑒了了其一些思想。本質上我們就是想讓頁面顯示代碼與頁面控制代碼分離,要作到這一點並不困難,有很多辦法。

可以為頁面定義一個“頁面處理器(PageHandler)”,它類似WebForm的後置代碼,它的接口基本是下面這個樣子:

public class PageHandler
{
 protected HttpServletRequest request;
 protected HttpServletResponse response;
 protected JspWriter out;
 protected PageContext pageContext;
 protected HttpSession session = null;
 protected ServletContext application = null;
 protected ServletConfig config = null;
 protected String event_action = null; //頁面事件
 protected String event_params = null; //頁面參數
 //取得操作頁面的基本組件
 public PageHandler(PageContext page)
 {
  this.pageContext = page;
  this.request = (HttpServletRequest) pageContext.getRequest();
  this.response = (HttpServletResponse) pageContext.getResponse();
  this.pageContext = page;
  out = pageContext.getOut();
  application = pageContext.getServletContext();
  config = pageContext.getServletConfig();
  session = pageContext.getSession();
  try{
   request.setCharacterEncoding("gb2312");//設定頁面編碼
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
 }
 //初始化頁面的參數,具體的頁面處理器類可以重寫這
 //個方法進行頁面初始化
 protected void onLoad() throws Exception
 {
 }
 //根據頁面指定的事件進行處理
 private final void eventBind() throws Exception
 {
  //event_action從從頁面的名為event_action的hidden字段取得,它意為事件的稱,
  //當此事件觸發時,他會尋找在"頁面處理器類中"與event_action同名的方法加
  // 以調用。
  if (event_action != null && !event_action.equals(Format.Empty))
  {
   event_params = request.getParameter("parameters"); //事件參數參數,從頁面
   //的名為parameters的hidden字段取得
   if (paramTypes[0] == null)
   {
    paramTypes[0] = Class.forName("java.lang.String");
   }
   Object paramValues[] = new Object[1];
   paramValues[0] = event_params;
   Method method = null;
   try
   {
    method = this.getClass().getDeclaredMethod(event_action, paramTypes);
    method.setAccessible(true);
   }
   catch (Exception e)
   {
    throw new UserException("系統缺少對您的請求的處理機制: + event_action);
   }
   if (method != null)
   {
    method.invoke(this, paramValues); //調用web時間
   }
  }
 }
 //處理頁面
 public void process() throws Exception
 {
  try
  {
   event_action = request.getParameter("action"); //得頁面事件
   onLoad();//頁面加載時的初始化
   eventBind();//處理事件
  }
  catch (Exception e)
  {
   e.printStackTrace(); ///////////////
   Format.alert(out, "發生了未知錯誤:" + Format.getString(e.getMessage()));
  }
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved