亚洲字幕AV一区二区三区四区,一本色道久久88亚洲精品综合,亚洲精品国产综合久久久久紧http://www.tkk7.com/yxhxj2006/category/52365.htmlzh-cnThu, 19 Nov 2015 05:09:19 GMTThu, 19 Nov 2015 05:09:19 GMT60在Java中直接調用js代碼http://www.tkk7.com/yxhxj2006/archive/2015/11/19/428272.html奮斗成就男人奮斗成就男人Wed, 18 Nov 2015 16:25:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2015/11/19/428272.htmlhttp://www.tkk7.com/yxhxj2006/comments/428272.htmlhttp://www.tkk7.com/yxhxj2006/archive/2015/11/19/428272.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/428272.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/428272.htmlJDK1.6版添加了新的ScriptEngine類,允許用戶直接執行js代碼。

在Java中直接調用js代碼

不能調用瀏覽器中定義的js函數,會拋出異常提示ReferenceError: “alert” is not defined。

 
package com.sinaapp.manjushri; 
import javax.script.ScriptEngine; 
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;   /**  * 直接調用js代碼  */
public class ScriptEngineTest {    
public static void main(String[] args) { 
  ScriptEngineManager manager = new ScriptEngineManager();
  ScriptEngine engine = manager.getEngineByName("javascript");
     try{                engine.eval("var a=3; var b=4;print (a+b);");           // engine.eval("alert(\"js alert\");");    // 不能調用瀏覽器中定義的js函數 // 錯誤,會拋出alert引用不存在的異常
 }catch(ScriptException e){   e.printStackTrace();  }  }    }

輸出結果:7

在Java中綁定js變量

