婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > JSP實用教程之簡易頁面編輯器的實現方法(附源碼)

JSP實用教程之簡易頁面編輯器的實現方法(附源碼)

熱門標簽:自繪地圖標注數據 電銷機器人免培訓 外呼系統使用方法 電話機器人需要使用網絡嗎 海外圖書館地圖標注點 南通通訊外呼系統產品介紹 潤滑油銷售電銷機器人 如何看懂地圖標注點 給地圖標注得傭金

前言

實現一個簡易的頁面編輯器是大家在學習jsp的時候經常會遇到的一個需求,發現網上這方便的資料不多,所以想著自己總結下,本文詳細介紹了JSP簡易頁面編輯器的實現方法,下面話不多說,來一起看看詳細的介紹:

需求

提供一頁面,放置“幫助”、“版權”文字內容,特點:靜態頁面,無須讀數據庫,只是應付字眼上頻繁的修改;沒有復雜的交互,無須 JavaScript;沒有圖片,不需要文件上傳。

給出的方案:提供一頁面和簡易的后臺管理,功能單一,只是編輯頁面(只是修改字體、大小、粗體、斜體等的功能)。
實現思路:純 JSP 展示,管理界面用 HTTP Basic 登入,通過一個 js 寫成 HTML 編輯器修改頁面內容。直接修改服務器磁盤文件。

界面如下,右圖是后臺編輯。


值得一提的是,Tomcat 7 下 JSP 默認的 Java 語法仍舊是 1.6 的。在 JSP 里面嵌入 Java 1.7 特性的代碼會拋出“Resource specification not allowed here for source level below 1.7”的異常。于是需要修改 Tomcat/conf/web.xml 里面的配置文件,找到 servlet> 節點( servlet-name>jsp/servlet-name>  的才是),加入下面最后兩個 init-param 節點部分。注意是 servlet-name>jsp/servlet-name> 節點才可以,不是 default 節點(很相似)。

servlet> 
  servlet-name>jsp/servlet-name> 
  servlet-class>org.apache.jasper.servlet.JspServlet/servlet-class> 
  init-param> 
   param-name>fork/param-name> 
   param-value>false/param-value> 
  /init-param> 
  init-param> 
   param-name>xpoweredBy/param-name> 
   param-value>false/param-value> 
  /init-param> 
 
 
  init-param> 
   param-name>compilerSourceVM/param-name> 
   param-value>1.7/param-value> 
  /init-param> 
  init-param> 
   param-name>compilerTargetVM/param-name> 
   param-value>1.7/param-value> 
  /init-param> 
 
 
  load-on-startup>3/load-on-startup> 
 /servlet> 

訪問的 jsp 其實只有兩個 /index.jsp 和 /admin/index.jsp,分別是靜態頁面和后臺編輯頁面。/admin/action.jsp 用于接收保存的 action,數據由表單 POST 過來。functions.jsp 就是全部的業務邏輯代碼,通過 %@include file="functions.jsp"% ,它不能單獨給外界 url 訪問。

我們先看看 /index.jsp。

%@page pageEncoding="UTF-8"%> 
html> 
 head> 
  title>幫助/title> 
  meta charset="utf-8" /> 
   !--寬度 320px --> 
  meta name="viewport" content="width=320,user-scalable=0,initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0" /> 
  style> 
html { 
 font-size: 15px; 
} 
 
body { 
 padding: 0; 
 margin: 0 auto; 
 max-width: 600px; 
 -webkit-font-smoothing: antialiased; 
 font-family: "Microsoft YaHei", "ff-tisa-web-pro-1", "ff-tisa-web-pro-2", 
  "Lucida Grande", "Hiragino Sans GB", "Hiragino Sans GB W3", Arial; 
 background-color: #ebebeb; 
} 
 
h1 { 
 text-align: center; 
 font-size: 1.5rem; 
 letter-spacing: 2px; 
 color: #864c24; 
 border-bottom: #e0c494 solid 1px; 
 padding: 2% 0; 
} 
 
h2 { 
 font-size: 1rem; 
 letter-spacing: 1px; 
 color: #4c4c4c; 
 padding-bottom:0; 
 margin: 0; 
} 
 
p { 
 text-align: justify; 
 font-size: 1rem; 
 color: #818181; 
 margin: 1% 0; 
 margin-top:0; 
} 
 
