Popular Posts
javax.net.ssl.SSLHandshakeException: Connection closed by peer in Android 5.0 Lollipop Recently, there is a error occurs when access website via ssl connection like below although it worked fine several days ago. // Enable SSL... Enable SSL connection for Jsoup import org.jsoup.Connection; import org.jsoup.Jsoup; import javax.net.ssl.*; import java.io.IOException; import java.security.KeyManagement... Copy/Delete/Permission directory using System; using System.IO; using System.Security.AccessControl; namespace Bruce.Lib {     public class DirHelper     {         /// <...
Stats
runas
  1. RUNAS 使用方法:
  2.  
  3. RUNAS [ [/noprofile | /profile] [/env] [/netonly] ]
  4. /user: program
  5. RUNAS [ [/noprofile | /profile] [/env] [/netonly] ]
  6. /smartcard [/user:] program
  7. /noprofile 指定使用者的設定檔不該載入。
  8. 這會導致應用程式載入速度更快,
  9. 但可能引起一些應用程式運作失常。
  10. /profile 指定應該載入使用者的設定檔。
  11. 這是預設值。
  12. /env 使用目前的環境,不用使用者設定的環境。
  13. /netonly 如果指定的憑證是供遠端存取時才使用。
  14. /savecred 使用之前由使用者儲存的認證。
  15. 此選項在 Windows XP Home Edition 上無法使用
  16. 而且會被略過。
  17. /smartcard 當智慧卡提供了認證時使用。
  18. /user 格式如下 USER@DOMAIN DOMAIN\USER
  19. program EXE 的命令列。範例如下
  20. 範例:
  21. > runas /noprofile /user:mymachine\administrator cmd
  22. > runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
  23. > runas /env /user:user@domain.microsoft.com "notepad \"my file.txt\""
  24. 注意: 只有在提示時,才輸入使用者密碼。
  25. 注意: USER@DOMAIN /netonly 不相容。
  26. 注意: /profile /netonly 不相容。
jQuery : post/get using data() as param object
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6. <title>Recursive call when post request</title>
  7. <script type="text/javascript" src="jquery-1.5.1.js"></script>
  8. <script type="text/javascript">
  9.     $(function() {
  10.         var count = 0;
  11.         $('input:button').click(function() {
  12.             // identity
  13.             count++;
  14.             var tick = count;
  15.             // post url
  16.             var url = '${contextPath}/';
  17.             // post param
  18.             var param = $(this).data();
  19.             console.log(param);
  20.             $('<div>(' + tick + ') Post to : ' + url + '</div>').appendTo(document.body);
  21.             $.post(url, param, function(data) {
  22.                 $('<div style="color:blue;">(' + tick + ') Ajax works successfully.</div>').appendTo(document.body);
  23.             });
  24.         });
  25.     });
  26. </script>
  27. </head>
  28. <body>
  29. <input type="button" value="click to post" data-action="test" data-name="bruce" data-age="31" />
  30. </body>
  31. </html>
ボタンをクリックすると、data()のオブジェクトがハンドルを値を持っているため、postするときにハンドルは再び執行することになる。つまり、クリック事件は繰り返しする。この現象を避けるには、ハンドル/イベントを削除しなければならない。
jQuery validte : regex rule
  1. $.validator.addMethod(
  2.     "regex",
  3.     function(value, element, regexp) {
  4.         var check = false;
  5.         var re = new RegExp(regexp);
  6.         return this.optional(element) || re.test(value);
  7.     },
  8.     "Please check your input."
  9. );
  1. $("textbox").rules("add", { regex: "^[a-zA-Z'.\s]{1,40}$" })