在調用engine.get(key);時,如果key沒有定義,則返回null

 
package com.sinaapp.manjushri;     import javax.script.Bindings;   import javax.script.ScriptContext;   import javax.script.ScriptEngine;   import javax.script.ScriptEngineManager;   import javax.script.ScriptException;     public class ScriptEngineTest2 {    public static void main(String[] args) {    ScriptEngineManager manager = new ScriptEngineManager();    ScriptEngine engine = manager.getEngineByName("javascript");    engine.put("a", 4);    engine.put("b", 3);    Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);   try {                          // 只能為Double,使用Float和Integer會拋出異常      Double result = (Double) engine.eval("a+b");         System.out.println("result = " + result);     engine.eval("c=a+b");      Double c = (Double)engine.get("c");      System.out.println("c = " + c);         } catch (ScriptException e) {     e.printStackTrace();         }      }   }

輸出:
result = 7.0
c = 7.0

在Java中調用js文件中的function,傳入調用參數,并獲取返回值

js文件中的merge函數將兩個參數a,b相加,并返回c。

 
// expression.js 
function merge(a, b) { 
 c = a * b; 
 return c; 
}

在Java代碼中讀取js文件,并參數兩個參數,然后回去返回值。

 
package com.sinaapp.manjushri;     import java.io.FileReader;    import javax.script.Invocable;   import javax.script.ScriptEngine;   import javax.script.ScriptEngineManager;    /**  * Java調用并執行js文件,傳遞參數,并活動返回值  *   * @author manjushri  */   public class ScriptEngineTest {      public static void main(String[] args) throws Exception {    ScriptEngineManager manager = new ScriptEngineManager();    ScriptEngine engine = manager.getEngineByName("javascript");       String jsFileName = "expression.js";   // 讀取js文件     FileReader reader = new FileReader(jsFileName);   // 執行指定腳本    engine.eval(reader);     if(engine instanceof Invocable) {     Invocable invoke = (Invocable)engine;    // 調用merge方法,并傳入兩個參數      // c = merge(2, 3);      Double c = (Double)invoke.invokeFunction("merge", 2, 3);      System.out.println("c = " + c);    }     reader.close();      } }

輸出結果:
c = 5.0


java調用腳本語言筆記(jython,jruby,groovy)

 有兩種方法
1.java se 6以后實現了jsr 223規范
java代碼:

[java]
  1. ScriptEngineManager factory = new ScriptEngineManager();  
  2. ScriptEngineManager scriptEngine = factory.getEngineByName("javascript");//或者"js"  
  3. scriptEngine.eval(code);//執行一段腳本,code是js代碼  


 很方便調用腳本

2.可以使用腳本語方本身提供的與java的集成手段

jython集成
使用jsr223:
前提下載jython的包,已實現jsr223
(建議在官網上下載,在安裝目錄下有jython.jar,http://repo2.maven.org/maven2/org/python/jython/2.5.0/ 這里也有,但是這個包里沒有jsr223的實現,看包下存不存在org.python.jsr223)

[java]
  1. ScriptEngineManager factory = new ScriptEngineManager();  
  2. ScriptEngineManager scriptEngine = factory.getEngineByName("python");//或者"jython"  
  3. scriptEngine.eval(code);  


使用PythonInterpreter,可以調用exec(String code)方法:

[java]
  1. PythonInterpreter interpreter = new PythonInterpreter();  
  2. interpreter.exec(code);  

訪問數據庫
使用jdbc:

[python] 
  1. from oracle.jdbc.driver import OracleDriver  
  2. from java.sql import DriverManager  
  3.   
  4. username = 'hr'  
  5. password = '123456'  
  6. url = 'jdbc:oracle:thin:@localhost:1521:XE'  
  7. driver = OracleDriver()  
  8. DriverManager.registerDriver(driver)  
  9. conn = DriverManager.getConnection(url, username, password)  
  10. stmt = conn.createStatement()  
  11. sql = "select salary from EMPLOYEES t where t.salary<2300"  
  12. rs = stmt.executeQuery(sql)  
  13. while (rs.next()):  
  14.  print rs.getInt('salary')  
  15. rs.close()  
  16. stmt.close()  


 結果:
2200
2100
2200

使用zxJDBC :

[python] 
  1. from com.ziclix.python.sql import zxJDBC  
  2.   
  3. url = 'jdbc:oracle:thin:@localhost:1521:XE'  
  4. username = 'hr'  
  5. password = '123456'  
  6. driverName = 'oracle.jdbc.driver.OracleDriver'  
  7. mysqlConn = zxJDBC.connect(url,username, password,driverName)  
  8. cursor = mysqlConn.cursor()       
  9. cursor.execute("select last_name from EMPLOYEES t where t.salary<2300");  
  10. #print cursor.fetchone()  
  11. list = cursor.fetchall()  
  12. for record in list:  
  13.     print "name:"+record[0]  
  14. #print cursor.description[0]  
  15. #print cursor.description[1]  


 結果:
name:麥克
name:Olson
name:Philtanker

從數據庫中查出的中文內容正常的。
而在代碼里面的中文全部是亂碼或拋異常,未解決。

與jruby集成
使用jsr223:Java代碼

[java]
  1. ScriptEngineManager factory = new ScriptEngineManager();  
  2. ScriptEngineManager scriptEngine = factory.getEngineByName("jruby");//或者"ruby"  
  3. scriptEngine.eval(code);  

 訪問數據庫

Ruby代碼

[ruby] 
  1. require 'java'  
  2.   
  3. module JavaLang  
  4.   include_package "java.lang"  
  5. end  
  6.   
  7. module JavaSql  
  8.   include_package 'java.sql'  
  9. end  
  10.   
  11. begin  
  12.  username = 'hr'  
  13.  password = '123456'  
  14.  url = 'jdbc:oracle:thin:@localhost:1521:XE'  
  15.  driverName = 'oracle.jdbc.driver.OracleDriver'  
  16.  JavaLang::Class.forName(driverName).newInstance  
  17.  conn = JavaSql::DriverManager.getConnection(url, username, password)  
  18.  stmt = conn.createStatement  
  19.  sql = "select last_name from EMPLOYEES t where t.salary<2300"  
  20.  rs = stmt.executeQuery(sql)  
  21.  while (rs.next) do  
  22.   puts "名字:"+rs.getString("last_name")  
  23.  end  
  24.  rs.close  
  25.  stmt.close  
  26.  conn.close()  
  27. rescue JavaLang::ClassNotFoundException  
  28.  puts "ClassNotFoundException"  
  29. rescue JavaSql::SQLException  
  30.  puts "SQLException"  
  31. end  


 

 結果:
名字:楹﹀厠
名字:Olson
名字:Philtanker

 

從數據庫中查出的中文內容為亂碼的。
而在代碼里面的中文正常。

 

與groovy集成
使用jsr223:

Java代碼

[java] 
  1. ScriptEngineManager factory = new ScriptEngineManager();  
  2. ScriptEngineManager scriptEngine = factory.getEngineByName("groovy");//或者"Groovy"  
  3. scriptEngine.eval(code);  


 使用GroovyShell:

Java代碼

[java] 
  1. GroovyShell shell = new GroovyShell();  
  2. Script script = shell.parse(code);  
  3. Object result = script.run();  


訪問數據庫

Groovy代碼

 

  1. import groovy.sql.Sql  
  2.   
  3. def username = 'hr'  
  4. def password = '123456'  
  5. def url = 'jdbc:oracle:thin:@localhost:1521:XE'  
  6. def driverName = 'oracle.jdbc.driver.OracleDriver'  
  7. def sql = Sql.newInstance(url, username, password, driverName)  
  8.   
  9. sql.eachRow("select last_name from EMPLOYEES t where t.salary<2300") {  
  10.  println "名字:${it.last_name}"  
  11. }  

結果:
名字:麥克
名字:Olson
名字:Philtanker

 

在使用groovy過程中碰到了一個異常
Exception in thread "main" java.lang.VerifyError: (class: groovy/runtime/metaclass/java/util/ArrayListMetaClass, method: super$2$invokeMethod signature: (Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;ZZ)Ljava/lang/Object;) Illegal use of nonvirtual function call
這個異常解決花了很長時間
是因為在原來項目中存在json-lib-2.1.jar(有可能名稱為json-lib-2.1-jdk15.jar),這個包是用來處理json的,與groovy1.7.5存在沖突,更新為json-lib-2.3.jar即可
(json-lib里有一些groovy運行時處理的內容)



]]>
myeclipse中java文件頭注釋格式設置http://www.tkk7.com/yxhxj2006/archive/2014/01/14/408940.html奮斗成就男人奮斗成就男人Tue, 14 Jan 2014 15:23:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2014/01/14/408940.htmlhttp://www.tkk7.com/yxhxj2006/comments/408940.htmlhttp://www.tkk7.com/yxhxj2006/archive/2014/01/14/408940.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/408940.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/408940.html
myeclipse中java文件頭注釋格式設置  

windows->preferences->java->Code Templates->comments->Type->edit 
Eclipse注釋規范模版總結
新建類文件
/**
 * @ClassName:     ${file_name}
 * @Description:   ${todo}(用一句話描述該文件做什么) 
 * 
 * @author         ${user}
 * @version        V1.0  
 * @Date           ${date} ${time} 
 */
方法
/** 
 * @Title:        ${enclosing_method} 
 * @Description:  ${todo}(這里用一句話描述這個方法的作用) 
 * @param:        ${tags}    
 * @return:       ${return_type}    
 * @throws 
 * @author        ${user}
 * @Date          ${date} ${time} 
 */
輸入設置模板: 
/**      
* ${file_name} Create on ${date}     
*      
* Copyright (c) ${date} by taotaosoft      
*      
@author <a href="xiuzhong.li@gmail.com">Jerryli</a>     
@version 1.0 
*     
*/ 
注意選擇自動添加注釋,養成一個規范的習慣是最好的。 
選菜單 
windows-->preference  --> Java-->Code Style-->Code Templates  --> code-->new Java files 
選中點編輯 
${filecomment} 
${package_declaration} 
/** 
@author 作者姓名  E-mail: email地址 
@version 創建時間:${date} ${time} 
* 類說明 
*/ 
${typecomment} 
${type_declaration} 
  
 Eclipse注釋規范模版總結
1、  具體操作
(1)在eclipse中,打開Window->Preference->Java->Code Style->Code Template
(2)然后展開Comments節點就是所有需設置注釋的元素,參照2注釋規范對應設置即可
2、  注釋規范
(1)文件(Files)注釋標簽
/**
 * FileName:     ${file_name}
 * @Description: ${todo}(用一句話描述該文件做什么)
* All rights Reserved, Designed By ZTE-ITS
 * Copyright:    Copyright(C) 2010-2011
 * Company       ZTE-ITS WuXi LTD.
 * @author:    名字
 * @version    V1.0 
 * Createdate:         ${date} ${time}
 *
 * Modification  History:
 * Date         Author        Version        Discription
 * -----------------------------------------------------------------------------------
 * ${date}       wu.zh          1.0             1.0
 * Why & What is modified: <修改原因描述>
 */
 
(2)類型(Types)注釋標簽(類的注釋):
 /**
 * @ClassName:     ${type_name}
 * @Description:${todo}(這里用一句話描述這個類的作用)
 * @author:    Android_Robot
 * @date:        ${date} ${time}
 *
 * ${tags}
 */
 
(3)字段(Fields)注釋標簽:
 /**  
 * @Fields ${field} : ${todo}(用一句話描述這個變量表示什么)   
 */  
  
(4)構造函數標簽:
 /**
 * @Title:        ${enclosing_type}
 * @Description:    ${todo}(這里用一句話描述這個方法的作用)
 * @param:    ${tags}
 * @throws
 */
 
(5)方法(Methods)標簽:
/**
 * @Title: ${enclosing_method}
 * @Description: ${todo}(這里用一句話描述這個方法的作用)
 * @param: ${tags}   
 * @return: ${return_type}   
 * @throws
 */
 
(6)覆蓋方法(Overriding Methods)標簽:
 /**
 * <p>Title: ${enclosing_method}</p>
 * <p>Description: </p>
 * ${tags}
 * ${see_to_overridden}
 */
 
(7)代表方法(Delegate Methods)標簽:
/**
 * ${tags}
 * ${see_to_target}
 */
 
(8)getter方法標簽:
/**
 * @Title:        ${enclosing_method} <BR>
 * @Description: please write your description <BR>
 * @return:     ${field_type} <BR>
 */
 
(9)setter方法標簽:
/** 
 * @Title:  ${enclosing_method} <BR> 
 * @Description: please write your description <BR> 
 * @return: ${field_type} <BR> 
 */ 


]]>
常見Map 及 ArrayList 是否有序總結http://www.tkk7.com/yxhxj2006/archive/2013/06/09/400452.html奮斗成就男人奮斗成就男人Sun, 09 Jun 2013 13:20:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2013/06/09/400452.htmlhttp://www.tkk7.com/yxhxj2006/comments/400452.htmlhttp://www.tkk7.com/yxhxj2006/archive/2013/06/09/400452.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/400452.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/400452.html說明:此處的排序 是指:

1: 往集合中插入元素的順序與遍歷元素的順序的關系;

2: 往對象中插入元素否會根據元素的大小排序

 

?
public class MapSortTest {
 
    public static void main(String[] args) {
         
        System.out.println("放入順序為:a:aaa c:ccc b:bbb d:ddd ");
        System.out.println("HashMap 排序測試");
        Map map = new HashMap(); 
        map.put("a", "aaa");  
        map.put("c", "ccc");
        map.put("b", "bbb"); 
        map.put("d", "ddd"); 
        Iterator iterator = map.keySet().iterator(); 
        while (iterator.hasNext()) { 
            Object key = iterator.next(); 
            System.out.println("key:"+key+"         value:" + map.get(key)); 
        } 
        System.out.println("HashMap 進出無次序 ; key大小無次序 ");
        System.out.println("***********************************************************");
         
         
        System.out.println("Hashtable 排序測試");       
        Hashtable tab = new Hashtable(); 
        tab.put("a", "aaa"); 
        tab.put("c", "ccc");
        tab.put("b", "bbb");  
        tab.put("d", "ddd"); 
        Iterator iterator_1 = tab.keySet().iterator(); 
        while (iterator_1.hasNext()) { 
            Object key = iterator_1.next(); 
            System.out.println("key :"+key+"             value:"+ tab.get(key)); 
        } 
        System.out.println("Hashtable 進出無次序 ; key大小無次序 ");
        System.out.println("***********************************************************");
         
        System.out.println("TreeMap 排序測試");             
        TreeMap tmp = new TreeMap(); 
        tmp.put("a", "aaa"); 
        tmp.put("c", "ccc"); 
        tmp.put("b", "bbb"); 
        tmp.put("d", "ddd"); 
        Iterator iterator_2 = tmp.keySet().iterator(); 
        while (iterator_2.hasNext()) { 
            Object key = iterator_2.next(); 
            System.out.println("key:"+key+"          value:" + tmp.get(key)); 
        } 
        System.out.println("TreeMap 進出無次序 ; key大小從小到大 ");
        System.out.println("***********************************************************");
         
        System.out.println("LinkedHashMap 排序測試");               
        LinkedHashMap linkedHashMap = new LinkedHashMap(); 
        linkedHashMap.put("a", "aaa"); 
        linkedHashMap.put("c", "ccc"); 
        linkedHashMap.put("b", "bbb"); 
        linkedHashMap.put("d", "ddd"); 
        Iterator iterator2 = linkedHashMap.keySet().iterator(); 
        while (iterator2.hasNext()) { 
            Object key = iterator2.next(); 
            System.out.println("key:"+key+"          value:" + linkedHashMap.get(key)); 
        }       
        System.out.println("LinkedHashMap 先進先出; key大小無次序 ");
        System.out.println();
         
        System.out.println("ArrayList 排序測試");
        System.out.println("放入順序為:aaa ccc bbb ddd");
        ArrayList arrayList=new ArrayList(); 
        arrayList.add("aaa"); 
        arrayList.add("ccc"); 
        arrayList.add("bbb"); 
        arrayList.add("ddd"); 
        System.out.println("ArrayList 先進先出;值大小無次序 ");
//      Collections.sort(arrayList); 
        for(int i=0;i<arrayList.size();i++){ 
            System.out.println(arrayList.get(i)); 
        } 
        System.out.println("***********************************************************");
    }
 
}

 

運行結果:

?
放入順序為:a:aaa c:ccc b:bbb d:ddd 
HashMap 排序測試
key:d         value:ddd
key:b         value:bbb
key:c         value:ccc
key:a         value:aaa
HashMap 進出無次序 ; key大小無次序 
***********************************************************
Hashtable 排序測試
key :b             value:bbb
key :a             value:aaa
key :d             value:ddd
key :c             value:ccc
Hashtable 進出無次序 ; key大小無次序 
***********************************************************
TreeMap 排序測試
key:a          value:aaa
key:b          value:bbb
key:c          value:ccc
key:d          value:ddd
TreeMap 進出無次序 ; key大小從小到大 
***********************************************************
LinkedHashMap 排序測試
key:a          value:aaa
key:c          value:ccc
key:b          value:bbb
key:d          value:ddd
LinkedHashMap 先進先出; key大小無次序 
 
ArrayList 排序測試
放入順序為:aaa ccc bbb ddd
LinkedHashMap 先進先出;值大小無次序 
aaa
ccc
bbb
ddd
***********************************************************

]]>
Java 12小時和24小時制時間format http://www.tkk7.com/yxhxj2006/archive/2013/04/15/397855.html奮斗成就男人奮斗成就男人Mon, 15 Apr 2013 06:56:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2013/04/15/397855.htmlhttp://www.tkk7.com/yxhxj2006/comments/397855.htmlhttp://www.tkk7.com/yxhxj2006/archive/2013/04/15/397855.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/397855.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/397855.html12小時制: dff = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
24小時制: dff = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

]]>
String、data、Calendar、Timestamp 之間的轉換http://www.tkk7.com/yxhxj2006/archive/2013/04/15/397854.html奮斗成就男人奮斗成就男人Mon, 15 Apr 2013 06:38:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2013/04/15/397854.htmlhttp://www.tkk7.com/yxhxj2006/comments/397854.htmlhttp://www.tkk7.com/yxhxj2006/archive/2013/04/15/397854.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/397854.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/397854.html
String、data、Calendar、Timestamp 之間的轉換 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
1.Calendar 轉化 String 
//獲取當前時間的具體情況,如年,月,日,week,date,分,秒等 
        Calendar calendat = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = sdf.format(calendar.getTime());