ol { 
 padding: 0; 
 margin: 0; 
} 
 
ol { 
  
} 
 
ol>li>:first-child { 
 /* Make Firefox put the list marker inside */ 
 /* https://bugzilla.mozilla.org/show_bug.cgi?id=36854 "if list-style-position is inside, bullet takes own line" */ 
 display: inline; 
} 
 
ol>li>:first-child:after { 
 /* Add the margin that was lost w/ display: inline */ 
 /* Firefox 10 displays this as block */ 
 /* Safari 5.1.2 and Chrome 17.0.963.56 don't */ 
 content: ""; 
 display: block; 
} 
 
li { 
 padding: 5% 2%; 
 list-style-position: inside; 
 border-bottom: 1px solid #dddddb; 
} 
 
.text { 
 color: #a8a8a8; 
 font-size: 1rem; 
 font-weight: bold; 
 padding: 2%; 
} 
/style> 
 /head> 
 body> 
  !-- Editable AREA|START -->  h1>幫助/h1> 
  div class="text">常見問題/div> 
  ol> 
   li> 
    h2>Power TV的資費是怎樣收取的?/h2> 
    p>12元Power TV手機電視包月,產品代碼88888888,12元/月;省內用戶省內使用配送3G/月定向流量,流量僅用于使用Power TV,超過定向流量部分按標準資費收??; /p> 
   /li> 
   li> 
    h2>Power TV的資費是怎樣收取的?/h2> 
    p>12元Power TV手機電視包月,產品代碼88888888,12元/月;省內用戶省內使用配送3G/月定向流量,流量僅用于使用Power TV,超過定向流量部分按標準資費收??; /p> 
   /li> 
   li> 
    h2>Power TV的資費是怎樣收取的?/h2> 
    p>12元Power TV手機電視包月,產品代碼88888888,12元/月;省內用戶省內使用配送3G/月定向流量,流量僅用于使用Power TV,超過定向流量部分按標準資費收取; /p> 
   /li> 
   li> 
    h2>Power TV的資費是怎樣收取的?/h2> 
    p>12元Power TV手機電視包月,產品代碼88888888,12元/月;省內用戶省內使用配送3G/月定向流量,流量僅用于使用Power TV,超過定向流量部分按標準資費收??; /p> 
   /li> 
   li> 
    h2>Power TV的資費是怎樣收取的?/h2> 
    p>12元Power TV手機電視包月,產品代碼88888888,12元/月;省內用戶省內使用配送3G/月定向流量,流量僅用于使用Power TV,超過定向流量部分按標準資費收??; /p> 
   /li> 
   li> 
    h2>Power TV的資費是怎樣收取的?/h2> 
    p>12元Power TV手機電視包月,產品代碼88888888,12元/月;省內用戶省內使用配送3G/月定向流量,流量僅用于使用Power TV,超過定向流量部分按標準資費收??; /p> 
   /li> 
   li> 
    h2>Power TV的資費是怎樣收取的?/h2> 
    p>12元Power TV手機電視包月,產品代碼88888888,12元/月;省內用戶省內使用配送3G/月定向流量,流量僅用于使用Power TV,超過定向流量部分按標準資費收?。?/p> 
   /li> 
  /ol> 
  !-- Editable AREA|END --> 
 /body> 
/html> 

這份 JSP 與一般 JSP 并無特異,只不過大家有沒有留意到兩段注釋: !-- Editable AREA|START --> !-- Editable AREA|END --> ——這就是我們約定的“可編輯”范圍。當然,使用自定義的 HTML Tag 也可以,只要定義了一個范圍即可。一份網頁,無非是 HTML。對于其中欲編輯的東西,我們定義一個范圍指明哪些地方需要編輯,就可以了。至于為什么不讓全部的頁面可以編輯?是因為我們不想用戶對頁面其它部分進行編輯,萬一修改了的關鍵地方造成了錯誤,那可不好。

好了,怎么讓這個 /index.jsp 編輯呢?就是利用 Java 讀取磁盤的方法來做的。在這個之前,得先登錄到 /admin/index.jsp。這里我們通過 HTTP Basic Authorization 來做用戶認證,無須數據庫。如果需要修改 賬號密碼,打開 admin/functions.jsp,編輯頭部分即可:

%!
 public static final String userid = "admin", pwd = "123123"; 
 ....
%>

不過筆者調試 HTTP Basic Authorization 遇到了個小問題,就是瀏覽器彈出的對話框,不知怎么修改其中的提示文字,試過幾種方法,要么不顯示,要么亂碼。如果知道的童鞋還請告知一二!

action.jsp 也要作認證的限制,不然等于是個漏洞可以讓別人 POST 任何數據到頁面。

%@page pageEncoding="UTF-8"%> 
%@include file="functions.jsp"%> 
% 
 
if (checkAuth(request.getHeader("Authorization"), userid, pwd)) { 
 request.setCharacterEncoding("utf-8"); 
 if (request.getMethod().equalsIgnoreCase("POST")) { 
  String contentBody = request.getParameter("contentBody"), path = Mappath(getEditJSP(request)); 
  System.out.println("path:::" + path); 
  save_jsp_fileContent(path, contentBody); 
  out.println("script>alert('修改成功!');window.location = document.referrer;/script>"); 
 } else { 
  out.println("method error"); 
 } 
} else { 
 %> 
 html> 
 body> 
  非法登錄! 
 /body> 
 /html> 
 % 
} 
%> 

修改下頁面,點擊保存就可以修改頁面了。

至于 HTML 如何編輯?這個答案想必大家都清楚,使用 HTML 可視化編輯器即可,在線的哦,而不是什么 Dreamweaver、FrontPage、VS Web 之類啦。老人們用過的就是有 FCKEditror 呀、TinyMCE Editor,近幾年好像喜歡用國產了,我就不知道了?,F在這個用的是我自己寫,功能比較單一的。

核心邏輯是通過下面的代碼搞定的。

