java后臺判斷客戶端是手機(jī)/PC并返回不同頁面的實(shí)例
這個代碼其實(shí)不是由我本人發(fā)現(xiàn)的,而是在翻看公司項(xiàng)目時無意間發(fā)現(xiàn),覺得很實(shí)用所以拿出來大家分享。
框架:Struts2+spring+ibatis,
主要實(shí)現(xiàn)是依靠Http請求頭Header中的 "User-Agent" 來完成,好了, 廢話不多說直接上代碼。
Action中:
public String execute() { HttpServletRequest request = ServletActionContext.getRequest(); boolean isMoblie = JudgeIsMoblie(request); if(isMoblie){ return "phone"; } return "pc"; } public boolean JudgeIsMoblie(HttpServletRequest request) { boolean isMoblie = false; String[] mobileAgents = { "iphone", "android", "phone", "mobile", "wap", "netfront", "java", "opera mobi", "opera mini", "ucweb", "windows ce", "symbian", "series", "webos", "sony", "blackberry", "dopod", "nokia", "samsung", "palmsource", "xda", "pieplus", "meizu", "midp", "cldc", "motorola", "foma", "docomo", "up.browser", "up.link", "blazer", "helio", "hosin", "huawei", "novarra", "coolpad", "webos", "techfaith", "palmsource", "alcatel", "amoi", "ktouch", "nexian", "ericsson", "philips", "sagem", "wellcom", "bunjalloo", "maui", "smartphone", "iemobile", "spice", "bird", "zte-", "longcos", "pantech", "gionee", "portalmmm", "jig browser", "hiptop", "benq", "haier", "^lct", "320x320", "240x320", "176x220", "w3c ", "acs-", "alav", "alca", "amoi", "audi", "avan", "benq", "bird", "blac", "blaz", "brew", "cell", "cldc", "cmd-", "dang", "doco", "eric", "hipt", "inno", "ipaq", "java", "jigs", "kddi", "keji", "leno", "lg-c", "lg-d", "lg-g", "lge-", "maui", "maxo", "midp", "mits", "mmef", "mobi", "mot-", "moto", "mwbp", "nec-", "newt", "noki", "oper", "palm", "pana", "pant", "phil", "play", "port", "prox", "qwap", "sage", "sams", "sany", "sch-", "sec-", "send", "seri", "sgh-", "shar", "sie-", "siem", "smal", "smar", "sony", "sph-", "symb", "t-mo", "teli", "tim-", /*"tosh",*/ "tsm-", "upg1", "upsi", "vk-v", "voda", "wap-", "wapa", "wapi", "wapp", "wapr", "webc", "winw", "winw", "xda", "xda-", "Googlebot-Mobile" }; if (request.getHeader("User-Agent") != null) { for (String mobileAgent : mobileAgents) { <span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;">//這里本寶寶表示不怎么了解它的內(nèi)部原理,但是知道個大概意思就得了。</span> if (request.getHeader("User-Agent").toLowerCase() .indexOf(mobileAgent) >= 0) { isMoblie = true; break; } } } return isMoblie; }
Struts2
<span style="white-space:pre"> </span><action name="name" class="你自己的action類"> <result name="pc">download/main.jsp</result> <result name="phone">download/productPH.jsp</result> </action>
好了,代碼就只是這么多,木有了木有了。。。 是不是感覺很簡單的說,
雖然不是我寫出來的,但是看到這個代碼,也是有一種收獲的,其實(shí)很多設(shè)置都是包含在請求頭中的,因?yàn)椴还苁鞘裁礊g覽器什么設(shè)備,它要通過http去調(diào)用一個請求,那么它就必定是有http協(xié)議,只要精通http協(xié)議,那么啥事都好辦(表示本屌目前不懂http協(xié)議,而后努力學(xué)習(xí)學(xué)習(xí),再來裝逼)~~
以上這篇java后臺判斷客戶端是手機(jī)/PC并返回不同頁面的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于SpringBoot和Leaflet的行政區(qū)劃地圖掩膜效果實(shí)戰(zhàn)教程
本文講解的是一種圖層級的掩膜,即使用行政區(qū)劃圖層來進(jìn)行掩膜,使用場景為,用戶只需要在地圖頁面中展示目標(biāo)行政區(qū)劃內(nèi)的影像信息,對于行政邊界外的影像,這篇文章主要介紹了基于SpringBoot和Leaflet的行政區(qū)劃地圖掩膜效果實(shí)戰(zhàn),需要的朋友可以參考下2024-05-05idea打包java可執(zhí)行jar包的實(shí)現(xiàn)步驟
這篇文章主要介紹了idea打包java可執(zhí)行jar包的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Java實(shí)現(xiàn)Android拼圖游戲設(shè)計(jì)過程解析
這篇文章主要介紹了Java實(shí)現(xiàn)Android拼圖游戲設(shè)計(jì)過程解析,下面文章要接受的這是一款基于 Java 開發(fā)的移動端安卓小游戲,可以作為大家在學(xué)習(xí)期間的一個小練習(xí),接下來和小編一起進(jìn)入文章學(xué)習(xí)具體內(nèi)容吧2022-02-02JAVA線程sleep()和wait()詳解及實(shí)例
這篇文章主要介紹了JAVA線程sleep()和wait()詳解及實(shí)例的相關(guān)資料,探討一下sleep()和wait()方法的區(qū)別和實(shí)現(xiàn)機(jī)制,需要的朋友可以參考下2017-05-05Selenium Webdriver實(shí)現(xiàn)截圖功能的示例
今天小編就為大家分享一篇Selenium Webdriver實(shí)現(xiàn)截圖功能的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05解析Linux系統(tǒng)中JVM內(nèi)存2GB上限的詳解
本篇文章是對Linux系統(tǒng)中JVM內(nèi)存2GB上限進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05