Data URI schema
work.bmp URL: Data URI:
<img src="data:image/bmp;base64,Qk02BAAAAAAAADYAAAAoAAAAEAAAABAAAAABACAAAAAAAAAAAAASCwAAEgsAAAAAAAAAAAAAAAAACwAAACIAAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAiAAAACyFHYZwkTmvyJE5r8iROa/IkTmvyJE5r8iROa/IkTmvyJE5r8iROa/IkTmvyJE5r8iROa/IkTmvyJE5r8iFHYZwmUG3yUY6y/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/1GOsv8mUG3yKFJv8lGOsv9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9RjrL/KFJv8ipVcvJRjrL/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/UY6y/ypVcvItWHXyUY6y/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/1GOsv8tWHXyMFt58lGOsv9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9RjrL/MFt58jRfffJRjrL/TX6k/01+pP9NfqT/TX6k/01+pP8kTmv/JE5r/0t7of9NfqT/TX6k/01+pP9NfqT/UY6y/zRfffIlT2z+JE5r/yROa/8kTmv/JE5r/yROa/8kTmv/JE5r/yROa/8kTmv/JE5r/yROa/8kTmv/JE5r/yROa/8lT2z+OmWE8lGOsv9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9RjrL/OmWE8j1oh/JRjrL/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/TX6k/01+pP9NfqT/UY6y/z1oh/I/a4ryVJq9/1GOsv9RjrL/UY6y/1GOsv9RjrL/UY6y/1GOsv9RjrL/UY6y/1GOsv9RjrL/UY6y/1Savf8/a4ryQW2M8luy0v9ars//Wq7P/1quz/9ars//Wq7P/1quz/9ars//Wq7P/1quz/9ars//Wq7P/1quz/9bstL/QW2M8kNvjo5Db47yQ2+O8kNvjvJDb47yNmGA90NvjvJDb47yQ2+O8kNvjvI2YYD3Q2+O8kNvjvJDb47yQ2+O8kNvjo4AAAAAAAAAAAAAAAAAAAAAJE5rACROa/8kTmsAJE5rACROawAkTmsAJE5r/yROawAkTmsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACROawAkTmv/JE5r/yROa/8kTmv/JE5r/yROa/8kTmsAJE5rAAAAAAAAAAAAAAAAAA==" />
work.gif URL: Data URI:
<img src="data:image/gif;base64,R0lGODlhEAAQAIcAAQAAAGtOJI5vQ4BhNoxtQdKyW8+uWoprP72aVLKOUYdoPaR+TYRlOmxPJX1fNKF7S3lbMHVYLXJVKm9SKG1QJmFHIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAEAAQAAcIcwABCAQQoKBBgwMTHlw4UIBDhwMeCogokUABAxgzasRYgMABBAlCihwZEsEBBQkWqFzJUmUCBQxStpyZgEGDhTgNNnAgc2XBBywTOIDQc+bKBBAiFDW6IEEECUuNJpAwISrNCRSstkxAoULOnBUSih0LICAAOw==" />
work.jpg URL: Data URI:
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wgARCAAQABADASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAwAG/8QAFAEBAAAAAAAAAAAAAAAAAAAABv/aAAwDAQACEAMQAAAByajCEv8A/8QAGRAAAgMBAAAAAAAAAAAAAAAABQYBAwQH/9oACAEBAAEFAhCrzkTUVXOelclTynTkteU6Mn//xAAYEQACAwAAAAAAAAAAAAAAAAAAERIhJP/aAAgBAwEBPwHPBUj/xAAZEQABBQAAAAAAAAAAAAAAAAASAAQRIoH/2gAIAQIBAT8BF0Z2nV//xAAiEAABAwMDBQAAAAAAAAAAAAACAQMEABFhBjEzEhMhQnH/2gAIAQEABj8CvDbJsnBHu2nbrbP2iYliTnTcwFZvtbxtTbT2oIvCKGKninGmdQROEkAUPFf/xAAaEAEBAAMBAQAAAAAAAAAAAAABEQAxUSFB/9oACAEBAAE/Iabr+8DSXIrDIEFhD4rvV+40GwilkR7hQTCYWwM//9oADAMBAAIAAwAAABA3/8QAGREAAgMBAAAAAAAAAAAAAAAAAREAIWGR/9oACAEDAQE/EAiTlS5P/8QAGBEAAgMAAAAAAAAAAAAAAAAAAREAcZH/2gAIAQIBAT8QJmXttn//xAAaEAEBAAMBAQAAAAAAAAAAAAABEQAhMUFh/9oACAEBAAE/EI4XQMDCM6Eb4rMEvYRja0zR6fUh7IswD7YKI9HG3AYhGzQFQOBn/9k=" />
work.png URL: Data URI:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPxJREFUeNpiZEAD2X4qIOo/A3bACCKmbroDF2BhwA0Y0fhYDWXsy3fuA9IpyIKfPn1m5ePj/U1IDAjmsPz79y/FzVWK9+8fZAvEQQQHqlpUMWYWRoZdu5+lgAxgeP3iJ8PXL38ZSAHcPMwMIL0sf//+A2v+9OEPA6kApJfp79+/DOQCkF6WF69e8zx/+YosAxgZGXlYBAX4v5jqy/Ji88LxC9fBtJmuOgMzMxOKHJ8AC8Ppi4+/sPz5g9vvlgaaeF0A0sv0h4IwAOmlOBCZQFFBvgHAaAQlBnIBOCF9+f571c4Dl8PIMeDbz7+rQDmOG5rQuUnU/xWIXwIEGADy0nItvNe4lQAAAABJRU5ErkJggg==" />
Data URI schema
Statement.executeBatch() always returns an array of value -2
The elements in the array returned by the method executeBatch may be one of the following:
  1. A number greater than or equal to zero -- indicates that the command was processed successfully and is an update count giving the number of rows in the database that were affected by the command's execution
  2. A value of -2 -- indicates that the command was processed successfully but that the number of rows affected is unknown
    If one of the commands in a batch update fails to execute properly, this method throws a BatchUpdateException, and a JDBC driver may or may not continue to process the remaining commands in the batch. However, the driver's behavior must be consistent with a particular DBMS, either always continuing to process commands or never continuing to process commands. If the driver continues processing after a failure, the array returned by the method BatchUpdateException.getUpdateCounts will contain as many elements as there are commands in the batch, and at least one of the elements will be the following:
  3. A value of -3 -- indicates that the command failed to execute successfully and occurs only if a driver continues to process commands after a command fails