2.String 轉化Calendar
String str="2010-5-27";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date date =sdf.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

3.Date 轉化String
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
String dateStr=sdf.format(new Date());

4.String 轉化Date
String str="2010-5-27";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date birthday = sdf.parse(str);

5.Date 轉化Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTime(new java.util.Date());

6.Calendar轉化Date
Calendar calendar = Calendar.getInstance();
java.util.Date date =calendar.getTime();

7.Date 轉成 String
System.out.println(sdf.format(new Date())); 
8.String 轉成 Timestamp
Timestamp ts = Timestamp.valueOf("2011-1-14 08:11:00");

9.Timestamp 轉成 String
sdf.format(ts);

Timestamp和Date多數用法是一樣的。
10.Date 轉 TimeStamp
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = df.format(new Date());
Timestamp ts = Timestamp.valueOf(time);

11.日期比較大小
String ti="2010-11-25 20:11:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Date time=sdf.parse(ti);
String ti2="2011-11-26 20:11:00";
Date time2=sdf.parse(ti2);
int c=ti2.compareTo(ti);
if(c>0){
    System.out.println(ti+"大");
}else if(c==0){
    System.out.println("一樣大");
}else{
    System.out.println(ti2+"大");
}

12.Date/ Timestamp 轉成 Calendar 
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
calendar.add(Calendar.YEAR, 2);   //日期加2年
System.out.println(calendar.getTime());
calendar.add(Calendar.DATE, -30);     //日期加30天
System.out.println(calendar.getTime());
calendar.add(Calendar.MONTH, 3);  //日期加3個月
System.out.println(calendar.getTime());
Date date=new Date();
DateFormat df=DateFormat.getDayeInstance();
ps.setString(4,df.format(date))
Date date = new Date(); 
SimpleDateFormat from = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
String times = from.format(date);
public class Test1 {
public static void main(String[] args) {
  long   m=System.currentTimeMillis();
  System.out.println(new Date(m) );
}



]]>
JAVA郵件發送的簡單實現http://www.tkk7.com/yxhxj2006/archive/2013/03/09/396225.html奮斗成就男人奮斗成就男人Fri, 08 Mar 2013 16:29:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2013/03/09/396225.htmlhttp://www.tkk7.com/yxhxj2006/comments/396225.htmlhttp://www.tkk7.com/yxhxj2006/archive/2013/03/09/396225.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/396225.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/396225.html閱讀全文

]]>
用gmail smtp發送郵件http://www.tkk7.com/yxhxj2006/archive/2013/03/08/396195.html奮斗成就男人奮斗成就男人Fri, 08 Mar 2013 07:16:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2013/03/08/396195.htmlhttp://www.tkk7.com/yxhxj2006/comments/396195.htmlhttp://www.tkk7.com/yxhxj2006/archive/2013/03/08/396195.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/396195.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/396195.html
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMail implements Runnable {
    private final String smtp_host = "smtp.gmail.com";                      
    private final String from_userName = "xx@gmail.com";        
    private final String from_passWord = "xx";                        
    private final String show_name = "xxx";
    
    public String email_address;
    public String email_subject;
    public String email_content;    
    
    public SendMail(String email_address, String email_subject, String email_content) {
        this.email_address = email_address;
        this.email_subject = email_subject;
        this.email_content = email_content;
    }

    public void run() {
        executeMailSend(email_address, email_subject, email_content);
    }
    
    /**
     * 
     * 
@param recipients: the mail send to
     * 
@param sendSubject: the mail subject
     * 
@param sendText: the mail content
     
*/
    public void executeMailSend(String recipients, String sendSubject, String sendText) {
        
        try {            
            Properties props = System.getProperties();
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", smtp_host);
            props.put("mail.smtp.user", from_userName);
            props.put("mail.smtp.password", from_passWord);
            props.put("mail.smtp.port", "587");  //gmail smtp port 587
            props.put("mail.smtp.auth", "true");
            

            
            Session session = Session.getDefaultInstance(props, null);
            session.setDebug(false);
            
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from_userName));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
            message.setFrom(new InternetAddress(show_name + "<" + from_userName + ">"));    
            message.setSubject(sendSubject);
            message.setContent(sendText, "text/html;charset=utf-8");            
            
            Transport transport = session.getTransport("smtp");
            transport.connect(smtp_host, from_userName, from_passWord);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
            
            System.out.println("send an email to " + recipients + " success");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("failure! ");

        }
    }
    public static void main (String args[]){
        new SendMail("yy@gmail.com","test","hehe").run();
    }
}
結果老是報如下的錯誤
javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first. 36sm443504yxh.67
failure! 

    at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1020)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:716)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:388)
    at SendMail.executeMailSend(SendMail.java:59)
    at SendMail.run(SendMail.java:25)
    at SendMail.main(SendMail.java:70)
 折騰了個把小時,苦苦尋求后發現一個解決辦法 
