服务端判断客户端是移动端浏览器还是PC端浏览器

在开发过程中,有时候业务要求需要对移动端和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;
    }

这里通过判断是否是手机浏览器然后返回不同的页面,进行不同的业务处理。
原文作者技术博客:https://www.jianshu.com/u/ac4daaeecdfe
95后前端妹子一枚,爱阅读,爱交友,将工作中遇到的问题记录在这里,希望给每一个看到的你能带来一点帮助。
欢迎留言交流

你可能感兴趣的:(服务端判断客户端是移动端浏览器还是PC端浏览器)