2009年5月25日 星期一

顯示螢幕解析度和瀏覽器類別

//顯示瀏覽器類別

navigator.appName


Firefox 顯示 Netscape
IE 顯示 Microsoft Internet Explorer


//顯示螢幕解析度
screen.width 寬度
screen.height 高度


可以用以下例子放入javascript中

alert("瀏覽器是:"+navigator.appName );
alert("螢幕解析度是:"+screen.width+" * "+screen.height );

2009年5月20日 星期三

Login Data with JDO ( GAE&JDO 7/7)

Modify 3 point
  • 1 Modify index html
這裡幾個地方要加入

getCookie(c_name) 取得cookie
deleteCookie(c_name) 刪除 cookie
initial() 起始設定
logoutfunction() 登出函式

並加入以下的html
------------------------------------------------------------------------
< tr>
< td colspan="2" style="font-weight:bold;">Login function:< /td>
< /tr>
< tr>
< td>
< form id=frmLogin method=get action="login" >
< span id="tobeVisible" >Enter your message ulen!

請輸入姓名:
< input type=text name="lUserName">
請輸入Password:
< input type=text name="lUserPassword">
< input type=submit value="確定">
< /span>
< /form>
< input id=logout type=submit value="logout" onclick='logoutfunction()'>

< /td>
< /tr>
--------------------------------------------------------------------------------------


修改完的 index.html
  • 2 Add servlet function
在 src/jdo.cookie.example/ 下 (jdo.cookie.example( 是package name))
撰寫 java serverlet function login.java
  • 3 Web.xml
修改 位於 war\WEB-INF\lib的 web.xml 如連結 再中間加入下一段XML
設定servlet的位置名稱

----------------------------------這裡是XML--------------------------

< servlet>
<servlet-name>login</servlet-name>
<servlet-class>jdo.cookie.example.
login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>
login</servlet-name>
<url-pattern>/
login</url-pattern>
</servlet-mapping>

----------------------------------這裡是XML--------------------------

Blogger 版面的一些修改

頁面窄窄的讓人有點看起來不爽,不過唯一能夠修改範本的方法就是修他的範本html

步驟 版面配置->修改html

以下是我修改兩個地方的心得

  • 修改寬度
找到
#outer-wrapper 整體寬度
#main 文章內容寬度
#sidebar 惻攔寬度

這三個

修改他門裡面的 width 屬性

但我試過 #main + #sidebar 的寬度必須 小於 #outer-wrapper 的寬度

如 我是設 580px , 280px, 900 px

( 當我設 600px,300px,900px 會跑掉 我想 裡面應該還有其他設定邊界的屬性要改)

  • 修改文章標題大小
找到 .post h3 這個 修改裡面的 font-size
可能應範本不同而不一樣

2009年5月19日 星期二

Delete Data with JDO ( GAE&JDO 6/7)

Modify 3 point
  • 1 Modify index html

delete function:



刪除資料 有此姓名才可以刪除!!!!!

<form method="post" action="delete">
請輸入姓名:
<input name="dUserName" type="text">
<input value="確定" type="submit">
</form>





注意 form method=post action="delete"
  • 2 Add servlet function
在 src/jdo.cookie.example/ 下 (jdo.cookie.example( 是package name))
撰寫 java serverlet function delete.java
  • 3 Web.xml
修改 位於 war\WEB-INF\lib的 web.xml 如連結 再中間加入下一段XML
設定servlet的位置名稱

----------------------------------這裡是XML--------------------------

< servlet>
<servlet-name>
delete</servlet-name>
<servlet-class>jdo.cookie.example.
delete</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>
delete</servlet-name>
<url-pattern>/
delete</url-pattern>
</servlet-mapping>

----------------------------------這裡是XML--------------------------

Update Data with JDO ( GAE&JDO 5/7)

Modify 3 point
  • 1 Modify index html

Update function:



姓名密碼相符才可以修改!!!!!