props.put("mail.smtp.port""587");  
替換成
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
props.setProperty("mail.smtp.socketFactory.fallback", "false"); 
props.setProperty("mail.smtp.port", "465"); 
props.setProperty("mail.smtp.socketFactory.port", "465"); 
究其原因也不太清楚,網上有資料說port 587也可以,不知結果不行
把上述代碼中的 

]]>
Json-lib使用——JSONObject與JSONArrayhttp://www.tkk7.com/yxhxj2006/archive/2013/03/04/396038.html奮斗成就男人奮斗成就男人Mon, 04 Mar 2013 07:22:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2013/03/04/396038.htmlhttp://www.tkk7.com/yxhxj2006/comments/396038.htmlhttp://www.tkk7.com/yxhxj2006/archive/2013/03/04/396038.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/396038.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/396038.html

1.從Object到String
 要先用Object對象構造一個JSONObject或者JSONArray對象,然后調用它的toString()方法即可

(1)示例一

1 Book book=new Book();
2 book.setName("Java");
3 book.setPrice(52.3f);
4 JSONObject object=JSONObject.fromObject(book);
5 System.out.println(object.toString());

(2)示例二

復制代碼
 1         Book book=new Book();
2 book.setName("Java");
3 book.setPrice(52.3f);
4
5 Book book2=new Book();
6 book2.setName("C");
7 book2.setPrice(42.3f);
8 List list=new ArrayList();
9 list.add(book);
10 list.add(book2);
11 JSONArray arry=JSONArray.fromObject(list);
12 System.out.println(arry.toString());
13 //結果如下:
14 [{"name":"Java","price":52.3},{"name":"C","price":42.3}]
復制代碼