reference : executeBatch
SqlCommand (Sample)
  1. new SqlCommand() //
  2. .setDebugMode(true)
  3. .setConnection(Connector.get())
  4. .setCommandText("SELECT" +
  5.         "    e.entry_id," +
  6.         "    e.entry_name," +
  7.         "    e.entry_english_name," +
  8.         "    e.entry_description," +
  9.         "    e.entry_sop_path," +
  10.         "    e.entry_cordon," +
  11.         "    e.role_name," +
  12.         "    e.entry_enabled," +
  13.         "    e.group_id," +
  14.         "    e.group_name" +
  15.         " FROM mv_wrk e" +
  16.         " WHERE" +
  17.         "    (&entry_id IS NULL OR UPPER(e.entry_id) LIKE UPPER(&entry_id))" +
  18.         "    AND (&entry_name IS NULL OR UPPER(e.entry_name) LIKE UPPER(&entry_name))" +
  19.         "    AND (&entry_english_name IS NULL OR UPPER(e.entry_english_name) LIKE UPPER(&entry_english_name))" +
  20.         "    AND (&entry_enabled IS NULL OR e.entry_enabled = &entry_enabled)" +
  21.         " ORDER BY e.entry_id ASC")
  22. .addParameter("&entry_id", OracleDataType.VARCHAR2)
  23. .addParameter("&entry_name", OracleDataType.VARCHAR2, null)
  24. .addParameter(new SqlParameter("&entry_english_name", OracleDataType.VARCHAR2))
  25. .addParameter(new SqlParameter("&entry_enabled", OracleDataType.NUMBER).setValue(null))
  26. .setAdapter(new QueryAdapter() {
  27.     @Override
  28.     public void executedQuery(SqlArgument arg) throws Exception {
  29.         ResultSet rs;
  30.         if ((rs = ((QueryArgument) arg).resultset) == null)
  31.             return;
  32.  
  33.         while (rs.next()) {
  34.             System.err.println(DataMap.fill(rs));
  35.         }
  36.     }
  37. })
  38. .query();
batch
  1. new SqlCommand()
  2. .setDebugMode(true)
  3. .setDebugOut(System.err)
  4. .setConnection(ConnectionUtil.get())
  5. .addCommand("/* 1. &name 2. &aid  3. &time */ INSERT INTO access_log VALUES(&aid, &name, &time)", CommandType.Text, CommandMode.Batch)
  6. .addCommand("SELECT * FROM access_log WHERE rownum < &rows ORDER BY time DESC")
  7. .addParameter("&rows", OracleDataType.INT, 5)
  8. .setAdapter(new QueryListener() {
  9.     @Override
  10.     public boolean executingQuery(SqlArgument arg) throws Exception {
  11.         if (arg.first && arg.mode == CommandMode.Batch)
  12.             for (int i = 0; i < 3; i++) {
  13.                 arg.addBatchParameters(
  14.                     new SqlParameter("&name", OracleDataType.VARCHAR2, "bruce"),
  15.                     new SqlParameter("&aid", OracleDataType.VARCHAR2, UUID.randomUUID().toString()),
  16.                     new SqlParameter("&time", OracleDataType.DATE, DateTime.now().toTimestamp())
  17.                 );
  18.             }
  19.  
  20.         return true;
  21.     }
  22.  
  23.     @Override
  24.     public void executedQuery(SqlArgument arg) throws Exception {
  25.         if (arg.first) {
  26.             UpdateArgument ua = (UpdateArgument) arg;
  27.             System.err.println(Arrays.toString(ua.batchResult));
  28.         } else {
  29.             QueryArgument argument = (QueryArgument) arg;
  30.             if (argument.resultset != null)
  31.                 while (argument.resultset.next()) {
  32.                     System.err.println(DataMap.fill(argument.resultset));
  33.                 }
  34.         }
  35.     }
  36. })
  37. .query();
