欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javaweb判斷當前請求是否為移動設備訪問的方法

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

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

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

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

package com.tgb.util; 
 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
 
/** 
 * 檢測是否為移動端設備訪問 
 * 
 * @author  : 
 * @group  : 
 * @Version  : 
 * @Date  : 
 */ 
public class CheckMobile { 
  
 // \b 是單詞邊界(連著的兩個(字母字符 與 非字母字符) 之間的邏輯上的間隔), 
 // 字符串在編譯時會被轉碼一次,所以是 "\\b" 
 // \B 是單詞內部邏輯間隔(連著的兩個字母字符之間的邏輯上的間隔) 
 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"; 
  
 //移動設備正則匹配:手機端、平板 
 static Pattern phonePat = Pattern.compile(phoneReg, Pattern.CASE_INSENSITIVE); 
 static Pattern tablePat = Pattern.compile(tableReg, Pattern.CASE_INSENSITIVE); 
  
 /** 
  * 檢測是否是移動設備訪問 
  * 
  * @Title: check 
  * @Date : 
  * @param userAgent 瀏覽器標識 
  * @return true:移動設備接入,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; 
  } 
 } 
} 

 使用方式:

 /** 
 * 檢查訪問方式是否為移動端 
 * 
 * @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)記錄訪問方式(移動端或pc端) 
 if(null==session.getAttribute("ua")){ 
  try{ 
   //獲取ua,用來判斷是否為移動端訪問 
   String userAgent = request.getHeader( "USER-AGENT" ).toLowerCase(); 
   if(null == userAgent){ 
    userAgent = ""; 
   } 
   isFromMobile=CheckMobile.check(userAgent); 
   //判斷是否為移動端訪問 
   if(isFromMobile){ 
    System.out.println("移動端訪問"); 
    session.setAttribute("ua","mobile"); 
   } else { 
    System.out.println("pc端訪問"); 
    session.setAttribute("ua","pc"); 
   } 
  }catch(Exception e){} 
 }else{ 
  isFromMobile=session.getAttribute("ua").equals("mobile"); 
 } 
  
 return isFromMobile; 
} 

在登錄的時候,或者在action的execute中調用這個方法,不用改動原先的業(yè)務邏輯,即可判斷請求的是否為移動端,然后再根據(jù)結果去做相應處理,應該就簡單多了。

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java 程序設計總復習題(java基礎代碼)

    Java 程序設計總復習題(java基礎代碼)

    這篇文章主要介紹了Java 程序設計總復習題,主要是java基礎代碼,方便學習java的同學
    2021-05-05
  • java獲取兩個List集合的交集代碼示例

    java獲取兩個List集合的交集代碼示例

    這篇文章主要給大家介紹了關于java獲取兩個List集合交集的相關資料,我們可以使用Stream操作來對集合進行一系列的操作,其中包括求交集,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Java程序快速合并多個Word(docx)文檔

    Java程序快速合并多個Word(docx)文檔

    這篇文章主要為大家介紹了如何使用Java程序快速合并多個Word(docx)文檔實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • SpringBoot集成內存數(shù)據(jù)庫H2的實踐

    SpringBoot集成內存數(shù)據(jù)庫H2的實踐

    h2是內存數(shù)據(jù)庫,查詢高效,可以在開發(fā)初期使用它。本文主要介紹了SpringBoot集成內存數(shù)據(jù)庫H2的實踐,具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • java開發(fā)ServiceLoader實現(xiàn)機制及SPI應用

    java開發(fā)ServiceLoader實現(xiàn)機制及SPI應用

    這篇文章主要為大家介紹了java開發(fā)ServiceLoader實現(xiàn)機制及SPI應用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • java實現(xiàn)微博后臺登錄發(fā)送微博

    java實現(xiàn)微博后臺登錄發(fā)送微博

    這篇文章主要為大家詳細介紹了java實現(xiàn)微博后臺登錄發(fā)送微博的相關資料,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Java中String類常用方法總結詳解

    Java中String類常用方法總結詳解

    String類是一個很常用的類,是Java語言的核心類,用來保存代碼中的字符串常量的,并且封裝了很多操作字符串的方法。本文為大家總結了一些String類常用方法的使用,感興趣的可以了解一下
    2022-08-08
  • spring?boot?Slf4j日志框架的體系結構詳解

    spring?boot?Slf4j日志框架的體系結構詳解

    在項目開發(fā)中記錄日志是必做的一件事情,springboot內置了slf4j日志框架,下面這篇文章主要給大家介紹了關于spring?boot?Slf4j日志框架的體系結構,需要的朋友可以參考下
    2022-05-05
  • Java 將一個字符重復n遍過程詳解

    Java 將一個字符重復n遍過程詳解

    這篇文章主要介紹了Java 將一個字符重復n遍過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 深入解析Java的線程同步以及線程間通信

    深入解析Java的線程同步以及線程間通信

    這篇文章主要介紹了Java的線程同步以及線程間通信,多線程編程是Java學習中的重點和難點,需要的朋友可以參考下
    2015-09-09

最新評論