%@page pageEncoding="UTF-8" import="sun.misc.BASE64Decoder, java.io.*"%> 
%! 
public static final String userid = "admin", pwd = "86006966"; 
// 檢查 HTTP Basic 認證 
 
 /** 
  * 是否空字符串 
  * 
  * @param str 
  * @return 
  */ 
 public static boolean isEmptyString(String str) { 
  return str == null || str.trim().isEmpty(); 
 } 
 
 /** 
  * 是否不合法的數組 
  * 
  * @param arr 
  * @return 
  */ 
 public static boolean isBadArray(String[] arr) { 
  return arr == null || arr.length != 2; 
 } 
 
 /** 
  * 
  * @param authorization 
  *   認證后每次HTTP請求都會附帶上 Authorization 頭信息 
  * @param username 
  *   用戶名 
  * @param password 
  *   密碼 
  * @return true = 認證成功/ false = 需要認證 
  */ 
 public static boolean checkAuth(String authorization, String username, String password) { 
  if (isEmptyString(authorization)) 
   return false; 
 
  String[] basicArray = authorization.split("\\s+"); 
  if (isBadArray(basicArray)) 
   return false; 
 
  String idpass = null; 
  try { 
   byte[] buf = new BASE64Decoder().decodeBuffer(basicArray[1]); 
   idpass = new String(buf, "UTF-8"); 
  } catch (IOException e) { 
   e.printStackTrace(); 
   return false; 
  } 
 
  if (isEmptyString(idpass)) 
   return false; 
 
  String[] idpassArray = idpass.split(":"); 
  if (isBadArray(idpassArray)) 
   return false; 
 
  return username.equalsIgnoreCase(idpassArray[0])  password.equalsIgnoreCase(idpassArray[1]); 
 } 
 
 /** 
  * 可編輯標識開始 
  */ 
 private final static String startToken = "!-- Editable AREA|START -->"; 
 
 /** 
  * 可編輯標識結束 
  */ 
 private final static String endToken = "!-- Editable AREA|END -->"; 
 
 /** 
  * 根據 頁面中可編輯區域之標識,取出來。 
  * 
  * @param fullFilePath 
  *   完整的 jsp 文件路徑 
  * @return 可編輯內容 
  * @throws IOException 
  */ 
 public static String read_jsp_fileContent(String fullFilePath) throws IOException { 
  String jsp_fileContent = readFile(fullFilePath); 
 
  int start = jsp_fileContent.indexOf(startToken), end = jsp_fileContent.indexOf(endToken); 
 
  try { 
   jsp_fileContent = jsp_fileContent.substring(start + startToken.length(), end); 
  } catch (StringIndexOutOfBoundsException e) { 
   jsp_fileContent = null; 
 
   String msg = "頁面文件" + fullFilePath + "中沒有標記可編輯區域之標識。請參考:" + startToken + "/" + endToken; 
   throw new IOException(msg); 
  } 
 
  return jsp_fileContent; 
 } 
 
 /** 
  * 請求附帶文件參數,將其轉換真實的磁盤文件路徑 
  * 
  * @param rawFullFilePath 
  *   URL 提交過來的磁盤文件路徑,可能未包含文件名或加了很多 url 參數 
  * @return 完整的磁盤文件路徑 
  */ 
 static String getFullPathByRequestUrl(String rawFullFilePath) { 
  if (rawFullFilePath.indexOf(".jsp") == -1) 
   rawFullFilePath += "/index.jsp"; // 加上 擴展名 
 
  if (rawFullFilePath.indexOf("?") != -1) // 去掉 url 參數 
   rawFullFilePath = rawFullFilePath.replaceAll("\\?.*$", ""); 
 
  return rawFullFilePath; 
 } 
 
 /** 
  * 保存要修改的頁面 
  * 
  * @param rawFullFilePath 
  *   真實的磁盤文件路徑 
  * @param newContent 
  *   新提交的內容 
  * @throws IOException 
  */ 
 public static void save_jsp_fileContent(String rawFullFilePath, String newContent) throws IOException { 
  String fullFilePath = getFullPathByRequestUrl(rawFullFilePath); // 真實的磁盤文件路徑 
  String jsp_fileContent = readFile(fullFilePath), toDel_fileContent = read_jsp_fileContent(fullFilePath);// 讀取舊內容 
//System.out.println(jsp_fileContent); 
//System.out.println(toDel_fileContent); 
  if (toDel_fileContent != null) { 
   jsp_fileContent = jsp_fileContent.replace(toDel_fileContent, newContent); 
   save2file(fullFilePath, jsp_fileContent); // 保存新內容 
  } else { 
   throw new IOException("頁面文件中沒有標記可編輯區域之標識。請參考: startToken/endTpoken"); 
  } 
 } 
 
 /** 
  * 讀取文件 
  * 
  * @param filename 
  * @return 
  * @throws IOException 
  */ 
 public static String readFile(String filename) throws IOException { 
  File file = new File(filename); 
  if (!file.exists()) 
   throw new FileNotFoundException(filename + " 不存在!"); 
 
  try (FileInputStream is = new FileInputStream(file);) { 
   String line = null; 
   StringBuilder result = new StringBuilder(); 
 
   try (InputStreamReader isReader = new InputStreamReader(is, "UTF-8"); 
     BufferedReader reader = new BufferedReader(isReader);) { 
    while ((line = reader.readLine()) != null) { 
     result.append(line); 
     result.append('\n'); 
    } 
   } catch (IOException e) { 
    System.err.println(e); 
   } 
 
   return result.toString(); 
  } catch (IOException e) { 
   System.err.println("讀取文件流出錯!" + filename); 
   throw e; 
  } 
 } 
 
 /** 
  * 寫文件不能用 FileWriter,原因是會中文亂碼 
  * 
  * @param filename 
  * @param content 
  * @throws IOException 
  */ 
 public static void save2file(String filename, String content) throws IOException { 
  try (FileOutputStream out = new FileOutputStream(filename); 
    // OutputStreramWriter將輸出的字符流轉化為字節流輸出(字符流已帶緩沖) 
    OutputStreamWriter writer = new OutputStreamWriter(out, "UTF8");) { 
   writer.write(content); 
  } catch (IOException e) { 
   System.err.println("寫入文件" + filename + "失敗"); 
   throw e; 
  } 
 } 
  
 /** 
  * 輸入一個相對地址,補充成為絕對地址 相對地址轉換為絕對地址,并轉換斜杠 
  * 
  * @param relativePath 
  *   相對地址 
  * @return 絕對地址 
  */ 
 public String Mappath(String relativePath) { 
  String absoluteAddress = getServletContext().getRealPath(relativePath); // 絕對地址 
   
  if (absoluteAddress != null) 
   absoluteAddress = absoluteAddress.replace('\\', '/'); 
  return absoluteAddress; 
 } 
  
 public String getEditJSP(HttpServletRequest request) { 
  String uri = request.getRequestURI().replaceAll("admin/\\w+", "index"); 
  uri = uri.replace(request.getContextPath(), ""); 
  return uri; 
 } 
