2015年1月3日 星期六

Java專有名詞: DAO

原文出處: 王朝網路 :Java入門:淺談DAO模式
http://tc.wangchao.net.cn/bbs/detail_742251.html

DAO : Data access object     (Struts Hibernate) 數據訪問 interface

DAO是Data Access Object資料庫訪問的接口,資料庫訪問:故名思義就是與資料庫庫打交道。夾在業務邏輯與資料庫資源中間。
  DAO的功能:
  1. DAO用來封裝Data Source的..就比如,Connection conn = DAOFacotry.createConnection()..
  就可以把Driver. URL. username, passpword這一些放在DAO中
  以後要更改數據庫的類型.比如要把MSSQL換成Oracle的話..只需要更改DAOFacory裏面的getConnection()裏面的Driver.URL.之類的..
  2. DAO也是把對數據庫的操作(比如最基本的CRUD操作)全部封裝在裏面..
  比如說你要你要插入一個新的用戶..那麽.在DAO中我們只需要提供一個insertUser(User user)這一個方法就可以了..具體的操作是在DAO中實現的...
  那麽對于要調用DAO的時候.我們只要知道insertUser(User)是用來插入一個新的用戶...而不需要知道是如何實現的。
  一般 DAO是與Abstract Factory模式一起來用的...

2015年1月2日 星期五

Google Chrome 瀏覽器開啟新分頁

在一般瀏覽器以Javascript設計開啟新視窗,
使用 window.open( url , "windown_name", "視窗狀態列設定"); 就可達成,
但在 Google Chrome 瀏覽器卻失效( Google Chrome Default 是自動阻擋新視窗)
但可開啟新分頁, 只要調整 javascript 語法即可
 var newwin = window.open();   //此行一定要如此書寫,否則失效
 newwin.location= url;   // url是 cgi 程式或者超連結 html




PhpMyAdmin 無法看資料庫結構的問題解決

無論是單獨安裝 phpmyadmin 或者套件安裝 WAMP ,這個問題皆會存在
原因是 PHP5以後 與作業系統 windows 7/ Linux 版本相容問題

解決方法:
在phpmyadmin 安裝目錄,找到 Util.class.php 這個檔案
如: wamp 之 D:\wamp\apps\phpmyadmin4.1.14\libraries\Util.class.php
修改如下
找到
return strftime($date, $timestamp);
改為
return date("Y-m-d: H:i:s" , $timestamp);

2015年1月1日 星期四

Javamail for google

原文出處: 龍貓 的心情日記
http://supermand9362787.wordpress.com/2008/11/02/javamail-for-google/

利用JavaMail收/發Gmail郵件(SSL)

Gmail目前已經啟用了POP3和SMTP服務,具體情況請看 http://www.javayou.com/showlog.jspe?log_id=490
與其他郵箱不同的是Gmail提供的POP3和SMTP是使用安全套接字層SSL的,因此常規的JavaMail程序是無法收發郵件的,下面是使用JavaMail如何收取Gmail郵件以及發送郵件的代碼:
1. 郵件收取
package lius.javamail.ssl;
import java.io.UnsupportedEncodingException;
import java.security.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;
/**
* 用於收取Gmail郵件
* @author Winter Lau
*/
public class GmailFetch {
public static void main(String argv[]) throws Exception {
  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.pop3.socketFactory.class", SSL_FACTORY);
  props.setProperty("mail.pop3.socketFactory.fallback", "false");props.setProperty("mail.pop3.port", "995");
  props.setProperty("mail.pop3.socketFactory.port", "995");
  //以下步驟跟一般的JavaMail操作相同
  Session session = Session.getDefaultInstance(props,null);
  //請將紅色部分對應替換成你的郵箱帳號和密碼
  URLName urln = new URLName("pop3","pop.gmail.com",995,null,"[郵箱帳號]", "[郵箱密碼]");
  Store store = session.getStore(urln);
  Folder inbox = null;
  try {
      store.connect();
      inbox = store.getFolder("INBOX");
      inbox.open(Folder.READ_ONLY);
      FetchProfile profile = new FetchProfile();
      profile.add(FetchProfile.Item.ENVELOPE);
      Message[] messages = inbox.getMessages();
      inbox.fetch(messages, profile);
      System.out.println("收件箱的郵件數:" + messages.length);
      for (int i = 0; i < messages.length; i++) {
         //郵件發送者
         String from = decodeText(messages[i].getFrom()[0].toString());
         InternetAddress ia = new InternetAddress(from);
         System.out.println("FROMia.getPersonal()+'(‘+ia.getAddress()+’)’);
         //郵件標題
         System.out.println("TITLEmessages[i].getSubject());
         //郵件大小
         System.out.println("SIZEmessages[i].getSize());
         //郵件發送時間
         System.out.println("DATEmessages[i].getSentDate());
     }
   } finally {
     try {
         inbox.close(false);
     } catch (Exception e) {}
         try {
             store.close();
         } catch (Exception e) {}
     }
   }

   protected static String decodeText(String text)
         throws UnsupportedEncodingException {
    if (text == null)
       return null;
    if (text.startsWith("=?GB") || text.startsWith("=?gb"))
        text = MimeUtility.decodeText(text);
    else
         text = new String(text.getBytes("ISO8859_1"));
     return text;
   }
}
2. 發送郵件
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.authrue");
      final String username = "[郵箱帳號]";
      final String password = "[郵箱密碼]";
      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 + "@mo168.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.");
 }
}

手動安裝MySQL on Windows

下載 MySQL for Zip File
http://dev.mysql.com/downloads/mysql/


