首页 > 编程语言 >java web 判断请求是手机端还是PC端(代码库)

java web 判断请求是手机端还是PC端(代码库)

时间:2022-08-16 10:36:34浏览次数:57  
标签:web java Pattern private PC session static userAgent isFromMobile

判断类

package config;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CheckMobile {

    private CheckMobile() {
    }

    // \b 是单词边界(连着的两个(字母字符 与 非字母字符) 之间的逻辑上的间隔),
    // 字符串在编译时会被转码一次,所以是 "\\b"
    // \B 是单词内部逻辑间隔(连着的两个字母字符之间的逻辑上的间隔)
    private 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";
    private static String tableReg = "\\b(ipad|tablet|(Nexus 7)|up.browser"
            +"|[1-4][0-9]{2}x[1-4][0-9]{2})\\b";

    //移动设备正则匹配:手机端、平板
    private static Pattern phonePat = Pattern.compile(phoneReg, Pattern.CASE_INSENSITIVE);
    private static Pattern tablePat = Pattern.compile(tableReg, Pattern.CASE_INSENSITIVE);

    /**
     * 检测是否是移动设备访问
     * @param userAgent 浏览器标识
     * @return true:移动设备接入,false:pc端接入
     */
    public static boolean check(String userAgent){
        if(null == userAgent){
            userAgent = "";
        }
        userAgent = userAgent.toLowerCase();
        // 匹配
        Matcher matcherPhone = phonePat.matcher(userAgent);
        Matcher matcherTable = tablePat.matcher(userAgent);
        return matcherPhone.find() || matcherTable.find();
    }
}

 

调用点

private static boolean isFromMobile(HttpServletRequest request, HttpSession session) {
    //检查是否已经记录访问方式(移动端或pc端)
    boolean isFromMobile = false;
    if (null == session.getAttribute("ua")) {
        //获取ua,用来判断是否为移动端访问
        String userAgent = request.getHeader("USER-AGENT");
        isFromMobile = CheckMobile.check(userAgent);
        //判断是否为移动端访问
        if (isFromMobile) {
            session.setAttribute("ua", "mobile");
        } else {
            session.setAttribute("ua", "pc");
        }
    } else {
        isFromMobile = "mobile".equals(session.getAttribute("ua"));
    }
    return isFromMobile;
}

 

原创文章,欢迎转载,转载请注明出处!

 

标签:web,java,Pattern,private,PC,session,static,userAgent,isFromMobile
From: https://www.cnblogs.com/acm-bingzi/p/pc_or_mobile.html

相关文章

  • Javaweb08-Ajax项目-分页条件查询 + 增删改
    1、登录1.1登录form表单<formaction="<%=request.getContextPath()%>/loginAnime"method="get"><tableborder="1px"align="center"width="40%"cellspacing="......
  • 【JAVA UI】abilitySlice或ability以Action方式跳转
    ​参考资料PageAbility基本概念【HarmonyOS】【JAVAUI】abilitySlice和ability跳转方式【HarmonyOS】【FAQ】鸿蒙问题合集4代码实现1、准备工作新建一个TwoAbilit......
  • 【快应用】webview接口打开网页,网页会被自动放大,如何适配手机大小
    【现象描述】通过webview接口打开网页,网页会被自动放大,问题代码如下:webview.loadUrl({url:'https://cdn.langqing.club/jQuery/index.html',allowthirdpartycookies:......
  • 【Java面试】聊聊你知道的设计模式
    “聊聊你知道的设计模式!”这个问题很简单,但是要让面试官认可你的回答,那还是得花点心思。大家好,我是Mic,一个工作了14年的Java程序员。今天给大家分享一下,当遇到这种比较......
  • windows查看java进程情况
    1.场景有时候我们启动了多个java程序,需要查看各个java程序占用的的内存情况。打开任务管理器选择“进程”,发现有好多java.exe进程,无法直接查看内存使用情况。 jconsol......
  • Day3(复习:java流程控制)
    Java流程控制 Scanner对象用来获取用户的输入基础语法:Scanners=newScanner(System.in) 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取器要......
  • 在IIS中部署.NET Core WebApi程序(转载)
    环境说明部署NETCore编写WebApi并部署为IIS站点,演示环境如下:VisualStudio2019(v16.8).NetCore3.1一台安装了IIS的设备Note:.NETCore3.0项目开发需要vs2019(......
  • 将WebAPI(core 3.1)部署在IIS上(转)
    使用的是VS2019社区版,WebAPI的版本是.netcore3.1,其他版本可能略有不同,请根据情况适当更改。1.打开微软.net官网,点击HostingBundle下载安装,安装好后重启电脑2.打开IIS,双......
  • JavaWeb阶段性项目2:QQZone项目梳理
    前置知识前置准备知识准备已掌握JavaSE/MySQL/JDBC+HTML/CSS/JavaScript基础并已完成了Javaweb前置知识的学习01-JavaWeb-HTML初识02-JavaWeb-CSS初识03-JavaWeb-......
  • 8.java NIO
    1.简介2.NIO和BIO的比较1.BIO以流的方式处理数据,而NIO以块的放还是处理数据,块的I/O都效率比流的I/O高很多2.BIO是阻塞的,NIO是非阻塞的3.BIO基于字节流或者字符流进行......