服务端判断客户端是移动端浏览器还是PC端浏览器(不完整,待补充)

1,320 阅读2分钟

问题及解决办法:

在开发过程中,有时候业务要求需要对移动端和PC端分别处理,如果是移动端,那么返回页面A,如果是PC端,那么返回页面B,而判断浏览器是移动端还是PC端,我们一般通过user-agent判断,服务端和前端js都可以获取到user-agent并作出判断,这里分享的是服务端做这个处理。

java代码:
    /**
     * 判断是否是手机浏览器
     * @param request
     * @return
     */
    public static Boolean isMoblieBrowser(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" };
        String ua = request.getHeader("user-agent");
        if (org.apache.commons.lang3.StringUtils.isNotBlank(ua)) {
            for (String mobileAgent : mobileAgents) {
                if (ua.toLowerCase().indexOf(mobileAgent) >= 0) {
                    isMoblie = true;
                    break;
                }
            }
        }

        return isMoblie;
    }

这里将常用到的手机浏览器ua关键词列举出来放在一个数组里,然后获取当前浏览器的ua,判断当前浏览器的ua是否包含上面数组里的某一个,若找到了包含的元素,则是手机浏览器。
测试方法代码:

    @RequestMapping("")
    public ModelAndView test(HttpServletRequest request) {
        ModelAndView mv = new ModelAndView();
        System.out.println("是否手机浏览器:"+isMoblieBrowser(request));
        if(isMoblieBrowser(request)){
            mv.setViewName("mobile");
        }else{
            mv.setViewName("pc");
        }
        return mv;
    }

这里通过判断是否是手机浏览器然后返回不同的页面,进行不同的业务处理。
原文作者技术博客:www.jianshu.com/u/ac4daaeec…

借鉴下~感谢

总结

查了一些资料,有几种说法,手机对应的服务器和电脑浏览器对应的服务器可以一样,也可以不一样,一样的话就是加一个处理就可以了,然后搜到了这篇blog。这篇blog讨论的问题是在同一个服务器上的基础上出现的,所以目前来看用的是同一个服务器。待解决待补充,时间很赶,总结leetcode题目吧