2.從String到Object
 要先用String對象構造一個JSONObject或者JSONArray對象
(1)示例一 

1 String json="{name:'Java',price:52.3}";    
2 JSONObject object=JSONObject.fromObject(json);
3 System.out.println(object.get("name")+" "+object.get("price"));

(2)示例二

復制代碼
1 String json="[{name:'Java',price:52.3},{name:'C',price:42.3}]";
2 JSONArray array=JSONArray.fromObject(json);
3 for(int i=0;i<array.size();i++){
4 Map o=(Map)array.get(i);
5 System.out.println(o.get("name")+" "+o.get("price"));
6 }
復制代碼

3.從String到Bean

(1)單個Bean對象

1         String json="{name:'Java',price:52.3}";
2 JSONObject object=JSONObject.fromObject(json);
3 Product product=(Product)JSONObject.toBean(object,Product.class);
4 System.out.println(product.getName()+" "+product.getPrice());

(2).Bean的數組

復制代碼
1         String json="[{name:'Java',price:52.3},{name:'C',price:42.3}]";
2 JSONArray array=JSONArray.fromObject(json);
3 Product[] products=(Product[]) JSONArray.toArray(array,Product.class);
4 for(Product p:products){
5 System.out.println(p.getName()+" "+p.getPrice());
6 }
復制代碼

自定義封裝JSON操作的類

