最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javaweb判斷當(dāng)前請(qǐng)求是否為移動(dòng)設(shè)備訪問(wèn)的方法

 更新時(shí)間:2017年05月09日 16:01:34   作者:龍軒  
這篇文章主要為大家詳細(xì)介紹了javaweb判斷當(dāng)前請(qǐng)求是否為移動(dòng)設(shè)備訪問(wèn)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

這段時(shí)間都是在做pc端的業(yè)務(wù),結(jié)果經(jīng)理找到我說(shuō),可能要做移動(dòng)端的應(yīng)用,后臺(tái)邏輯還是用我寫的邏輯,但是需要改動(dòng)一些,看看怎么處理。

由于移動(dòng)端和pc端還是稍微有些區(qū)別的,我覺(jué)得最好是在一個(gè)地兒統(tǒng)一判斷,而且不要改動(dòng)原先的代碼,這樣可以從一定程度上減少bug的數(shù)量。我的想法是首先應(yīng)該判斷當(dāng)前請(qǐng)求是否為移動(dòng)端,然后設(shè)一個(gè)標(biāo)識(shí)到session中,然后就可以隨便處理了。不管你是單獨(dú)處理,還是統(tǒng)一處理,直接讀取session就可以做相應(yīng)的判斷了。

我封裝成了一個(gè)類,現(xiàn)在分享給大家:

package com.tgb.util; 
 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
 
/** 
 * 檢測(cè)是否為移動(dòng)端設(shè)備訪問(wèn) 
 * 
 * @author  : 
 * @group  : 
 * @Version  : 
 * @Date  : 
 */ 
public class CheckMobile { 
  
 // \b 是單詞邊界(連著的兩個(gè)(字母字符 與 非字母字符) 之間的邏輯上的間隔), 
 // 字符串在編譯時(shí)會(huì)被轉(zhuǎn)碼一次,所以是 "\\b" 
 // \B 是單詞內(nèi)部邏輯間隔(連著的兩個(gè)字母字符之間的邏輯上的間隔) 
 static String phoneReg = "\\b(ip(hone|od)|android|opera m(ob|in)i" 
   +"|windows (phone|ce)|blackberry" 
   +"|s(ymbian|eries60|amsung)|p(laybook|alm|rofile/midp" 
   +"|laystation portable)|nokia|fennec|htc[-_]" 
   +"|mobile|up.browser|[1-4][0-9]{2}x[1-4][0-9]{2})\\b"; 
 static String tableReg = "\\b(ipad|tablet|(Nexus 7)|up.browser" 
   +"|[1-4][0-9]{2}x[1-4][0-9]{2})\\b"; 
  
 //移動(dòng)設(shè)備正則匹配:手機(jī)端、平板 
 static Pattern phonePat = Pattern.compile(phoneReg, Pattern.CASE_INSENSITIVE); 
 static Pattern tablePat = Pattern.compile(tableReg, Pattern.CASE_INSENSITIVE); 
  
 /** 
  * 檢測(cè)是否是移動(dòng)設(shè)備訪問(wèn) 
  * 
  * @Title: check 
  * @Date : 
  * @param userAgent 瀏覽器標(biāo)識(shí) 
  * @return true:移動(dòng)設(shè)備接入,false:pc端接入 
  */ 
 public static boolean check(String userAgent){ 
  if(null == userAgent){ 
   userAgent = ""; 
  } 
  // 匹配 
  Matcher matcherPhone = phonePat.matcher(userAgent); 
  Matcher matcherTable = tablePat.matcher(userAgent); 
  if(matcherPhone.find() || matcherTable.find()){ 
   return true; 
  } else { 
   return false; 
  } 
 } 
} 

 使用方式:

 /** 
 * 檢查訪問(wèn)方式是否為移動(dòng)端 
 * 
 * @Title: check 
 * @Date : 
 * @param request 
 * @throws IOException 
 */ 
