<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "網頁圖片、文字、連結點閱率語法?"]]></title>
		<link>https://forum.andowson.com/posts/list/5.page</link>
		<description><![CDATA[Latest messages posted in the topic "網頁圖片、文字、連結點閱率語法?"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>網頁圖片、文字、連結點閱率語法?</title>
				<description><![CDATA[ 請問.... 
<br>
<br>
首頁 index.jsp 
<br>
計數器 counter.jsp 
<br>
<br>
要記錄多少人瀏覽index.jsp語法如下: 
<br>
[code]&lt;script language="JavaScript" type="text/javascript" src=".../counter.jsp"&gt;[/code] 
<br>
<br>
但如果我要記錄index.jsp裡某些版位(例:圖片、連結...)的點閱率，該怎麼做？ 
<br>
<br>
我原本作法是，只要user點圖片或某個連結，都先導到counter.jsp做資料庫存取 
<br>
存取完後在導回該圖片或某個連結該前往的網址，但這樣做，在瀏覽器無法點回上一頁 
<br>
因上一頁是counter.jsp，而counter.jsp又會導回來 
<br>
<br>
想請問有什麼方法可以在我點了圖片後就做掉計數的動作，在連到該圖片連結的網址！而不需透過 counter.jsp 
<br>
<br>
目前狀況: 
<br>
 index.jsp裡某個圖片URL--&gt; counter.jsp --&gt; 圖片URL --&gt; 按上一頁 --&gt; counter.jsp(自動導回圖片URL ) 
<br>
正常狀況: 
<br>
 index.jsp裡某個圖片URL(做計數動作)　--&gt; 圖片URL --&gt; 按上一頁 --&gt; index.jsp 
<br>
<br>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/271/474.page</guid>
				<link>https://forum.andowson.com/posts/preList/271/474.page</link>
				<pubDate><![CDATA[Wed, 17 Sep 2008 13:59:57]]> GMT</pubDate>
				<author><![CDATA[ viva]]></author>
			</item>
			<item>
				<title>回覆:網頁圖片、文字、連結點閱率語法?</title>
				<description><![CDATA[ 來個不負責任的回答XD 
<br>
<br>
[quote]都先導到counter.jsp做資料庫存取[/quote] 
<br>
如果可以的話,直接在後端(java )跟資料庫做處理吧! 
<br>
<br>
我會想用DWR來做 
<br>
想法如下: 
<br>
a href 
<br>
-&gt;javascript 
<br>
-&gt;調用DWR 
<br>
-&gt;java (這邊做資料庫的處理) 
<br>
-&gt;連結到圖片或網址 
<br>
<br>
大致上就如此 
<br>
<br>
DWR是Ajax的框架 
<br>
可以透過dwr.xml的設定 
<br>
在javascript裡遠端調用後端的method 
<br>
<br>
我看還是等高手來回答好了! 
<br>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/271/475.page</guid>
				<link>https://forum.andowson.com/posts/preList/271/475.page</link>
				<pubDate><![CDATA[Thu, 18 Sep 2008 10:32:18]]> GMT</pubDate>
				<author><![CDATA[ jforumnewer]]></author>
			</item>
			<item>
				<title>回覆:網頁圖片、文字、連結點閱率語法?</title>
				<description><![CDATA[ 下方程式碼是自訂的函數,只要把代號(型態:String)丟進去,就會做資料庫存取 
<br>
[code]ecND_ADBANNERINFO adinfo = gpcommontk.getAdBannerInfo("代號"); 
<br>
gpcommontk.logAdBannerInfo(adinfo);[/code] 
<br>
我也曾想過，在點了&lt;a href="xxx"&gt;&lt;/a&gt; 時就做資料庫存取 
<br>
但不知道前端(JavaScript)怎麼動態去控制後端(JSP)做存取... 
<br>
<br>
Ajax是什麼...一.一? 
<br>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/271/476.page</guid>
				<link>https://forum.andowson.com/posts/preList/271/476.page</link>
				<pubDate><![CDATA[Thu, 18 Sep 2008 11:18:25]]> GMT</pubDate>
				<author><![CDATA[ viva]]></author>
			</item>
			<item>
				<title>回覆:網頁圖片、文字、連結點閱率語法?</title>
				<description><![CDATA[ [quote]但不知道前端(JavaScript)怎麼動態去控制後端(JSP)做存取... [/quote] 
<br>
你可以把DWR當作是在處理這種事的工具 
<br>
如果要用DWR你就得google一下學一學吧! 
<br>
基本上是不會改到你已經撰寫好的方法 
<br>
只是幫你在前端呼叫後端的方法 
<br>
<br>
就你的case 
<br>
我寫省略點...參數那些要用你就自己加 
<br>
a href=javascript:addCount 
<br>
<br>
funtion addCount(){ 
<br>
 //調用DWR呼叫你寫好method 
<br>
 javaClassName.Method(); 
<br>
 //連結到圖或網址 
<br>
 ... 
<br>
} 
<br>
<br>
我想應該有簡單的方法 
<br>
就待高手回答吧!]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/271/477.page</guid>
				<link>https://forum.andowson.com/posts/preList/271/477.page</link>
				<pubDate><![CDATA[Thu, 18 Sep 2008 11:56:19]]> GMT</pubDate>
				<author><![CDATA[ jforumnewer]]></author>
			</item>
			<item>
				<title>回覆:網頁圖片、文字、連結點閱率語法?</title>
				<description><![CDATA[ 嗯,感謝你的指導! 
<br>
<br>
我想我該學點Ajax 一.一a 
<br>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/271/478.page</guid>
				<link>https://forum.andowson.com/posts/preList/271/478.page</link>
				<pubDate><![CDATA[Thu, 18 Sep 2008 13:18:34]]> GMT</pubDate>
				<author><![CDATA[ viva]]></author>
			</item>
			<item>
				<title>回覆:網頁圖片、文字、連結點閱率語法?</title>
				<description><![CDATA[ jforumnewer其實說明得不錯，只要使用Ajax的技術，就可以達到這個需求，也就是當訪客點下超連結時，先用JavaScript執行一支記錄次數的程式，然後再導引至原本要去的超連結即可。 
<br>
<br>
今天晚上稍微看了一下[url=http://jquery.com/]jQuery[/url]，發現如果您會用jQuery的話，這個問題就變得很簡單了，底下是範例程式碼： 
<br>
index.html: 
<br>
[code=html] 
<br>
&lt;html&gt; 
<br>
&lt;head&gt; 
<br>
&lt;title&gt;AD Click Counter&lt;/title&gt; 
<br>
&lt;script type="text/javascript" src="jquery-1.2.6.js"&gt;&lt;/script&gt; 
<br>
&lt;script type="text/javascript"&gt; 
<br>
$(document).ready(function(){ 
<br>
 $("a").click(function(event){ 
<br>
 var ad = $(this).attr("name"); 
<br>
 var target = $(this).text(); 
<br>
 $.get('counter.jsp?ad='+ad); 
<br>
 alert("Thanks for visiting "+ target +" !"); 
<br>
 }); 
<br>
}); 
<br>
&lt;/script&gt; 
<br>
&lt;/head&gt; 
<br>
&lt;body&gt; 
<br>
&lt;a href="http://jquery.com/" name="ad1"&gt;jQuery&lt;/a&gt; 
<br>
&lt;a href="http://andowson.com/" name="ad2"&gt;Andowson&lt;/a&gt; 
<br>
&lt;a href="http://google.com/" name="ad3"&gt;Google&lt;/a&gt; 
<br>
&lt;a href="http://yahoo.com/" name="ad4"&gt;Yahoo!&lt;/a&gt; 
<br>
&lt;a href="http://microsoft.com/" name="ad5"&gt;Microsoft&lt;/a&gt; 
<br>
&lt;/body&gt; 
<br>
&lt;/html&gt; 
<br>
[/code] 
<br>
[url=http://www.andowson.com/examples/counter.jsp]counter.jsp[/url]: 
<br>
[code] 
<br>
&lt;%@page import="java.util.*" %&gt; 
<br>
&lt;%! 
<br>
 // we use a Map(key, value) to store each ad's count 
<br>
 static Map counters = new HashMap(); 
<br>
%&gt; 
<br>
&lt;% 
<br>
 // get the ad's name 
<br>
 String name = request.getParameter("ad"); 
<br>
 int count = 0; 
<br>
 // get back the previous count if this ad has been clicked 
<br>
 if (counters.containsKey(name)) { 
<br>
 count = (Integer)counters.get(name); 
<br>
 } 
<br>
 // add this ad's counter into map 
<br>
 if (name != null) { 
<br>
 synchronized (counters) { 
<br>
 counters.put(name, ++count); 
<br>
 counters.notify(); 
<br>
 } 
<br>
 } 
<br>
 // print all of the counters' names and values 
<br>
 Iterator iterator = counters.keySet().iterator(); 
<br>
 while (iterator.hasNext()) { 
<br>
 String key = (String)iterator.next(); 
<br>
 int value = (Integer)counters.get(key); 
<br>
 System.out.println(key+"="+value); 
<br>
 out.println(key+"="+value+"&lt;br&gt;"); 
<br>
 } 
<br>
%&gt; 
<br>
[/code] 
<br>
<br>
簡單說明一下： 
<br>
這個範例是由jQuery上面的[url=http://docs.jquery.com/How_jQuery_Works]How jQuery Works[/url]範例直接改寫過來的，也就是我們先下載jQuery這個JavaScript的函式庫，然後註冊我們要處理超連結a這個標籤，當按下超連結時即會呼叫$("a").click(...)，然後我們利用attr("name")取得超連結的name屬性，用text()取得超連結顯示的文字，將超連結的名稱傳給counter.jsp的ad參數作為記錄的依據。 
<br>
<br>
而counter.jsp這支程式，我先以HashMap代替資料庫，如果有抓到傳入的ad參數時就先檢查是否存在，如果存在，將舊的值取出加一再存回，如果不存在，則新增一筆進去。如果沒有傳入參數時將不會更新任何次數，最後將全部的值印出來觀察。]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/271/479.page</guid>
				<link>https://forum.andowson.com/posts/preList/271/479.page</link>
				<pubDate><![CDATA[Fri, 19 Sep 2008 00:15:34]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>回覆:網頁圖片、文字、連結點閱率語法?</title>
				<description><![CDATA[ 感謝指導...]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/271/480.page</guid>
				<link>https://forum.andowson.com/posts/preList/271/480.page</link>
				<pubDate><![CDATA[Fri, 19 Sep 2008 13:49:27]]> GMT</pubDate>
				<author><![CDATA[ viva]]></author>
			</item>
			<item>
				<title>回覆:網頁圖片、文字、連結點閱率語法?</title>
				<description><![CDATA[ 分享程式碼.....雖然網路上很多相關資料，不過我覺得不是很清楚 
<br>
因為我花了很多時間去測試才了解(是資質的關係嗎一.一a) 
<br>
<br>
用途:[color=red]前端程式(javascript)呼叫後端程式(java)[/color] 
<br>
<br>
有了前端呼叫後端程式的橋樑,能做的事太多了!! 
<br>
以我例子來說,此程式是用來在網頁某些連結、圖片、Flash計算user點閱率!! 
<br>
<br>
順便感謝jforumnewer及andowson的指導.... 
<br>
<br>
步驟1... 
<br>
下載<a href="http://directwebremoting.org/dwr/download" target="_blank">dwr.jar</a>
<br>
下載<a href="http://commons.apache.org/downloads/download_logging.cgi" target="_blank">commons-logging-1.xxx.Jar</a>(Logging元件)放到WEB-INF/lib 
<br>
<br>
<br>
步驟2...在web.xml中加入DWRServlet… 
<br>
[code]&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; 
<br>
&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
<br>
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
<br>
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
<br>
 version="2.4"&gt; 
<br>
<br>
 &lt;display-name&gt;ajaxDWR&lt;/display-name&gt; 
<br>
 &lt;servlet&gt; 
<br>
 &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; 
<br>
 &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt; 
<br>
 &lt;init-param&gt; 
<br>
 &lt;description&gt;&lt;/description&gt; 
<br>
 &lt;param-name&gt;debug&lt;/param-name&gt; 
<br>
 &lt;param-value&gt;true&lt;/param-value&gt; 
<br>
 &lt;/init-param&gt; 
<br>
 &lt;/servlet&gt; 
<br>
 &lt;servlet-mapping&gt; 
<br>
 &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; 
<br>
 &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt; 
<br>
 &lt;/servlet-mapping&gt; 
<br>
&lt;/web-app&gt;[/code] 
<br>
步驟3...撰寫dwr.xml，用來告訴DWRServlet呼叫後端程式 
<br>
[code]&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; 
<br>
&lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" 
<br>
 "http://www.getahead.ltd.uk/dwr/dwr10.dtd"&gt; 
<br>
<br>
&lt;dwr&gt; 
<br>
 &lt;allow&gt; 
<br>
 &lt;create creator="new" javascript="Counter"&gt; 
<br>
 &lt;param name="class" value="Counter" /&gt; 
<br>
 &lt;/create&gt; 
<br>
 &lt;/allow&gt; 
<br>
&lt;/dwr&gt;[/code] 
<br>
<br>
步驟4...撰寫後端程式Counter.java做計數動作 
<br>
[code]import java.util.*; 
<br>
import java.io.*; 
<br>
import org.w3c.dom.*; 
<br>
import javax.xml.parsers.DocumentBuilder; 
<br>
import javax.xml.parsers.DocumentBuilderFactory; 
<br>
import java.net.*; 
<br>
import java.sql.*; 
<br>
import java.security.*; 
<br>
import javax.net.ssl.*; 
<br>
import java.util.*; 
<br>
import java.util.zip.*; 
<br>
import javax.mail.*; 
<br>
import javax.mail.internet.*; 
<br>
import javax.activation.*; 
<br>
import com.gemmyplanet.dbbean.DBOperationBean; 
<br>
<br>
public class Counter { 
<br>
 public void counter( Integer BANNERNO) { 
<br>
//===================================================== 
<br>
// 宣告參數 
<br>
//===================================================== 
<br>
 Integer ADBANNERNO = null; 
<br>
<br>
 String SERVICEID = null; 
<br>
 String CHANNELID = ""; 
<br>
 String ADBANNERTYPE = null; 
<br>
 String TARGETURL = null; 
<br>
 String CLICKDATETIME = null; 
<br>
 String CHECKSUM = null; 
<br>
 String IMAGEDB = "GP_NEW_DB"; 
<br>
<br>
 Connection dbCon = null; 
<br>
 Statement stmt = null; 
<br>
 ResultSet rs = null; 
<br>
<br>
//===================================================== 
<br>
// 日期 14位 
<br>
//===================================================== 
<br>
 String ft_t = "yyyyMMddHHmmss"; 
<br>
 String ft = ft_t.substring(0, 14); 
<br>
<br>
//===================================================== 
<br>
// 資料庫連線 &amp;&amp; 更新資料 
<br>
//===================================================== 
<br>
 try { 
<br>
 DBOperationBean dbOprBean = new DBOperationBean(); 
<br>
 dbOprBean.setDatasource("DS_GP_NEW_DB"); 
<br>
 dbCon = dbOprBean.getConnection(); 
<br>
 if ( dbCon != null &amp;&amp; !dbCon.isClosed() ){ 
<br>
 stmt = dbCon.createStatement(); 
<br>
 rs = stmt.executeQuery("SELECT * FROM "+ IMAGEDB +".ADBANNERINFO WHERE ADBANNERNO="+ BANNERNO); 
<br>
 if( rs != null ) { 
<br>
 while( rs.next() ) { 
<br>
 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)+"'"); 
<br>
 } 
<br>
 } 
<br>
 stmt.close(); 
<br>
 dbCon.close(); 
<br>
 } 
<br>
 } catch (Exception ex) { 
<br>
 try { 
<br>
 if ( dbCon != null &amp;&amp; !dbCon.isClosed() ){ 
<br>
 stmt.close(); 
<br>
 dbCon.close(); 
<br>
 } 
<br>
 } catch( Exception e ) {} 
<br>
 } 
<br>
 } 
<br>
}[/code] 
<br>
步驟5...將Counter.java編譯後的.class放置WEB-INF\classes 
<br>
<br>
步驟6...撰寫前端呼叫後端page_counter.js 
<br>
[code]function counter(num) { 
<br>
 Counter.counter(num); 
<br>
}[/code] 
<br>
<br>
步驟7...撰寫網頁index.jsp 
<br>
[code]&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt; 
<br>
&lt;html&gt; 
<br>
&lt;head&gt; 
<br>
&lt;meta http-equiv="Content-Type" content="text/html; charset=BIG5"&gt; 
<br>
 &lt;title&gt;第一個DWR程式&lt;/title&gt; 
<br>
//======================================== 
<br>
//dwr/interface/Counter.js是由DWRServlet根據dwr.xml中的設定生成的 
<br>
//engine.js負責客戶端伺服端溝通 
<br>
//util.js是一些好用的JavaScript程式，可以讓您少寫很多JavaScript。 
<br>
//page_counter.js呼叫後端.java檔 
<br>
//======================================== 
<br>
 &lt;script type='text/javascript' src='dwr/interface/Counter.js'&gt;&lt;/script&gt; 
<br>
 &lt;script type='text/javascript' src='dwr/engine.js'&gt;&lt;/script&gt; 
<br>
 &lt;script type='text/javascript' src='dwr/util.js'&gt;&lt;/script&gt; 
<br>
 &lt;script type='text/javascript' src='page_counter.js'&gt;&lt;/script&gt; 
<br>
&lt;/head&gt; 
<br>
&lt;script language="Javascript"&gt; 
<br>
 function test(num,url) { 
<br>
 counter(num); 
<br>
 location.href = url; 
<br>
 } 
<br>
<br>
 function test1(num) { 
<br>
 counter(21); 
<br>
 } 
<br>
&lt;/script&gt; 
<br>
&lt;body&gt; 
<br>
&lt;table&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;<a>測試</a>&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
&lt;/table&gt; 
<br>
&lt;input type='button' value='測試' onclick="test(21,'http://www.yahoo.com.tw')"&gt; 
<br>
&lt;/body&gt; 
<br>
&lt;/html&gt;[/code] 
<br>
<br>
在Counter.java部分，可以做你需要後端做的事... 
<br>
修改完web.xml與dwr.xml記的要重開Tomcat 
<br>
測試時所有檔案的path: 
<br>
1.建立新目錄 ---&gt; tomcat/webapps/test/ 
<br>
2.dwr.jar ---&gt; tomcat/webapps/test/WEB-INF/lib/ 
<br>
3.web.xml ---&gt; tomcat/webapps/test/WEB-INF/ 
<br>
4.dwr.xml ---&gt; tomcat/webapps/test/WEB-INF/ 
<br>
5.Counter.java ---&gt; tomcat/webapps/test/WEB-INF/classes/ 
<br>
6.page_counter.js ---&gt; tomcat/webapps/test/ 
<br>
7.index.jsp ---&gt; tomcat/webapps/test/]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/271/482.page</guid>
				<link>https://forum.andowson.com/posts/preList/271/482.page</link>
				<pubDate><![CDATA[Tue, 23 Sep 2008 15:49:35]]> GMT</pubDate>
				<author><![CDATA[ viva]]></author>
			</item>
	</channel>
</rss>