2009年4月2日 星期四

前端呼叫後端程式(DWR)

文件來源:http://tw.myblog.yahoo.com/viva0322/article?mid=78&prev=79&next=75

個人評論:這篇範例簡單易懂,不像其他有寫高手寫的範例,雖然很厲害,但是對於初次接觸Ajax或是沒寫過javascript的生手而言,感覺有障礙。

用途:Javascript 呼叫 Java(點閱率使用)

DWR (Direct Web Remoting) :提供Java程式開發者前端(JavaScript)呼叫後端元件(例如Java Bean...)的完整架構

下載:dwr.jarcommons-logging-1.xxx.Jar

 

步驟1...web.xml中加入DWRServlet

?xml version="1.0" encoding="ISO-8859-1"?  
web-app xmlns="http://java.sun.com/xml/ns/j2ee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  
    version="2.4"  
 
     display-nameajaxDWR/display-name  
     servlet  
          servlet-namedwr-invoker/servlet-name  
          servlet-classuk.ltd.getahead.dwr.DWRServlet/servlet-class  
          init-param  
               description></description  
               param-namedebug/param-name  
               param-valuetrue/param-value  
          /init-param  
     /servlet        
     servlet-mapping  
          servlet-namedwr-invoker/servlet-name  
          url-pattern/dwr/*/url-pattern  
     /servlet-mapping  
/web-app 


步驟2...撰寫dwr.xml,用來告訴DWRServlet呼叫後端程式

?xml version="1.0" encoding="ISO-8859-1"?  
!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"  
"http://www.getahead.ltd.uk/dwr/dwr10.dtd"  
 
dwr  
     allow  
          create creator="new" javascript="Counter"  
               param name="class" value="Counter" /  
          /create  
     /allow  
/dwr 

 

步驟3...撰寫後端程式Counter.java做計數動作

import java.util.*;  
import java.io.*;  
import org.w3c.dom.*;  
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  
import java.net.*;  
import java.sql.*;  
import java.security.*;  
import javax.net.ssl.*;  
import java.util.*;  
import java.util.zip.*;  
import javax.mail.*;  
import javax.mail.internet.*;  
import javax.activation.*;  
import com.gemmyplanet.dbbean.DBOperationBean;  
 
public class Counter {    
     public void counter( Integer BANNERNO) {  
//=====================================================  
//  宣告參數  
//=====================================================  
          Integer ADBANNERNO = null;  
          String SERVICEID = null;  
          String CHANNELID = "";  
          String ADBANNERTYPE = null;  
          String TARGETURL = null;  
          String CLICKDATETIME = null;  
          String CHECKSUM = null;  
          String IMAGEDB = "GP_NEW_DB";  
              
          Connection dbCon = null;  
          Statement stmt = null;  
          ResultSet rs = null;  
//=====================================================  
//  日期 14  
//=====================================================      
          String ft_t = "yyyyMMddHHmmss";  
          String ft = ft_t.substring(0, 14);  
//=====================================================  
//  資料庫連線 && 更新資料  
//=====================================================      
          try {        
               DBOperationBean dbOprBean = new DBOperationBean();  
               dbOprBean.setDatasource("DS_GP_NEW_DB");  
               dbCon = dbOprBean.getConnection();  
               if ( dbCon != null && !dbCon.isClosed() ){  
                    stmt = dbCon.createStatement();  
                    rs = stmt.executeQuery("SELECT * FROM "+ IMAGEDB +".ADBANNERINFO WHERE ADBANNERNO="+ BANNERNO);  
                    if( rs != null ) {  
                         while( rs.next() ) {  
                              stmt.executeUpdate("INSERT INTO "+IMAGEDB+".ADBANNERLOGINFO SET SERVICEID='"+rs.getString("SERVICEID")+"', ADBANNERTYPE='"+rs.getString("ADBANNERTYPE")+"', TARGETURL='"+rs.getString("TARGETURL")+"', CLICKDATETIME='"+util.DateUtil.formatString(new java.util.Date(), ft)+"'");  
                         }  
                    }                
                    stmt.close();  
                    dbCon.close();  
               }  
          } catch (Exception ex) {  
               try {  
                    if ( dbCon != null && !dbCon.isClosed() ){  
                         stmt.close();  
                         dbCon.close();  
                    }  
               } catch( Exception e ) {}        
          }  
     }  


步驟4...Counter.java編譯後的.class放置WEB-INF\classes

 

步驟5...撰寫前端呼叫後端page_counter.js

function counter(num) {  
     Counter.counter(num);  
}

 

步驟6...撰寫網頁index.jsp
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
html  
head  
meta http-equiv="Content-Type" content="text/html; charset=BIG5"  
     title>第一個DWR程式</title  
//========================================  
//dwr/interface/Counter.js是由DWRServlet根據dwr.xml中的設定生成的  
//engine.js負責客戶端伺服端溝通  
//util.js是一些好用的JavaScript程式,可以讓您少寫很多JavaScript  
//page_counter.js呼叫後端.java  
//========================================  
script type='text/javascript' src='dwr/interface/Counter.js'></script  
script type='text/javascript' src='dwr/engine.js'></script  
 script type='text/javascript' src='dwr/util.js'></script  
 script type='text/javascript' src='page_counter.js'></script  
/head  
script language="Javascript"  
     function test(num,url) {  
          counter(num);  
          location.href = url;  
     }  
      
     function test1(num) {  
          counter(21);  
     }  
/script  
body  
table  
     tr><td><a href="javascript:void(test(21))">測試</a></td></tr  
/table  
input type='button' value='測試' onclick="test(21,'http://www.yahoo.com.tw')"  
/body  
/html

沒有留言:

張貼留言