public boolean check(HttpServletRequest request,HttpServletResponse response) throws IOException{ 
 boolean isFromMobile=false; 
  
 HttpSession session= request.getSession(); 
 //檢查是否已經(jīng)記錄訪問(wèn)方式(移動(dòng)端或pc端) 
 if(null==session.getAttribute("ua")){ 
  try{ 
   //獲取ua,用來(lái)判斷是否為移動(dòng)端訪問(wèn) 
   String userAgent = request.getHeader( "USER-AGENT" ).toLowerCase(); 
   if(null == userAgent){ 
    userAgent = ""; 
   } 
   isFromMobile=CheckMobile.check(userAgent); 
   //判斷是否為移動(dòng)端訪問(wèn) 
   if(isFromMobile){ 
    System.out.println("移動(dòng)端訪問(wèn)"); 
    session.setAttribute("ua","mobile"); 
   } else { 
    System.out.println("pc端訪問(wèn)"); 
    session.setAttribute("ua","pc"); 
   } 
  }catch(Exception e){} 
 }else{ 
  isFromMobile=session.getAttribute("ua").equals("mobile"); 
 } 
  
 return isFromMobile; 
} 

在登錄的時(shí)候,或者在action的execute中調(diào)用這個(gè)方法,不用改動(dòng)原先的業(yè)務(wù)邏輯,即可判斷請(qǐng)求的是否為移動(dòng)端,然后再根據(jù)結(jié)果去做相應(yīng)處理,應(yīng)該就簡(jiǎn)單多了。