<form method="post" action="update">
請輸入姓名:
<input name="uUserName" type="text">
請輸入Password:
<input name="uUserPassword" type="text">
請輸入要修改的 Content:
<input name="uUserContent" type="text">
<input value="確定" type="submit">
</form>



注意 form method=post action="update"
  • 2 Add servlet function
在 src/jdo.cookie.example/ 下 (jdo.cookie.example( 是package name))
撰寫 java serverlet function update.java

這裡是用了 PersistenceManager 的方法 update

這裡有說明的文章 http://blog.csdn.net/wafd/archive/2004/01/02/17757.aspx
  • 3 Web.xml
修改 位於 war\WEB-INF\lib的 web.xml 如連結 再中間加入下一段XML
設定servlet的位置名稱

----------------------------------這裡是XML--------------------------

< servlet>
<servlet-name>update</servlet-name>
<servlet-class>jdo.cookie.example.
update</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>
update</servlet-name>
<url-pattern>/
update</url-pattern>
</servlet-mapping>

----------------------------------這裡是XML--------------------------

List Data with JDO ( GAE&JDO 4/7)

Modify 3 point
  • 1 Modify index html

Show all user:


<form method="get" action="show">
<input value="顯示所有使用者" type="submit">
</form>

注意 form method=get action="show"
  • 2 Add servlet function
在 src/jdo.cookie.example/ 下 (jdo.cookie.example( 是package name))
撰寫 java serverlet function show.java
  • 3 Web.xml
修改 位於 war\WEB-INF\lib的 web.xml 如連結 再中間加入下一段XML
設定servlet的位置名稱

----------------------------------這裡是XML--------------------------
< servlet>
<servlet-name>show</servlet-name>
<servlet-class>jdo.cookie.example.show</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>show</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>

----------------------------------這裡是XML--------------------------

Add Data with JDO ( GAE&JDO 3/7)

Modify 3 point
  • 1 Modify index html

加入如以下的欄位

<form method="get" action="add">
請輸入姓名:
<input name="aUserName" type="text">
請輸入Password:
<input name="aUserPassword" type="text">
請輸入Content:
<input name="aUserContent" type="text">
<input value="確定" type="submit">

這裡 form method="get" action="add"
  • 2 Add servlet function
在 src/jdo.cookie.example/ 下 (jdo.cookie.example( 是package name))
撰寫 java serverlet function Add.java
  • 3 Web.xml
修改 位於 war\WEB-INF\lib的 web.xml 如連結 設定servlet的位置名稱

定義JDO type ( GAE&JDO 2/7)

在 eclipse 建立專案

  • 1. 建立新的APP Project


  • 2. 設定專案名稱及package 的名稱,這裡不討論gwt 所以把他勾掉不使用


  • 3.新增 Custom class 在 src/jdo.cookie.example/ 下
(jdo.cookie.example( 是package name))

Ex User.java
Inlcuded attributes
-----------------------------------------------------
Id
Password
Content

  • 4. Set Persistence Manager 在 src/jdo.cookie.example/ 下
PMF.java

See more in Using the Datastore with JDO

Google App Engines Datastore with JDO ( GAE&JDO 1/7))

做了一個小的範例

Using Google App Engine’s Datastore with JDO
Include
  • update
  • Add
  • List
  • delete
  • login Using Cookie in the java servlet

環境

  • JDK
  • Eclipse
  • Google App Engine Plug-in for Eclipse

由於敘述過多,所以在多分六個步驟

Setp

相關文章


完成範例網址
http://4.latest.catontest.appspot.com/index.html

javascript 跳頁面

在javascript內加入這個語法,就會自動轉到要轉得網頁

location.href=("網址");

轉貼
http://g7g1g3.pixnet.net/blog/post/8785560

-----------------------------------------------------------

原本是想要用上一頁的語法的,但firefox 我不知道如何讓他run,

上下頁語法

上一頁 history.back()

下一頁 history.forward()

跳至i頁 history.go(i)
---------------------------------------------------------
i=-1 前一頁
i=-3 前三頁
i= 1 下一頁
i= 3 下三頁
以此類推