復制代碼
 1 package com.util;
2
3 import java.util.List;
4 import java.util.Map;
5
6 import net.sf.json.JSONArray;
7 import net.sf.json.JSONObject;
8
9 public class JsonHelper {
10 //從普通的Bean轉換為字符串
11 public static String getJson(Object o){

12 JSONObject jo=JSONObject.fromObject(o);
13 return jo.toString();
14 }
15 //從Java的列表轉換為字符串
16 public static String getJson(List list){

17 JSONArray ja=JSONArray.fromObject(list);
18 return ja.toString();
19 }
20 //從Java對象數組轉換為字符串
21 public static String getJson(Object[] arry){

22 JSONArray ja=JSONArray.fromObject(arry);
23 return ja.toString();
24 }
25 //從json格式的字符串轉換為Map對象
26 public static Map getObject(String s){

27 return JSONObject.fromObject(s);
28 }
29 //從json格式的字符串轉換為List數組
30 public static List getArray(String s){

31 return JSONArray.fromObject(s);
32 }
33 //從json格式的字符串轉換為某個Bean
34 public static Object getObject(String s,Class cls){

35 JSONObject jo=JSONObject.fromObject(s);
36 return JSONObject.toBean(jo, cls);
37 }
38 //從json格式的字符串轉換為某類對象的數組
39 public static Object getArray(String s,Class cls){

40 JSONArray ja=JSONArray.fromObject(s);
41 return JSONArray.toArray(ja, cls);
42 }
43 }







]]>
Java 集合框架http://www.tkk7.com/yxhxj2006/archive/2012/09/20/388113.html奮斗成就男人奮斗成就男人Wed, 19 Sep 2012 16:42:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2012/09/20/388113.htmlhttp://www.tkk7.com/yxhxj2006/comments/388113.htmlhttp://www.tkk7.com/yxhxj2006/archive/2012/09/20/388113.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/388113.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/388113.html閱讀全文

]]>
Java命名規范http://www.tkk7.com/yxhxj2006/archive/2012/09/20/388111.html奮斗成就男人奮斗成就男人Wed, 19 Sep 2012 16:40:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2012/09/20/388111.htmlhttp://www.tkk7.com/yxhxj2006/comments/388111.htmlhttp://www.tkk7.com/yxhxj2006/archive/2012/09/20/388111.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/388111.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/388111.html閱讀全文

]]>
Eclipse Debug不為人知的秘密http://www.tkk7.com/yxhxj2006/archive/2012/08/30/386621.html奮斗成就男人奮斗成就男人Thu, 30 Aug 2012 10:16:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2012/08/30/386621.htmlhttp://www.tkk7.com/yxhxj2006/comments/386621.htmlhttp://www.tkk7.com/yxhxj2006/archive/2012/08/30/386621.html#Feedback0http://www.tkk7.com/yxhxj2006/comments/commentRss/386621.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/386621.htmlDebug視圖

認識debug視圖,紅色部分框為線程堆棧視圖,黃色部分框為表達式、斷點、變量視圖,藍色部分為代碼視圖。



 線程堆棧視圖

分別介紹一下這幾個按鈕的含義:

1.表示當前實現繼續運行直到下一個斷點,快捷鍵為F8。

2.表示打斷整個進程

3.表示進入當前方法,快捷鍵為F5。

4.表示運行下一行代碼,快捷鍵為F6。

5.表示退出當前方法,返回到調用層,快捷鍵為F7。

6.表示當前線程的堆棧,從中可以看出在運行哪些代碼,并且整個調用過程,以及代碼行號



 

變量視圖

1.為變量名視圖,顯示當前代碼行中所有可以訪問的實例變量和局部變量

2.顯示所有的變量值

3.可以通過該窗口來改變變量值



 

斷點視圖

1.顯示所有斷點

2. 將當前窗口1中選中的端口失效,再次點擊啟用。

3.異常斷點



 

表達式視圖

表達式視圖:表達式視圖是Debug過程中較為常用的一個視圖,可以對自己的感興趣的一些變量進行觀察,也可以增加一些自己的表達式,也可以查看一行代碼的運行結果。

1.表達式

2. 點擊此可以新增一個表達式



 

代碼視圖

代碼視圖:用來顯示具體的代碼。其中綠色部分是指當前將要執行的代碼



 

 

場景一:小明辛苦了兩天終于將自己的負責的任務完成了,第二天轉測后,測試找到了小明說,小明的程序有bug,可以是小明經過仔細調試,發現本地沒有任何問題,但是測試的環境上確實有問題,所以小明遇到了難題,測試的環境linux,又不能上去linux去debug,小明這個時候想要是Linux也可以debug就好了.

遠程debug

遠程debug:遠程debug顧名思義,能夠將遠程操作系統上的任何java進行debug,但是有前提是本地需要有同步的代碼。

1.遠程debug的步驟是在遠程操作系統上啟動java進程時增加特殊的

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n

2.在Eclipse中新建一個Remote Java Application

遠程debug

1.打開Debug Configurations視圖

2.右擊Remote Java Application,

New

3.選擇源碼工程

4.輸入遠程IP和端口,端口即服務

端的$DEBUG_PORT,點擊OK。




 
 

 

場景一:小明寫了一個任務執行者,該執行者不間斷的執行一些任務,在現網上運行了一段時間后,發現有概率的出現一些故障,發現運行一段時間后,該任務者異常退出了,退出的因為是空指針,可以小明想要在本地debug,不知道斷點打在哪里,該問題是概率事件,不一定會出現,所以小明debug幾遍下來后,頭暈眼花,連代碼都看不清楚了,小明想要是能有個斷點每當出現空指針異常的時候就停下來讓他發現問題,那該多好呀。