其實(shí)我在做的過(guò)程中,還是遇到了一個(gè)比較頭疼的問(wèn)題。經(jīng)理說(shuō)移動(dòng)端的應(yīng)用要求使用json格式,所以我想統(tǒng)一做一個(gè)處理,如果是從移動(dòng)端訪問(wèn),那么就把request和session中設(shè)置的Attribute全部讀取到map或者list中,然后再轉(zhuǎn)化為json格式輸出。想法的美好的,結(jié)果有點(diǎn)小殘酷。就拿登錄來(lái)說(shuō),登錄以后要跳轉(zhuǎn)到list.jsp頁(yè),結(jié)果現(xiàn)在直接輸出list中的數(shù)據(jù)了,但是頁(yè)面沒(méi)有跳轉(zhuǎn)。頁(yè)面跳轉(zhuǎn)和返回json是沖突的。輸出json的話,輸出流就會(huì)關(guān)閉,不讓再跳轉(zhuǎn),否則會(huì)提示錯(cuò)誤。不知道大家有沒(méi)有好的解決方案,如果不行的話,只能每個(gè)請(qǐng)求單獨(dú)處理了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MybatisPlus代碼生成器使用示例

    MybatisPlus代碼生成器使用示例

    MyBatis-Plus自動(dòng)化的生成與數(shù)據(jù)庫(kù)表對(duì)應(yīng)的Java代碼文件,本文主要介紹了MybatisPlus代碼生成器使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • springboot如何通過(guò)session實(shí)現(xiàn)單點(diǎn)登入詳解

    springboot如何通過(guò)session實(shí)現(xiàn)單點(diǎn)登入詳解

    單點(diǎn)登錄(SSO)的定義是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于springboot如何通過(guò)session實(shí)現(xiàn)單點(diǎn)登入的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Java方法遞歸的形式和常見(jiàn)遞歸算法(方法遞歸結(jié)合File類查找文件)

    Java方法遞歸的形式和常見(jiàn)遞歸算法(方法遞歸結(jié)合File類查找文件)

    方法遞歸方法直接調(diào)用自己或者間接調(diào)用自己的形式稱為方法遞歸( recursion),遞歸做為一種算法在程序設(shè)計(jì)語(yǔ)言中廣泛應(yīng)用,這篇文章主要介紹了Java方法遞歸的形式和常見(jiàn)遞歸算法-方法遞歸結(jié)合File類查找文件,需要的朋友可以參考下
    2023-02-02
  • 使用Java自帶的mail?API實(shí)現(xiàn)郵件發(fā)送功能全過(guò)程

    使用Java自帶的mail?API實(shí)現(xiàn)郵件發(fā)送功能全過(guò)程

    電子郵件的應(yīng)用非常廣泛,例如在某網(wǎng)站注冊(cè)了一個(gè)賬戶,自動(dòng)發(fā)送一封歡迎郵件,通過(guò)郵件找回密碼,自動(dòng)批量發(fā)送活動(dòng)信息等,下面這篇文章主要給大家介紹了關(guān)于如何使用Java自帶的mail?API實(shí)現(xiàn)郵件發(fā)送功能的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • 解決Request獲取請(qǐng)求數(shù)據(jù)中文亂碼問(wèn)題

    解決Request獲取請(qǐng)求數(shù)據(jù)中文亂碼問(wèn)題

    這篇文章主要介紹了Request獲取請(qǐng)求數(shù)據(jù)中文亂碼問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java設(shè)計(jì)模式之初識(shí)行為型模式

    Java設(shè)計(jì)模式之初識(shí)行為型模式

    今天帶大家學(xué)習(xí)Java設(shè)計(jì)模式的相關(guān)知識(shí)點(diǎn),文中對(duì)Java行為型模式做了非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Springboot?對(duì)接支付寶實(shí)現(xiàn)掃碼支付功能

    Springboot?對(duì)接支付寶實(shí)現(xiàn)掃碼支付功能

    本文介紹了如何在Spring?Boot項(xiàng)目中實(shí)現(xiàn)支付寶支付功能,包括沙箱環(huán)境配置、依賴引入、配置參數(shù)、訂單類定義、測(cè)試接口編寫等步驟,通過(guò)不同場(chǎng)景下的請(qǐng)求方式(PC端、二維碼、回調(diào)處理、定時(shí)查詢支付結(jié)果),展示了如何與支付寶API進(jìn)行交互,感興趣的朋友一起看看吧
    2025-03-03
  • Java鎖擦除與鎖粗化概念和使用詳解

    Java鎖擦除與鎖粗化概念和使用詳解

    這篇文章主要介紹了Java鎖擦除與鎖粗化概念和使用,鎖擦除的主要判定依據(jù)來(lái)源于逃逸分析的數(shù)據(jù)支持,如果判斷在一段代碼中,堆上的所有數(shù)據(jù)都不會(huì)逃逸出去從而被其他線程訪問(wèn)到,那就可以把它們當(dāng)做棧上數(shù)據(jù)對(duì)待,認(rèn)為它們是線程私有的,同步加鎖自然就無(wú)須進(jìn)行
    2023-02-02
  • Java中new關(guān)鍵字和newInstance方法的區(qū)別分享

    Java中new關(guān)鍵字和newInstance方法的區(qū)別分享

    在初始化一個(gè)類,生成一個(gè)實(shí)例的時(shí)候,newInstance()方法和new關(guān)鍵字除了一個(gè)是方法一個(gè)是關(guān)鍵字外,最主要的區(qū)別是創(chuàng)建對(duì)象的方式不同
    2013-07-07
  • Java8新特性O(shè)ptional類及新時(shí)間日期API示例詳解

    Java8新特性O(shè)ptional類及新時(shí)間日期API示例詳解

    這篇文章主要為大家介紹了Java8新特性O(shè)ptional類及新時(shí)間日期API示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評(píng)論

靖江市| 惠水县| 麟游县| 岚皋县| 育儿| 武威市| 乐山市| 武夷山市| 渭南市| 寿阳县| 英吉沙县| 嘉善县| 平昌县| 保山市| 平利县| 汉中市| 龙岩市| 黄山市| 嘉禾县| 昆明市| 隆昌县| 隆安县| 独山县| 沁阳市| 广宁县| 宁德市| 辽源市| 合作市| 黔南| 铜梁县| 栖霞市| 洪洞县| 泾阳县| 宜章县| 宜兴市| 板桥市| 鄯善县| 靖安县| 岳普湖县| 蒲江县| 军事|