%> 

用戶憑賬號密碼登入簡易的后臺,通過可視化編輯器即可修改頁面內容,立刻修改,立刻產生效果,簡單快捷——把頁面開放出來允許自主編輯這樣會提高效率——減少來回修改的次數。

完整源碼下載:http://xiazai.jb51.net/201707/yuanma/jsp-page(jb51.net).rar

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • js 公式編輯器 - 自定義匹配規則 - 帶提示下拉框 - 動態獲取光標像素坐標
  • 不到200行 JavaScript 代碼實現富文本編輯器的方法
  • 使用JavaScript實現表格編輯器(實例講解)
  • Vue.js結合Ueditor富文本編輯器的實例代碼
  • JS模仿編輯器實時改變文本框寬度和高度大小的方法
  • 分享9個最好用的JavaScript開發工具和代碼編輯器
  • node.js集成百度UE編輯器
  • Javascript實現簡單的富文本編輯器附演示
  • javascript獲取ckeditor編輯器的值(實現代碼)
  • 4個頂級JavaScript高級文本編輯器

標簽:銅川 南京 廣州 內江 樂山 貸款邀約 黃石 大連

巨人網絡通訊聲明:本文標題《JSP實用教程之簡易頁面編輯器的實現方法(附源碼)》,本文關鍵詞  JSP,實用,教程,之,簡易,頁面,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《JSP實用教程之簡易頁面編輯器的實現方法(附源碼)》相關的同類信息!
  • 本頁收集關于JSP實用教程之簡易頁面編輯器的實現方法(附源碼)的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人小视频在线观看| 精品99999| 亚洲一级电影视频| 欧美激情一区二区三区| 在线视频综合导航| 国产剧情一区二区| 亚洲最大成人网4388xx| 中文字幕亚洲一区二区va在线| 色婷婷久久综合| 欧美色图激情小说| 91精品在线观看入口| 国产精品青草久久| 国产精品三级av在线播放| 亚洲视频免费看| 午夜欧美2019年伦理| 蜜臀av在线播放一区二区三区| 日韩电影在线观看网站| 国产精品一区在线观看乱码| 国产原创一区二区| 99re这里只有精品视频首页| 777a∨成人精品桃花网| 国产精品无圣光一区二区| 亚洲福利视频三区| 国产高清亚洲一区| 色综合久久天天综合网| 久久综合狠狠综合| 樱桃视频在线观看一区| 国产丶欧美丶日本不卡视频| 欧美视频一区二| 中文字幕一区免费在线观看 | 免费观看日韩av| 99国产精品国产精品久久| 欧美tickle裸体挠脚心vk| 亚洲欧美一区二区视频| 国内外成人在线| 欧美大尺度电影在线| 亚洲午夜一区二区三区| 91碰在线视频| 亚洲欧美日韩电影| 色偷偷久久人人79超碰人人澡| 国产网站一区二区| 国产精品羞羞答答xxdd| 久久久久国产一区二区三区四区| 国产福利一区二区三区在线视频| 欧美三级蜜桃2在线观看| 国产精品不卡视频| 91麻豆国产福利精品| 亚洲欧洲国产日韩| 一本高清dvd不卡在线观看 | 国产婷婷色一区二区三区四区| 亚洲曰韩产成在线| 欧美三级中文字| 久久国产欧美日韩精品| 中文字幕欧美激情一区| 99久久国产综合精品麻豆| 亚洲国产视频一区| 久久网站热最新地址| 成人一区二区三区视频在线观看| 久久精品一区二区三区四区| 99免费精品在线| 欧美性色欧美a在线播放| 亚洲欧洲av在线| 国产校园另类小说区| 日韩久久久久久| 欧美肥胖老妇做爰| 欧美日韩中字一区| 精品伦理精品一区| 中文字幕精品综合| 亚洲日本丝袜连裤袜办公室| 亚洲成人自拍网| 国产专区欧美精品| 欧洲一区在线电影| 亚洲精品在线免费播放| 国产精品美女一区二区三区 | 高清免费成人av| 成人爱爱电影网址| 日韩一区二区三区在线| 亚洲婷婷国产精品电影人久久| 亚洲精品v日韩精品| 国产一区91精品张津瑜| 欧美挠脚心视频网站| 精品国产123| 亚洲成人激情综合网| 91麻豆视频网站| 国产精品欧美久久久久一区二区| 美国毛片一区二区| 欧美视频在线一区二区三区| 国产成人精品三级| 99久久婷婷国产综合精品| 国产福利视频一区二区三区| 在线免费精品视频| 国产精品久久久久天堂| 国产suv精品一区二区6| 日韩免费电影网站| 美美哒免费高清在线观看视频一区二区| 在线观看91精品国产入口| 亚洲最快最全在线视频| 欧美性大战久久久久久久蜜臀 | 欧美va亚洲va在线观看蝴蝶网| 天堂成人免费av电影一区| 欧美日产在线观看| 图片区小说区国产精品视频| 欧美午夜免费电影| 日韩不卡一二三区| 日韩欧美一卡二卡| 国产激情一区二区三区四区| 中文字幕电影一区| 色偷偷久久一区二区三区| 无吗不卡中文字幕| 久久这里都是精品| 91欧美激情一区二区三区成人| 亚洲乱码日产精品bd| 日韩一区二区在线看片| 丁香天五香天堂综合| 亚洲午夜在线视频| 欧美国产综合色视频| 精品视频免费在线| 国产精品影视在线观看| 香蕉久久夜色精品国产使用方法| www一区二区| 6080日韩午夜伦伦午夜伦| 97久久久精品综合88久久| 精品毛片乱码1区2区3区 | www.成人在线| 奇米精品一区二区三区在线观看| 国产人成一区二区三区影院| 欧美男女性生活在线直播观看| 成人黄色国产精品网站大全在线免费观看| 亚洲三级免费电影| 亚洲国产精品激情在线观看| 欧美亚洲一区二区在线| 日韩av高清在线观看| 亚洲自拍偷拍九九九| 久久久久高清精品| 日韩一区二区不卡| 日韩精品中文字幕一区二区三区 | 久久综合狠狠综合| 精品三级av在线| 精品国产欧美一区二区| 精品久久久久久久久久久久久久久 | 日韩午夜中文字幕| 日韩亚洲欧美中文三级| 日韩欧美另类在线| 日韩无一区二区| 久久久精品国产99久久精品芒果| 欧美mv日韩mv国产网站app| 欧美人狂配大交3d怪物一区| 在线电影院国产精品| 欧美妇女性影城| 亚洲精品在线三区| 国产色产综合产在线视频| 国产日韩精品久久久| 欧美激情一区在线观看| 亚洲精品成人精品456| 亚洲第一福利一区| 国产大片一区二区| 91丝袜美腿高跟国产极品老师 | 中文一区在线播放| 亚洲一区二区3| 国产精品自拍毛片| 国产在线一区二区综合免费视频| a4yy欧美一区二区三区| 在线亚洲+欧美+日本专区| 国产亚洲精品久| 5566中文字幕一区二区电影| 波多野结衣中文字幕一区 | 99久久精品国产导航| 91精品国产色综合久久久蜜香臀| 国产校园另类小说区| 久久久久久电影| 国产清纯白嫩初高生在线观看91 | 国产精品一品二品| 欧美天堂一区二区三区| 国产丝袜欧美中文另类| 五月激情六月综合| 日本乱人伦一区| 综合亚洲深深色噜噜狠狠网站| 国产一区二区精品在线观看| 91精品国产免费久久综合| 一区二区三区四区av| 97se亚洲国产综合自在线| 自拍偷拍欧美精品| 色噜噜夜夜夜综合网| 亚洲一区二区视频在线观看| 色天使久久综合网天天| 中文字幕一区二区在线观看 | 欧美精品一区男女天堂| 韩国v欧美v日本v亚洲v| 国产精品视频免费看| 91啪亚洲精品| 性做久久久久久免费观看| 日韩一区二区电影在线| 欧美精品久久一区| 欧美伊人精品成人久久综合97| 国产午夜久久久久| 国产大陆亚洲精品国产| 中文一区一区三区高中清不卡| 国产宾馆实践打屁股91| 国产精品久久久久久久午夜片| 男人的天堂亚洲一区|