2010年12月30日 星期四

Java send mail by Google App Engine

在 Google App Engine 中 有 內建 寄收信的功能,所以也可以利用 GAE 的內建函式達成寄收信的功能。

以下是我參考GAE 修改的code, 是一個servlet 所以還要記得設定web.xml 這裡就不多說了

注意這裡 setFrom 要用GAE 開發者的gmail 不然是會寄不出去也不會有錯誤訊息



import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



@SuppressWarnings("serial")
public class SendMail extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
req.setCharacterEncoding("UTF-8");


Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

String msgBody = "Hello ";

try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("Admin@gmail.com"));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress("xxx@gmail.com", "Mr. User"));
msg.setSubject("Your Example.com account has been activated");
msg.setText(msgBody);
Transport.send(msg);

} catch (AddressException e) {
// ...
} catch (MessagingException e) {
// ...
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println("Message sent.");
resp.setContentType("text/plain");
resp.getWriter().println("Message sent.");
}

}






附註 InternetAddress函式 說明


new InternetAddress("email","想要給的名稱");







詳細可以參考 GAE 的說明

Java send mail

若要利用 java 來寄收信的話, 可以先下載 java mail api , 之後記得吧 javamail-1.x.x.jar 加入參考就是。

下面我從 郵件技術資訊網 轉錄一支 send mail 的 範例 code

紅色部份記得修改


package lius.javamail.ssl;

import java.security.Security;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
* 使用Gmail发送邮件
* @author Winter Lau
*/
public class GmailSender {

public static void main(String[] args) throws AddressException, MessagingException {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
// Get a Properties object
Properties props = System.getProperties();
props.setProperty("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.auth", "true");
final String username = "Gmail帳號";
final String password = "Gmail信箱密碼";
Session session = Session.getDefaultInstance(props, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}});

// -- Create a new message --
Message msg = new MimeMessage(session);

// -- Set the FROM and TO fields --
msg.setFrom(new InternetAddress(username + "@gmail.com"));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("收件人地址",false));
msg.setSubject("Hello");
msg.setText("How are you");
msg.setSentDate(new Date());
Transport.send(msg);

System.out.println("Message sent.");
}
}

轉貼 網頁圖表產生套件

查資料中找到幾個介紹關於網頁圖表的套件,
如下

  1. PHP 程式 學習 筆記本, 介紹幾個漂亮的圖表生成插件
  2. JavaScript Chart 函式庫整理
  3. 1stwebdesigner 5 Top jQuery Chart Libraries for Interactive Charts
  4. 前端觀察,6個jQuery圖表Web應用擴展
有些會有重複介紹到,目前個人我感覺比較會用的是下面兩個

  1. Google chart, 設定好要畫得資料就可以透過AJAX 傳回
  2. FusionCharts Free, 利用flash 畫圖的套件,還有jquery 的 plugin 版本,另外有付費的版本,不過free 版就很夠用了

2010年12月29日 星期三

轉貼 javaBean

  • 何謂JavaBean:一個可重覆使用且跨平台的套件(Package)(在JSP 2.0,使用Bean一定要加入package name)
  • JavaBean的特點:(1)是public類別
    (2)必須有一個無傳入參數的建構子(constructor)
    (3)設定或取得屬性時必須使用setXXX()和getXXX()的方法,意即在JavaBean內要有public getXXX()和
    public setXXX()的method
  • 如何使用JavaBean:(1)將原始碼編譯成.class,並放在application目錄下WEB-INFO/classes子目錄中(以下面的範例,
    BeanSample.class應放於WEB-INFO/classes/tw/edu/dwu/jspclass的子目錄下)
    (2)在JSP的網頁檔內以標籤存取JavaBean

轉貼自 http://hyh.mis.tsu.edu.tw/jsp/bean.htm



這裡也有相關的介紹
http://caterpillar.onlyfun.net/Gossip/ServletJSP/UseBeanSetPropertyGetProperty.html

2010年12月23日 星期四

轉錄 jQuery alert dialog

介紹一下 jQuery 的 外掛,可以自訂 alert 等提示的樣式(修改CSS),介紹網站在下面

http://labs.abeautifulsite.net/projects/js/jquery/alerts/demo/

2010年12月21日 星期二

javascript 動態增減減表格

雖然有查到許多資料像 document.getElementById("").RemoveChild() 的方式,不過是了半天是不出來,所以就用簡單的方式 修改 element 裡的 innerhtml 來達成我的目標