參考
http://dob.tnc.edu.tw/themes/old/showPage.php?s=489&t=6

cookie

cookie 簡單的說就是一組字串,與許使用者將一些瀏覽網頁的資訊紀錄在電腦裡,方便使用者讀取上一次的紀錄,其他詳細的見相關連結

Cookie 的相關介紹

w3schools

伍新華先生的介紹

Tutorial: JavaScript and Cookies

在瀏覽器 觀看cookie紀錄
  • FireFox ︰工具 ->選項->個人隱私-> 顯示cookie
  • Google 瀏覽器上 ︰選項->進階選項-> 顯示cookie

2009年5月13日 星期三

java upload file to google document and set share friend

有時候要上傳檔案又要設定分享的朋友, 但分享再往頁上設定還真的給他有點慢 ,所以就寫了一個程式來加速吧


需要的liberaey
google data api for java


要使用的話要修改幾個部份
1. 分享朋友清單
2. 使用者id
3. 使用者password
4. file 位置

在結束時我有列出 新檔案的url 方便直接去找

使用 java http Get( by AuthSub) 取得 google document list

這個範例是利用http get 的 request 取得google document 的文件清單的XML

code 如下



import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;


public class RetrievingListDocumentDemo {


public static void main(String[] args) {

/// Set information
String UesrName="XXXX@gmail.com";
String Password="yourPassword";
String ServiceType="writely"; ///ServiceType see more in http://code.google.com/intl/zh-TW/apis/gdata/faq.html#clientlogin


/// Get Authorization
String Authorization;
Authorization=GetSub(UesrName,Password,ServiceType);

System.out.println("Auth is ");

/// split the message get the code
/// 原始碼= "Auth=................."
/// 將分割為兩段 "Auth="+"...............",取得後面的驗證碼
String[] Authw= Authorization.split("=");
System.out.println(Authw[1]);




URL url;

try {

/// Set url
url = new URL("http://docs.google.com/feeds/documents/private/full");

/// Open Connect
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
/// Set Request method and property
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "GoogleLogin auth="+Authw[1]);
conn.setRequestProperty("GData-Version", "2.0");

/// print sent respond code
/// 列出連線的回應碼如 200 OK
System.out.println(conn.getResponseCode());
System.out.println(conn.getResponseMessage());

/// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;

while ((line = rd.readLine()) != null) {
/// Process line...
/// line recode the response XML
System.out.println(line);

}
rd.close();


} catch (Exception e) {
e.printStackTrace();
}



}




/*
* 輸入使用者名稱(email)、密碼以及服務類型
* 取得 Auth 的驗證碼
*
*/
public static String GetSub(String UesrName, String Password, String ServiceType) {


/// Set String record auth
String Authorization="";

try {
/// Construct data
String data = "accountType=HOSTED_OR_GOOGLE"+
"&Email="+UesrName+
"&Passwd="+Password+
"&service="+ServiceType+
"&source=Gulp-CalGulp-1.05";



/// Open Connect
URL url = new URL("https://www.google.com/accounts/ClientLogin");
URLConnection conn = url.openConnection();

/// setDoOutput=true than can write message to sent request
conn.setDoOutput(true);
/// write message to the request
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();

/// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
int lineNumber=0;

while ((line = rd.readLine()) != null) {
/// Process line...
lineNumber++;
///System.out.println(line);
/// 第3行才是Auth
if(lineNumber==3)
Authorization=line;

}

wr.close();
rd.close();



} catch (Exception e) {
}
return Authorization;

}


}

2009年5月12日 星期二

使用 java http post 取得 google account (AuthSub)

透過輸入 google 帳號 或 google app 的帳號,控制再網頁上的資訊,包含新增、刪除、修改、讀取已有服務的內容
輸入的資訊有兩項,就是帳號和密碼

Sample Request by java


如果想要送的訊息如下
POST /accounts/ClientLogin HTTP/1.0
Content-type: application/x-www-form-urlencoded