異常斷點

異常斷點:在定位問題的過程中,常常會遇到斷點無法打到合適的位置,以至于和問題的觸發點千差萬別,所以這個時候不妨試試異常斷點,顧名思義,異常斷點是指拋出某種異常后自動掛起的斷點。

點擊紅色部位,增加一個異常斷點



 

輸入想要定位的異常類型,例如NullPointerException,這樣系統中拋出任何NullPointerException異常后,都會掛起當前線程,給你機會去定位問題。

 

場景一:小明寫了一個巨大的循環,在調測代碼時,小明發現每當循環到第100000次的時候,就是出現問題,沒有達到自己的預期,于是小明在循環里打了個斷點,想看看到底怎么回事,可小明萬萬沒有想到,想要到達100000次循環是多么的困難,小明這個時候已經開始浮想聯翩,如果能有這樣的斷點:

             If 循環次數== 100000,線程停下來

條件斷點

如右圖,循環1000次,如果想要在循環到500

次的時候停下來,可以創建一個條件斷點,右

擊斷點懸著Breakpoint Properties。



 

選中Enable Condition

在空白處,添加你自己的條件,如果條件返回true,線程會被掛起,如果為false,則忽略該異常

Hit Count為該斷點經過多少次后,正式掛起線程,如果設置為500,則表達前499次,經過該斷點都不會停下,當第500次,該斷點會掛起當前線程。

 

 

表達式

表達式可以查看一些在當前代碼中沒有的命令行,方便定位問題。

 

場景一:小明最近遇到一個難題,在調用一個第三方插件時總是會有問題,小明懷疑是第三方插件的bug,但小明沒有找到源碼不能進行debug,小明該怎么辦呢?

Debug定位第三方插件的問題

1.使用反編譯工具將代碼反編譯

2.將反編譯后的源碼進行過濾

3.修復源碼編譯錯誤

4.進行debug

Debug一些經驗

1.盡量減少debug,少用debug,優秀的程序員總是花80%的時間來思考如何解決問題,20%的時間來動手完成代碼,而糟糕的程序員總是用20%的時間去寫代碼,80%的時間去調試代碼,動手之前盡量想好如何去做,并且已經為你自己的思路做了充分的實驗。

2.盡可能的提高debug的效率,設置合適的斷點,使用快捷鍵。

3.debug的F6快捷鍵經常用到,它與金山詞霸的快捷鍵沖突,所以在debug的時候最好將金山詞霸關掉。

4.debug的表達式是可執行代碼,將會對代碼結果產生永久性影響,在調試時注意,經常將不用的表達式清除掉。



]]>
POI操作Excel表格http://www.tkk7.com/yxhxj2006/archive/2012/08/09/385164.html奮斗成就男人奮斗成就男人Thu, 09 Aug 2012 08:45:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2012/08/09/385164.htmlhttp://www.tkk7.com/yxhxj2006/comments/385164.htmlhttp://www.tkk7.com/yxhxj2006/archive/2012/08/09/385164.html#Feedback1http://www.tkk7.com/yxhxj2006/comments/commentRss/385164.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/385164.htmlApache的Jakata項目的POI子項目,目前比較成熟的是HSSF接口,處理MSExcel對象。它不象我們僅僅是用csv生成的沒有格式的可以由Excel轉換的東西,而是真正的Excel對象,你可以控制一些屬性如sheet,cell等等。
首先,理解一下一個Excel的文件的組織形式,一個Excel文件對應于一個workbook(HSSFWorkbook),一個workbook可以有多個sheet(HSSFSheet)組成,一個sheet是由多個row(HSSFRow)組成,一個row是由多個cell(HSSFCell)組成。
POI可以到www.apache.org下載到。實際運行時,需要有poi包就可以了。HSSF提供給用戶使用的對象在rg.apache.poi.hssf.usermodel包中,主要部分包括Excel對象,樣式和格式,還有輔助操作。有以下幾種對象:
HSSFWorkbook excel的文檔對象
HSSFSheet excel的表單
HSSFRow excel的行
HSSFCell excel的格子單元
HSSFFont excel字體
HSSFDataFormat 日期格式
在poi1.7中才有以下2項:
HSSFHeader sheet頭
HSSFFooter sheet尾(只有打印的時候才能看到效果)
和這個樣式
HSSFCellStyle cell樣式
輔助操作包括
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 錯誤信息表
以下可能需要使用到如下的類
import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
 import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor;