code 如下


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />



<title>Sample</title>

<script type="text/javascript">


var ItemCount=0;

var temp=new Array();


/*
Add Item field

*/

function addItem()
{

eval("document.getElementById('addButton"+ItemCount+"').style.visibility = \"hidden\";");
if(ItemCount!=0)
eval("document.getElementById('deleteButton"+ItemCount+"').style.visibility = \"hidden\";");



temp[ItemCount] = document.getElementById('ItemList').innerHTML;
ItemCount++;

document.getElementById('ItemList').innerHTML +=
"<br> <br> Item Id : <input name=\"ItemId"+ ItemCount +"\" type=\"text\" /> " +

"Item Aliases : <input name=\"ItemAliases"+ItemCount +"\" type=\"text\" /> " +

//<button id="addButton0" onclick="addItem()">ADD </button>

"<button id=\"addButton"+ ItemCount+ "\" onclick=\"addItem()\"> ADD</button>" +

"&nbsp; <button id=\"deleteButton"+ ItemCount+ "\" onclick=\"deleteItem()\"> delete</button>"


;



}


function deleteItem(){


ItemCount--;
document.getElementById('ItemList').innerHTML = temp[ItemCount];
// Set null
temp[ItemCount]=null;
//alert(ItemCount);
eval("document.getElementById('addButton"+ItemCount+"').style.visibility = \"visible\";");
if(ItemCount!=0)
eval("document.getElementById('deleteButton"+ItemCount+"').style.visibility =\"visible\";");

}




</script>


</head>
<body>



<div id="ItemList">
Item Id : <input name="ItemId0" type="text" />
Item Aliases : <input name="ItemAliases0" type="text" />

<button id="addButton0" onclick="addItem()">ADD </button>


</div>


</body>
</html>








我的範例, 裡面點 open 可以直接看
https://docs.google.com/leaf?id=0B_JOf_Tyv_f6ODI5M2QyZTgtNGU2ZC00NmQzLWIwMjktMWNmMDQxZjRkZjdm&sort=name&layout=list&num=50

2010年12月10日 星期五

轉錄 javascript Http post function

轉錄自
http://stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit

在 javascript 中 透過 function 的方式 來達成 http post 的功能

code 如下

輸入三個變數, url :目標的網址、nams : 參數名稱、 values : 參數值 ; 這裡參數名稱和值是一對一的關係 ,若包成一個物件的話會更完美,不過在此先用簡單的方式






function postToURL(url, names ,values )
{
var form = document.createElement('form');
form.action = url;
form.method = 'POST';



for (var i=0; i< names.length; i++)
{
var child = document.createElement('input');
child.type = "hidden";
child.name =names[i];
child.value = values[i];

form.appendChild(child);

}

document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}

2010年12月7日 星期二

轉錄 javascript 檢查 form 表單是否填寫

轉錄兩個範例

1. 使用JavaScript來判斷form表單是否有填寫!


2. 由表单中onsubmit="return false;"想到的



以下是我的註釋:

範例1. 利用 click function 後檢查完才執行 form 的 submit() 函式


範例2. 在form 中加入 onsubmit 的檢查函式 ,記得要用 onsubmit =" retrun check()" 才有檢查的作用


還有 若網頁東西太多 ,我的用法是 將 form 取一個 id 在用 document.getElementById('formId'); 的方式取出在呼叫form 裡面的變數和函式

2010年12月3日 星期五

轉錄 servlet 使用 session

Session 的定義如下(轉自 wiki ):
在電腦科學領域來說,尤其是在網路領域,會話(session)是一種持久網路協定,在使用者(或使用者代理)端和伺服器端之間建立關聯,從而起到交換資料包的作用機制,session在網路協定(例如telnet或FTP)中是非常重要的部分。

簡單的說就是使用者連線到伺服器上的一個協定紀錄,會儲存到伺服器上。


要在 servlet 使用 session 的話 必須 import javax.servlet.http.HttpSession;

語法如下

// create a session if one does not exist
// 需要使用 true 當作 getSession() 的參數
HttpSession session = req.getSession(true);



之後就可以照依般sesaion 的用法,可以參考 servlet 入門



若要在 google app engine 上使用的 話

在 ..\war\WEB-INF\appengine-web.xml 中
要加入下面這段 XML
<sessions-enabled>true</sessions-enabled>

才可以使用