Change IP of listener
listener.ora
  1. # listener.ora Network Configuration File: C:\oracle\product\10.1.0\db_1\network\admin\listener.ora
  2. # Generated by Oracle configuration tools.
  3.  
  4. SID_LIST_LISTENER =
  5.   (SID_LIST =
  6.     (SID_DESC =
  7.       (SID_NAME = PLSExtProc)
  8.       (ORACLE_HOME = C:\oracle\product\10.1.0\db_1)
  9.       (PROGRAM = extproc)
  10.     )
  11.   )
  12.  
  13. LISTENER =
  14.   (DESCRIPTION_LIST =
  15.     (DESCRIPTION =
  16.       (ADDRESS_LIST =
  17.         (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
  18.       )
  19.     )
  20.   )
  21.  
Start/stop oracle
  1. REM This batch file is used to start/stop the oracle instance
  2. REM Simply invoke oracle.bat start/stop
  3. cls
  4. @ECHO off
  5. REM ******************************************************************
  6. REM ** Batch file used to stop/start oracle services
  7. REM ******************************************************************
  8.  
  9. SET _db_=10g_home1
  10. SET _sid_=CCIMES
  11.  
  12.  
  13. if(%1)==(start) GOTO START
  14. if(%1)==(stop) GOTO STOP
  15. echo Invalid use. Usage is oracle.bat stop/start
  16. GOTO END
  17.  
  18.  
  19. :START
  20. REM ** START the oracle services
  21. echo Starting Oracle Services
  22. REM change the instance/listener names to match what is in your services list
  23. NET START OracleCSService
  24. NET START OracleOraDB%_db_%iSQL*Plus
  25. NET START OracleOraDb%_db_%TNSListener
  26. NET START OracleService%_sid_%
  27. NET START OracleDBConsole%_sid_%
  28. REM NET START OracleJobScheduler%_sid_%
  29. REM NET START "Oracle INNOVATEST VSS Writer Service"
  30. echo Oracle Services Started
  31. GOTO END
  32.  
  33.  
  34. :STOP
  35. echo Stopping Oracle Services
  36. REM change the instance/listener names to match what is in your services list
  37. REM NET STOP "Oracle INNOVATEST VSS Writer Service"
  38. REM NET STOP OracleJobScheduler%_sid_%
  39. NET STOP OracleDBConsole%_sid_%
  40. NET STOP OracleOraDb%_db_%TNSListener
  41. NET STOP OracleService%_sid_%
  42. NET STOP OracleOraDB%_db_%iSQL*Plus
  43. NET STOP OracleCSService
  44. echo Oracle Services Stopped
  45. GOTO END
  46.  
  47.  
  48. :END
Word break tag : <wbr/> (HTML5)
The HTML <wbr> tag is used defines potential line break point if needed. This stands for Word BReak.

This is used with the <nobr> tag, <wbr> advises the extended browser when it may insert line break in an otherwise nonbreakable sequence of text. Unlike the <br> tag, which always causes line break, even within <nobr>- tagged segment, the <wbr> tag works only when placed inside <nobr>- tagged content segment and causes line break only if the current line has already extended beyond the browser's display window margins.

test:

Words without breaks

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

Words with breaks

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
no object DCH for MIME type multipart/mixed
  1. Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/related;
  2. boundary="----=_Part_0_9042915.1299319807397"
  3. at javax.activation.ObjectDataContentHandler.writeTo(Unknown Source)
  4. at javax.activation.DataHandler.writeTo(Unknown Source)
  5. at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1383)
  6. at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1743)
  7. at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:888)
  8. ... 4 more
There is something wrong with MailCap, javamail can not find a handler for such multipart/mixed part.
And the solution is add mime programmingly:
  1. MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
  2. mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
  3. mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
  4. mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
  5. mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
  6. mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
  7. CommandMap.setDefaultCommandMap(mc);