  1.解壓縮 mysql-5.6.22-win32.zip
 2.將預設的 my-default.ini 改為 my.ini
 3.修改 my.ini:
   設定 MySQL 的執行路徑及資料庫存放路徑(x:為Driver Letter):
   basedir = x:\mysql
   datadir = x:\mysql\data
 4.安裝服務(Windows平台):
      安裝Service: x:\mysql\bin\mysqld --install MySQL
      移除Service: x:\mysql\bin\mysqld --remove      
 5.啟動服務:
    x:\>NET START MYSQL  
    或 x:\>SC start MYSQL
    或用服務管理員來啟動 MySQL

使用 Eclipse 開發Servlet 或 JSP : 安裝篇

下載安裝 JDK7
http://www.oracle.com/technetwork/java/javase/downloads/index.html










































下載安裝 Eclipse Luna 4.4 (For Java EE)
https://eclipse.org/downloads/












下載安裝 Tomcat
http://tomcat.apache.org/download-70.cgi

下載  Zip 檔案 -) 解壓與更名至 x:\Tomcat7

























下載安裝 Tomcat Eclipse Plugin
http://www.eclipsetotale.com/tomcatPlugin.html
選擇適合 Eclipse Luna 4.4 版本 Plugin 下載


























解開 tomcatPluginV331.zip









將解開之 jar 檔 copy至 eclipse 目錄 plugins 檔案夾之下即可




















設定 Tomcat Eclipse Plugin
Window -) Preferences -)



Tomcat -) 選擇 Version 7.x -) Tomcat Home 填入 x:\Tomcat7




















設定 Tomcat 伺服器
Windows -) Show view -) Other -) Server -) Servers





















完成後會在Eclipse開發視窗中出現 Servers 顯示Tab,然後在這視窗按右鍵
-)New -) Server





















選擇 Tomcat7 -) 填入tomcat path



























出現下圖即完成設定











在Google Blog 網頁中嵌入顯示程式碼

原文出處:符碼記憶

http://www.ewdna.com/2012/02/google-code-prettify.html

在網頁中嵌入顯示程式碼:CSS Block:
http://www.ewdna.com/2012/02/css-block.html

範例
prettyprint 風格
public class HelloWorld {

    public static void main (String[] args) {
        System.out.println("Hello, world!");
    }
}
codeblock and prettyprint 風格
public class HelloWorld {

    public static void main (String[] args) {
        System.out.println("Hello, world!");
    }
}
步驟一
嵌入步驟(以Blogger為例):
第一步:
進入Blogger後台(登入後在Toolbar右上點選設計),
選範本 -> 選修改HTML -> 繼續。
















新增一段JavaScript程式碼
<style>
.post .codeblock {
display: block; /* fixes a strange ie margin bug */
font-family: Courier New;
font-size: 10pt;
overflow:auto;
background: #f0f0f0 url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAASwCAYAAAAt7rCDAAAABHNCSVQICAgIfAhkiAAAAQJJREFUeJzt0kEKhDAMBdA4zFmbM+W0upqFOhXrDILwsimFR5pfMrXW5jhZr7PwRlxVX8//jNHrGhExjXzdu9c5IiIz+7iqVmB7Hwp4OMa2nhhwN/PRGEMBh3Zjt6KfpzPztxW9MSAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzB8HS+J9kUTvzEDMwAAAABJRU5ErkJggg==) left top repeat-y;
border: 1px solid #ccc;
padding: 10px 10px 10px 21px;
max-height:1000px;
line-height: 1.2em;
}
</style>

如果要顯示的是程式碼,若要保持程式的排版,建議使用 <pre> 這個標籤, 如下面這段程式:
<pre class='codeblock'>
public class HelloWorld {

    public static void main (String[] args) {
        System.out.println("Hello, world!");
    }
}
</pre>

Java 不同編碼字串, 其字串長度大小計算

以 Java 開發專案, 在 DAO 寫入資料庫時, 常遇到JAVA 字串與資料庫編碼不一致, 有時會產生字串過長,導致無法寫入資料庫的情況. 這時就要在入庫前, 先驗證 JAVA 編碼字串是否超出資料庫欄位長度 JAVA 依 不同編碼, 其長度是不一樣的 如: ...