accountType=HOSTED_OR_GOOGLE&Email=jondoe@gmail.com&Passwd=north23AZ&service=cl&
source=Gulp-CalGulp-1.05


可以使用以下的java code 去取得


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;


public class ClientLoginDemo {


public static void main(String[] args) throws IOException {


/// Set information
String UesrName="yourgmail@gmail.com"; ///must be set your gmail
String Password="yourcode"; ///must be set your gmail password
String ServiceType="cl"; ///ServiceType see more in http://code.google.com/intl/zh-TW/apis/gdata/faq.html#clientlogin



/// Construct data
String data = "accountType=HOSTED_OR_GOOGLE"+
"&Email="+UesrName+
"&Passwd="+Password+
"&service="+ServiceType+
"&source=Gulp-CalGulp-1.05";



URL url;
try {
url = new URL("https://www.google.com/accounts/ClientLogin");

/// Open Connect
URLConnection conn = url.openConnection();

/// setDoOutput=true than can write message to sent request
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();

/// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;

while ((line = rd.readLine()) != null) {
// Process line...
System.out.println(line);

}
wr.close();
rd.close();


} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



}

}


ClientLogin Response

成功的話回應如下

HTTP/1.0 200 OK
Server: GFE/1.3
Content-Type: text/plain

SID=DQAAAGgA...7Zg8CTN
LSID=DQAAAGsA...lk8BBbG
Auth=DQAAAGgA...dk3fA5N

上面的ClientLoginDemo 所印出的回應就包含 SID,LSID,Auth 三個回傳值
其中 Auth 的回傳值 可以用這個登入其他的google服務

2009年5月6日 星期三

設定 Google app engin Port in Eclipse

當要在 Eclipse 執行 Google app Engine 的時候,預設的port 是8080 但透過以下步驟可以改變執行的port

1. 專案 ->右鍵-> Properties

2. Run/Dubug Settings -> 選擇執行檔 -> Edit

3. Main-> 修改port

Google App Engine in Eclipse 讀jsp

在Eclipse 使用google app engine 的範例的時候,遇到了一個小問題,就是無法讀取jsp 的檔案;
在錯誤欄的顯示大概是: 沒有include 相對的jdk,所以無法辨識

解決的方式:
1. 上方工作列->Window->Preferences

2. java->Install JREs add



3. 基本上都有安裝jdk了,否則Eclipse也跑不動,所以新增路徑換一下
C:\Program Files\Java\jdk1.6.0_11\ , 隨版本不同而有差


4. 新增完畢,記得切換新的選項


就可以使用了

2009年5月4日 星期一

google talk 監聽

測試code, 使用smack api 達成收google talk訊息的效果
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package IM;

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.MessageTypeFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;

/**
*
* @author 97100632
*/
public class MessageListener {
private static String username="XXXXXXXX@gmail.com";
private static String password="Password";

ConnectionConfiguration connConfig;
XMPPConnection connection;

public MessageListener()throws XMPPException{
connConfig =new ConnectionConfiguration("talk.google.com",5222,"gmail.com");
connection =new XMPPConnection(connConfig);
connection.connect();
connection.login(username, password);

// Next, create a packet listener. We use an anonymous inner class for brevity.
PacketListener myListener = new PacketListener() {
public void processPacket(Packet packet){
Message message =(Message)packet;
System.out.println("Message From "+message.getFrom()+" : " +message.getBody() );
}
};

PacketFilter fliter =new MessageTypeFilter(Message.Type.chat);
connection.addPacketListener(myListener, fliter);


}

public void sendMessage(String to,String message){
Message msg = new Message(to, Message.Type.chat);
msg.setBody(message);
connection.sendPacket(msg);
}

public void disconnect(){
connection.disconnect();
}




public static void main(String[] args) throws XMPPException, InterruptedException{

MessageListener messageListener =new MessageListener();
/// 要傳給誰訊息
messageListener.sendMessage("Friend@gmail.com", "Hello safasgasga");


Thread.sleep(40000);

//messageListener.disconnect();

}


}