1. Gmap API 的申請
http://code.google.com/intl/zh-TW/apis/maps/signup.html
你必須要申請API,Google才知道你是誰,當然 Google 也可由此知道誰在偷偷用他的地圖服務,聽 起來很可怕吧,沒有做什麼壞事情就不用想太多。
例如:我申請一組 www.xxx.com
GMap會給我 ABQIAAAAb37BxmszgAN90DlQF2kuXxQK7D9hMb7A52EddnovcMgPuF8behQgpef_nt5fmn
我當然也不可能貼一組可以用的,自己去申請一下吧
2. Gmap提供幾種使用Map的方式
2.1 JavaScript Maps
2.2 Maps API for Flash
2.3 HTTP Service
我自己沒使用過 Flash版的,所以以下我就先不介紹
Google API Reference
http://code.google.com/intl/zh-TW/apis/maps/documentation/javascript/v2/reference.html
熊爸天下程式筆記
2010年8月11日 星期三
Gmap Reverse Geocoding
1. Reverse Geocoding
(反向地理編碼說明 http://code.google.com/intl/zh-TW/apis/maps/documentation/javascript/v2/services.html#ReverseGeocoding)
以上此做法是在Client 去執行的,所以前端要做大量住址反查時,不是一個最佳解法
以下為官網的Sample
var map;
var geocoder;
var address;
function initialize() {
map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(40.730885,-73.997383), 15);
map.addControl(new GLargeMapControl);
GEvent.addListener(map, "click", getAddress);
geocoder = new GClientGeocoder();
}
function getAddress(overlay, latlng) {
if (latlng != null) {
address = latlng;
geocoder.getLocations(latlng, showAddress);
}
}
function showAddress(response) {
map.clearOverlays();
if (!response || response.Status.code != 200) {
alert("Status Code:" + response.Status.code);
} else {
place = response.Placemark[0];
point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindowHtml(
'orig latlng:' + response.name + '
' +
'latlng:' + place.Point.coordinates[1] + "," + place.Point.coordinates[0] + '
' +
'Status Code:' + response.Status.code + '
' +
'Status Request:' + response.Status.request + '
' +
'Address:' + place.address + '
' +
'Accuracy:' + place.AddressDetails.Accuracy + '
' +
'Country code: ' + place.AddressDetails.Country.CountryNameCode);
}
}
2. Google Maps API Web Services
參考資料:http://code.google.com/intl/zh-TW/apis/maps/documentation/geocoding/
說明:
Google Maps API Web Services
1. http://maps.google.com/maps/api/geocode/json?latlng=22.67744,120.34423&sensor=false®ion=tw&language=zh-TW
2. 可透過HttpClient 將url 送出,可以收到一個 JSON
3. 再透過 JSON去拆解 Google 吐回來的 JSON字串
/**
*
* @author 熊爸天下
*/
public class GmapUtil {
private static final String gmapUrl = "http://maps.google.com/maps/api/geocode/json?";
/**
* 經緯度反查住址
* @param Latitude 東經
* @param longitude 北緯
* @return 回傳住址
* @throws UnsupportedEncodingException
* @throws IOException
*/
public String LatlonToAddress(String Latitude, String longitude) throws UnsupportedEncodingException, IOException {
//ex:http://maps.google.com/maps/api/geocode/json?latlng=22.67744,120.34423&sensor=false®ion=tw&language=zh-TW
StringBuffer url = new StringBuffer();
url.append(gmapUrl);
url.append("latlng=").append(Latitude).append(",").append(longitude);
url.append("&sensor=false®ion=tw&language=zh-TW");
byte[] addr = getJsonObject(url.toString());
return this.getMapAddress(SplitArrayObject(addr));
}
private byte[] getJsonObject(String urlStr) throws UnsupportedEncodingException, IOException {
HttpClient httpClient = new HttpClient();
HttpConnectionManagerParams managerParams = httpClient.getHttpConnectionManager().getParams();
// UTF-8
managerParams.setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
//設定connect時間(單位毫秒)
managerParams.setConnectionTimeout(10000);
//設定connect Timeout時間(單位毫秒)
managerParams.setSoTimeout(20000);
GetMethod method = new GetMethod(urlStr);
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
int statusCode = 0;
try {
statusCode = httpClient.executeMethod(method);
} catch (IOException ex) {
ex.printStackTrace();
}
byte[] responseBody = null;
if (statusCode != HttpStatus.SC_OK) {
} else {
try {
responseBody = method.getResponseBody();
} catch (IOException e) {
}
method.releaseConnection();
}
return responseBody;
}
public String SplitArrayObject(byte[] responseBody) throws UnsupportedEncodingException {
String json = "";
String address = "";
if (responseBody.length == 0) {
return "";
}
json = new String(responseBody, "UTF-8").trim();
return json;
}
public String getMapAddress(String json) throws UnsupportedEncodingException {
String address = "";
if (!json.equals("") && !json.equals("{}")) {
JSONArray obj = null;
try {
obj = new JSONArray();
obj.add(json);
String rs = obj.getJSONObject(0).getString("results");
JSONArray obj_detail = new JSONArray();
obj_detail.add(rs);
address = obj_detail.getJSONArray(0).getJSONObject(0).getString("formatted_address");
} catch (JSONException e) {
}
}
return address;
}
public static void main(String[] arg) {
GmapUtil gu = new GmapUtil();
try {
System.out.println(gu.LatlonToAddress("22.63434", "120.33406"));
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(GmapUtil.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(GmapUtil.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
(反向地理編碼說明 http://code.google.com/intl/zh-TW/apis/maps/documentation/javascript/v2/services.html#ReverseGeocoding)
以上此做法是在Client 去執行的,所以前端要做大量住址反查時,不是一個最佳解法
以下為官網的Sample
var map;
var geocoder;
var address;
function initialize() {
map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(40.730885,-73.997383), 15);
map.addControl(new GLargeMapControl);
GEvent.addListener(map, "click", getAddress);
geocoder = new GClientGeocoder();
}
function getAddress(overlay, latlng) {
if (latlng != null) {
address = latlng;
geocoder.getLocations(latlng, showAddress);
}
}
function showAddress(response) {
map.clearOverlays();
if (!response || response.Status.code != 200) {
alert("Status Code:" + response.Status.code);
} else {
place = response.Placemark[0];
point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindowHtml(
'orig latlng:' + response.name + '
' +
'latlng:' + place.Point.coordinates[1] + "," + place.Point.coordinates[0] + '
' +
'Status Code:' + response.Status.code + '
' +
'Status Request:' + response.Status.request + '
' +
'Address:' + place.address + '
' +
'Accuracy:' + place.AddressDetails.Accuracy + '
' +
'Country code: ' + place.AddressDetails.Country.CountryNameCode);
}
}
2. Google Maps API Web Services
參考資料:http://code.google.com/intl/zh-TW/apis/maps/documentation/geocoding/
說明:
Google Maps API Web Services
1. http://maps.google.com/maps/api/geocode/json?latlng=22.67744,120.34423&sensor=false®ion=tw&language=zh-TW
2. 可透過HttpClient 將url 送出,可以收到一個 JSON
3. 再透過 JSON去拆解 Google 吐回來的 JSON字串
/**
*
* @author 熊爸天下
*/
public class GmapUtil {
private static final String gmapUrl = "http://maps.google.com/maps/api/geocode/json?";
/**
* 經緯度反查住址
* @param Latitude 東經
* @param longitude 北緯
* @return 回傳住址
* @throws UnsupportedEncodingException
* @throws IOException
*/
public String LatlonToAddress(String Latitude, String longitude) throws UnsupportedEncodingException, IOException {
//ex:http://maps.google.com/maps/api/geocode/json?latlng=22.67744,120.34423&sensor=false®ion=tw&language=zh-TW
StringBuffer url = new StringBuffer();
url.append(gmapUrl);
url.append("latlng=").append(Latitude).append(",").append(longitude);
url.append("&sensor=false®ion=tw&language=zh-TW");
byte[] addr = getJsonObject(url.toString());
return this.getMapAddress(SplitArrayObject(addr));
}
private byte[] getJsonObject(String urlStr) throws UnsupportedEncodingException, IOException {
HttpClient httpClient = new HttpClient();
HttpConnectionManagerParams managerParams = httpClient.getHttpConnectionManager().getParams();
// UTF-8
managerParams.setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
//設定connect時間(單位毫秒)
managerParams.setConnectionTimeout(10000);
//設定connect Timeout時間(單位毫秒)
managerParams.setSoTimeout(20000);
GetMethod method = new GetMethod(urlStr);
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
int statusCode = 0;
try {
statusCode = httpClient.executeMethod(method);
} catch (IOException ex) {
ex.printStackTrace();
}
byte[] responseBody = null;
if (statusCode != HttpStatus.SC_OK) {
} else {
try {
responseBody = method.getResponseBody();
} catch (IOException e) {
}
method.releaseConnection();
}
return responseBody;
}
public String SplitArrayObject(byte[] responseBody) throws UnsupportedEncodingException {
String json = "";
String address = "";
if (responseBody.length == 0) {
return "";
}
json = new String(responseBody, "UTF-8").trim();
return json;
}
public String getMapAddress(String json) throws UnsupportedEncodingException {
String address = "";
if (!json.equals("") && !json.equals("{}")) {
JSONArray obj = null;
try {
obj = new JSONArray();
obj.add(json);
String rs = obj.getJSONObject(0).getString("results");
JSONArray obj_detail = new JSONArray();
obj_detail.add(rs);
address = obj_detail.getJSONArray(0).getJSONObject(0).getString("formatted_address");
} catch (JSONException e) {
}
}
return address;
}
public static void main(String[] arg) {
GmapUtil gu = new GmapUtil();
try {
System.out.println(gu.LatlonToAddress("22.63434", "120.33406"));
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(GmapUtil.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(GmapUtil.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
2008年9月8日 星期一
Struts2 入門(一)
struts2 環境配置有空再寫,先來記錄一下實務coding 的部份
這邊是單純的query及insert,使用hibernate來操作DB 的部份。
一、 Java (Action的部份)
package com.blog;
import com.hibernate.hibernateUtil;
import com.opensymphony.xwork2.ActionContext;
import java.util.Map;
import org.hibernate.Session;
import org.hibernate.Transaction;
import orm.User;
import com.opensymphony.xwork2.ActionSupport;
import java.util.List;
import org.hibernate.Query;
public class blogAction extends ActionSupport {
public String execute() throws Exception {
init();
if (this.action != null && this.action.equals("a")) {
if (this.username != null && this.username != "") {
System.out.println("Ready to do save users");
this.SaveUsers();
}
} else if (this.action != null && this.action.equals("q")) {
System.out.println("Ready to do query users");
queryUser();
}
return "blog_add";
}
//初始化
private void init(){
session = ActionContext.getContext().getSession();
session.clear();
}
// Save Data To Pojo
private void SaveUsers() {
User user = new User();
user.setName(this.username);
user.setAge(age);
Session session = hibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();
}
//query Data
private void queryUser() {
Session s = hibernateUtil.getSessionFactory().openSession();
Query q = s.createQuery("from User");
List l = q.list();
//set session
//ActionContext.getContext().getSession().put("blog", l);
session.put("blog", l);
// Map s =getSession();
// s.put("blog", age);
// this.setSession(s);
// Map s = ActionContext.getContext().getSession();
// s.put("blogSession", l);
// for(java.util.Iterator it = l.iterator(); it.hasNext();){
// User user = (User)it.next();
//System.out.println("User:"+user.getName());
// System.out.println(it.next());
// }
s.close();
}
private String username;
private int age;
private String action;
private Map session;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
}
二、 JSP (View的部份)
<%--
Created on : 2008/9/8, 下午 02:33:31
Author : jimmy
--%>
< form action="blog.action" method="post">
< input type="text" name="username" value="" />
< input type="text" name="age" value="" />
< input type="hidden" name="action" value="a">
< input type="submit" value="Add" name="Add" />
< /form>
< %
if( s ession.getAttribute("blog")!=null){
java.util.List blog = (j ava.util.List)session.getAttribute("blog");
if(blog!=null){
for(int i = 0 ; i < blog.size();i++){
out.println("");
orm.User user = (orm.User) blog.get(i);
out.println(""+user.getId()+" ");
out.println(""+user.getName()+" ");
out.println(""+user.getAge()+" ");
out.println(""+" ");
out.println(" ");
} } }
%>
< /table>
這邊是單純的query及insert,使用hibernate來操作DB 的部份。
一、 Java (Action的部份)
package com.blog;
import com.hibernate.hibernateUtil;
import com.opensymphony.xwork2.ActionContext;
import java.util.Map;
import org.hibernate.Session;
import org.hibernate.Transaction;
import orm.User;
import com.opensymphony.xwork2.ActionSupport;
import java.util.List;
import org.hibernate.Query;
public class blogAction extends ActionSupport {
public String execute() throws Exception {
init();
if (this.action != null && this.action.equals("a")) {
if (this.username != null && this.username != "") {
System.out.println("Ready to do save users");
this.SaveUsers();
}
} else if (this.action != null && this.action.equals("q")) {
System.out.println("Ready to do query users");
queryUser();
}
return "blog_add";
}
//初始化
private void init(){
session = ActionContext.getContext().getSession();
session.clear();
}
// Save Data To Pojo
private void SaveUsers() {
User user = new User();
user.setName(this.username);
user.setAge(age);
Session session = hibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();
}
//query Data
private void queryUser() {
Session s = hibernateUtil.getSessionFactory().openSession();
Query q = s.createQuery("from User");
List l = q.list();
//set session
//ActionContext.getContext().getSession().put("blog", l);
session.put("blog", l);
// Map s =getSession();
// s.put("blog", age);
// this.setSession(s);
// Map s = ActionContext.getContext().getSession();
// s.put("blogSession", l);
// for(java.util.Iterator it = l.iterator(); it.hasNext();){
// User user = (User)it.next();
//System.out.println("User:"+user.getName());
// System.out.println(it.next());
// }
s.close();
}
private String username;
private int age;
private String action;
private Map session;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
}
二、 JSP (View的部份)
<%--
Created on : 2008/9/8, 下午 02:33:31
Author : jimmy
--%>
< form action="blog.action" method="post">
< input type="text" name="username" value="" />
< input type="text" name="age" value="" />
< input type="hidden" name="action" value="a">
< input type="submit" value="Add" name="Add" />
< /form>
< %
if( s ession.getAttribute("blog")!=null){
java.util.List blog = (j ava.util.List)session.getAttribute("blog");
if(blog!=null){
for(int i = 0 ; i < blog.size();i++){
out.println("
orm.User user = (orm.User) blog.get(i);
out.println("
out.println("
out.println("
out.println("
out.println("
} } }
%>
< /table>
2008年9月4日 星期四
SQL常用 語法
參考來源:
http://www.1keydata.com/tw/sql/sql-create-index.html
http://www.tizag.com/mysqlTutorial/mysql-index.php
1. Create index
CREATE INDEX date_index ON bvl_txnlist(txndate_u,txndate_d)
2. Alter Table
2.1 修改欄位名稱(將txndate 改為 txndate_u)
ALTER table bvl_txnlist change txndate txndate_u char(50)
2.2 修改欄位資料型態(將txndate 資料型態改為 varchar(30))
ALTER table bvl_txnlist modify txndate varchar(30)
http://www.1keydata.com/tw/sql/sql-create-index.html
http://www.tizag.com/mysqlTutorial/mysql-index.php
1. Create index
CREATE INDEX date_index ON bvl_txnlist(txndate_u,txndate_d)
CREATE TABLE bvl_txnlist (
name VARCHAR(50),
employeeID INT, INDEX (employeeID)
)
2. Alter Table
2.1 修改欄位名稱(將txndate 改為 txndate_u)
ALTER table bvl_txnlist change txndate txndate_u char(50)
2.2 修改欄位資料型態(將txndate 資料型態改為 varchar(30))
ALTER table bvl_txnlist modify txndate varchar(30)
2008年8月27日 星期三
Mac無法開機時的處理
資料來源: http://ca96.blogspot.com/2008/04/mac.html
當面臨到無法開機的情況時,首先要判斷的是屬於下列哪一種情況?
1. 空白的藍色或灰色畫面:可能是由磁碟權限、第三方軟體、或偶發的硬體問題所造成的。適用招式:ㄧ、二、三、四
2. 出現 "NO"、壞掉的資料夾或閃動的問號:這是由於 Mac 找不到開機所需的系統,可能是磁碟問題所致。適用招式:三、四
3. 黑色畫面,沒有聲音:你所碰到的可能是電力問題、主機板上的電池壞掉、故障的記憶體或其他的硬體問題
。第一招:以安全模式開機,開機快捷鍵:Shift
Step1: 開機時按住 Shift 鍵不放
Step2: 直到螢幕上出現灰色蘋果標誌及旋轉的齒輪時才放開Shift鍵
Step3: 如果順利啟動,“Safe Boot”字樣應該會在啟動時出現或在顯示於登入視窗中(以安全模式啟動會比一般啟動花更多的時間,因為系統會為開機磁碟進行磁軌檢查。耐著性子吧!若要離開安全模式,將電腦重新開機,並且不要在開機時按任何鍵即可。 )
。第二招:單一使用者模式,開機快捷鍵:Command(蘋果鍵) + S
Step1: 開機時按住 Command + S。如果看到黑底白字的文字模式,別嚇到了,這是正常的
Step2: 在游標後輸入 fsck - fy
Step3: 之後按 return 鍵。如果回覆的訊息是 " File System was Modified ",重複第二步驟直到系統回覆 " No problems were found "
Step4: 輸入 reboot 並按 return 鍵。(之後電腦就會重新開機了,如果順利就會進入系統,如果還是不行,那就試試其他的招式吧!)
其他解決方案:AppleJack(注1)
如果你在你的MAC 出問題之前曾安裝過 AppleJack,那麼過程就會簡單許多
1.輸入"applejack auto restart",之後按 return 鍵
2.稍待個幾分鐘,你的 MAC 將會重新開機並完成所有的修護作業
。第三招:用蘋果 CD/DVD 開機,開機快捷鍵﹕C
Step1: 放入 Mac OS X 安裝光碟(開機時壓住滑鼠不放即可打開光碟托盤[退片])
Step2: 開機時按住 C 鍵,直到灰色蘋果標誌出現在螢幕上才放手
Step3: Mac OS X 10.4.x的使用者:從選單列選擇「工具程式」> 「磁碟工具程式」
Step4: 從左側列出的硬碟圖示中選擇自己的硬碟,然後單點修理工具分頁中的「修復磁碟」。
Step5: 磁碟回報正常後,單點「修復磁碟權限」
Step6: 之後重開機,並在開機時不要按任何按鍵
。第四招:硬碟模式,開機快捷鍵:T
當其他的招式都失效時,硬碟模式可以讓你透過其他電腦來存取你的硬碟。這樣一來你就可以執行一些診斷、維護或者備份重要的工作檔案。
Step1: 開機時按住 T 鍵,直到看見 FireWire 圖示才放開。
Step2: 用一條 FireWire 線將故障的 Mac 接上正常的 Mac。
Step3: 開啟正常 Mac 上的磁碟工具程式 ( 位於應用程式 / 工具程式 )。
Step4: 從左側列出的硬碟圖示中選擇故障的硬碟,然後單點修理工具分頁中的「修復磁碟」。
Step5: 如果在正常 Mac 的桌面上可以看的到故障 Mac 的硬碟圖示,那麼說不定還可以把一些重要的檔案復原或者備份起來。
(注1):AppleJack 是一個專為 MAC OSX 開發的系統維護工具,當無法進入系統的圖形介面而手邊又沒有可開機的光碟時,AppleJack 可以在單一使用者模式下,以選單的方式協助使用者進行障礙排除。
當面臨到無法開機的情況時,首先要判斷的是屬於下列哪一種情況?
1. 空白的藍色或灰色畫面:可能是由磁碟權限、第三方軟體、或偶發的硬體問題所造成的。適用招式:ㄧ、二、三、四
2. 出現 "NO"、壞掉的資料夾或閃動的問號:這是由於 Mac 找不到開機所需的系統,可能是磁碟問題所致。適用招式:三、四
3. 黑色畫面,沒有聲音:你所碰到的可能是電力問題、主機板上的電池壞掉、故障的記憶體或其他的硬體問題
。第一招:以安全模式開機,開機快捷鍵:Shift
Step1: 開機時按住 Shift 鍵不放
Step2: 直到螢幕上出現灰色蘋果標誌及旋轉的齒輪時才放開Shift鍵
Step3: 如果順利啟動,“Safe Boot”字樣應該會在啟動時出現或在顯示於登入視窗中(以安全模式啟動會比一般啟動花更多的時間,因為系統會為開機磁碟進行磁軌檢查。耐著性子吧!若要離開安全模式,將電腦重新開機,並且不要在開機時按任何鍵即可。 )
。第二招:單一使用者模式,開機快捷鍵:Command(蘋果鍵) + S
Step1: 開機時按住 Command + S。如果看到黑底白字的文字模式,別嚇到了,這是正常的
Step2: 在游標後輸入 fsck - fy
Step3: 之後按 return 鍵。如果回覆的訊息是 " File System was Modified ",重複第二步驟直到系統回覆 " No problems were found "
Step4: 輸入 reboot 並按 return 鍵。(之後電腦就會重新開機了,如果順利就會進入系統,如果還是不行,那就試試其他的招式吧!)
其他解決方案:AppleJack(注1)
如果你在你的MAC 出問題之前曾安裝過 AppleJack,那麼過程就會簡單許多
1.輸入"applejack auto restart",之後按 return 鍵
2.稍待個幾分鐘,你的 MAC 將會重新開機並完成所有的修護作業
。第三招:用蘋果 CD/DVD 開機,開機快捷鍵﹕C
Step1: 放入 Mac OS X 安裝光碟(開機時壓住滑鼠不放即可打開光碟托盤[退片])
Step2: 開機時按住 C 鍵,直到灰色蘋果標誌出現在螢幕上才放手
Step3: Mac OS X 10.4.x的使用者:從選單列選擇「工具程式」> 「磁碟工具程式」
Step4: 從左側列出的硬碟圖示中選擇自己的硬碟,然後單點修理工具分頁中的「修復磁碟」。
Step5: 磁碟回報正常後,單點「修復磁碟權限」
Step6: 之後重開機,並在開機時不要按任何按鍵
。第四招:硬碟模式,開機快捷鍵:T
當其他的招式都失效時,硬碟模式可以讓你透過其他電腦來存取你的硬碟。這樣一來你就可以執行一些診斷、維護或者備份重要的工作檔案。
Step1: 開機時按住 T 鍵,直到看見 FireWire 圖示才放開。
Step2: 用一條 FireWire 線將故障的 Mac 接上正常的 Mac。
Step3: 開啟正常 Mac 上的磁碟工具程式 ( 位於應用程式 / 工具程式 )。
Step4: 從左側列出的硬碟圖示中選擇故障的硬碟,然後單點修理工具分頁中的「修復磁碟」。
Step5: 如果在正常 Mac 的桌面上可以看的到故障 Mac 的硬碟圖示,那麼說不定還可以把一些重要的檔案復原或者備份起來。
(注1):AppleJack 是一個專為 MAC OSX 開發的系統維護工具,當無法進入系統的圖形介面而手邊又沒有可開機的光碟時,AppleJack 可以在單一使用者模式下,以選單的方式協助使用者進行障礙排除。
2008年8月11日 星期一
javaMail(一)
Setup
If you use Java 2 Platform,
Enterprise Edition (J2EE) 1.3, you're in luck: it includes JavaMail, so
no additional setup is required. If, however, you're running Java 2
Platform, Standard Edition (J2SE) 1.1.7 and upwards, and you want email
capability for your applications, download and install the following:
資料來源: http://www.javaworld.com/javaworld/jw-10-2001/jw-1026-javamail.html?
Sample
以下的範例,以gmail 為例package com.mail;
import java.security.Security;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class msgsendsample {
private static final String SMTP_HOST_NAME = "smtp.gmail.com";
private static final String SMTP_PORT = "465";
private static final String emailMsgTxt = "Test Message Contents";
private static final String emailSubjectTxt = "A test from gmail test.....";
private static final String emailFromAddress = "xxxx@gmail.com";
private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
private static final String[] sendTo = {"xxxx@gmail.com","xxxx@yahoo.com.tw"};
msgsendsample() {
}
public void sendMail() throws MessagingException {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
new msgsendsample().sendSSLMessage(sendTo, emailSubjectTxt,
emailMsgTxt, emailFromAddress);
System.out.println("Sucessfully Sent mail to All Users");
}
public void sendSSLMessage(String recipients[], String subject,
String message, String from) throws MessagingException {
boolean debug = true;
Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOST_NAME);
props.put("mail.smtp.auth", "true");
props.put("mail.debug", "true");
props.put("mail.smtp.port", SMTP_PORT);
props.put("mail.smtp.socketFactory.port", SMTP_PORT);
props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
props.put("mail.smtp.socketFactory.fallback", "false");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("xxxx", "xxxx"); //Gmail的帳號及密碼
}
});
session.setDebug(debug); // 方便Debug用
Message msg = new MimeMessage(session);
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++) {
addressTo[i] = new InternetAddress(recipients[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(message, "text/plain");
Transport.send(msg);
}
public static void main(String args[]) throws Exception {
msgsendsample ms = new msgsendsample();
ms.sendMail();
}
}
p.s 一開始我只下載了javamail 所以在run的過程當中會出現 java.lang.NoClassDefFoundError: javax/activation/DataSource ,後來下載 javaBean Activation Framework加到Lib之後就解決了
訂閱:
文章 (Atom)