先看poi的examples包中提供的最簡單的例子,建立一個空xls文件。
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelSample1 {
public static void main(String[] args) throws IOException {
//創建一個excel文件
HSSFWorkbook wb= new HSSFWorkbook();
FileOutputStream fileOut= new FileOutputStream("c:\\workbook.xls");
// FileOutputStream fileOut= new FileOutputStream("c:/workbook.xls");
wb.write(fileOut);
fileOut.close();
}
}
通過這個例子,我們在c盤下建立的是一個空白的xls文件(不是空文件)。
在此基礎上,我們可以進一步看其它的例子。
import org.apache.poi.hssf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class CreateCells
{
public static void main(String[] args) throws IOException
{
HSSFWorkbook wb = new HSSFWorkbook(); //建立新HSSFWorkbook對象
HSSFSheet sheet = wb.createSheet("new sheet"); //建立新的sheet對象
HSSFRow row = sheet.createRow((short)0);
//在sheet里創建一行,參數為行號(第一行,此處可想象成數組)
HSSFCell cell = row.createCell((short)0);
//在row里建立新cell(單元格),參數為列號(第一列)
cell.setCellvalue(1); //設置cell的整數類型的值
row.createCell((short)1).setCellvalue(1.2); //設置cell浮點類型的值
row.createCell((short)2).setCellvalue("test"); //設置cell字符類型的值
row.createCell((short)3).setCellvalue(true); //設置cell布爾類型的值
HSSFCellStyle cellStyle = wb.createCellStyle(); //建立新的cell樣式
cellStyle.setDataFormat(HSSFDataFormat. getBuiltinFormat("m/d/yy h:mm"));
//設置cell樣式為定制的日期格式
HSSFCell dCell =row.createCell((short)4);
dCell.setCellvalue(new Date()); //設置cell為日期類型的值
dCell.setCellStyle(cellStyle); //設置該cell日期的顯示格式
HSSFCell csCell =row.createCell((short)5);
csCell.setEncoding(HSSFCell.ENCODING_UTF_16);
//設置cell編碼解決中文高位字節截斷
csCell.setCellvalue("中文測試_Chinese Words Test"); //設置中西文結合字符串
row.createCell((short)6).setCellType(HSSFCell.CELL_TYPE_ERROR);
//建立錯誤cell
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
}
}
通過這個例子,我們可以清楚的看到xls文件從大到小包括了HSSFWorkbook HSSFSheet HSSFRow HSSFCell這樣幾個對象。我們可以在cell中設置各種類型的值。尤其要注意的是如果你想正確的顯示非歐美的字符時,尤其象中日韓這樣的語言,必須設置編碼為16位的即是HSSFCell.ENCODING_UTF_16,才能保證字符的高8位不被截斷而引起編碼失真形成亂碼。其他測試可以通過參考examples包中的測試例子掌握poi的詳細用法,包括字體的設置,cell大小和低紋的設置等。需要注意的是POI是一個仍然在完善中的公開代碼的項目,所以有些功能正在不斷的擴充。
感覺上面的操作比較的繁瑣,然后就自己寫了一個方法。這個方法不需要事先創建row和cell,直接進行cteateCell就可以了,在程序中會自動進行判斷,如果不存在的話會創建。
private static void cteateCell(HSSFWorkbook wb,HSSFRow row,short col,short align,String val){
HSSFCell cell = row.createCell(col);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(val);
HSSFCellStyle cellstyle = wb.createCellStyle();
cellstyle.setAlignment(align);
cell.setCellStyle(cellstyle);
}
對里面的幾個參數的說明:
short col 應該是你的cell單元格的位置也就是列號;
short align 應該是你的對齊方式;
String val 應該是你單元格里面要添加的值;
具體的調用如下:
HSSFRow row = sheet.createRow((short)1);
cteateCell(wb,row,(short)0,HSSFCellStyle.ALIGN_CENTER_SELECTION,"SampleID");
在上邊的例子里我們看到了要設置一個單元格里面信息的格式(例如,要將信息居中)設置的操作如下:
HSSFCellStyle cellstyle = wb.createCellStyle();
cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);
cell.setCellStyle(cellstyle);
還有我們我們經常會用到的合并單元格,在這里我們也有這樣的操作,代碼如下:
sheet.addMergedRegion(new Region(1,(short)1,2,(short)4));
 這里面我們還要介紹一個經常會遇到的問題,就是怎么來凍結一個窗口。poi也為我們集成了這樣的事情了。代碼如下:
sheet.createFreezePane(1,2);
λ 在這里我們需要注意的是
一、該方法是在一個具體的sheet里面來進行操作。
二、方法createFreezepane;有2個參數。前一個參數代表列;后一個參數代表行。
上邊的代碼對應的excel文件如下:


]]>
Java對Excel表格的操作http://www.tkk7.com/yxhxj2006/archive/2012/08/09/385160.html奮斗成就男人奮斗成就男人Thu, 09 Aug 2012 08:31:00 GMThttp://www.tkk7.com/yxhxj2006/archive/2012/08/09/385160.htmlhttp://www.tkk7.com/yxhxj2006/comments/385160.htmlhttp://www.tkk7.com/yxhxj2006/archive/2012/08/09/385160.html#Feedback1http://www.tkk7.com/yxhxj2006/comments/commentRss/385160.htmlhttp://www.tkk7.com/yxhxj2006/services/trackbacks/385160.html閱讀全文

]]>
主站蜘蛛池模板: 91嫩草亚洲精品| 黄色a三级免费看| 精品免费久久久久久成人影院| 另类专区另类专区亚洲| 伊人久久大香线蕉亚洲五月天| 99国产精品免费视频观看| 亚洲综合精品第一页| 在线a亚洲v天堂网2019无码| 国产精品永久免费10000| 全部一级一级毛片免费看| 亚洲人成在线影院| 免费a级毛片大学生免费观看| a级毛片免费全部播放无码| 中中文字幕亚洲无线码| 国产亚洲色婷婷久久99精品91| 222www在线观看免费| 日韩精品成人无码专区免费 | 一级一看免费完整版毛片| 午夜亚洲国产理论秋霞| 免费国内精品久久久久影院| 一个人免费日韩不卡视频| 黄网站在线播放视频免费观看| 久久国产亚洲高清观看| 久久亚洲国产精品五月天婷| A级毛片内射免费视频| 日韩电影免费在线观看| 成人精品综合免费视频| 一本天堂ⅴ无码亚洲道久久| 久久精品国产亚洲AV麻豆~| 亚洲国产精品尤物yw在线| 最近免费中文字幕大全视频 | a国产成人免费视频| 精品亚洲成a人在线观看| 亚洲午夜久久久精品电影院| 亚洲精品无码久久久久sm| 亚洲A∨精品一区二区三区| 中文字幕无码视频手机免费看| 两个人的视频www免费| 亚洲国产精品精华液| 久久精品国产99国产精品亚洲| 亚洲AV日韩AV高潮无码专区|