手机版 收藏 导航

Java中如何判断是否是手机设备并获取IP地址_如何在Java程序中获取手机IP地址

原创   www.link114.cn   2024-07-01 20:04:25

Java中如何判断是否是手机设备并获取IP地址_如何在Java程序中获取手机IP地址

在Java中,判断是否是手机设备可以通过检查用户代理字符串(User-Agent)来实现。用户代理字符串包含设备的操作系统、浏览器以及其他信息,通过解析这个字符串我们可以确定当前访问的设备是否为手机。下面是一个示例代码:


public static boolean isMobileDevice(HttpServletRequest request) {
    String userAgent = request.getHeader("User-Agent");
    if (userAgent != null) {
        // 检查是否包含手机关键词
        boolean isMobile = userAgent.toLowerCase().matches("(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino");
        if (isMobile) {
            return true;
        }
    }
    return false;
}

这个方法接受一个HttpServletRequest对象作为参数,从中获取用户代理字符串,使用正则表达式匹配是否包含手机关键词。包含则返回true,表示当前设备是手机,否则返回false。

在Java中获取IP地址需要分为两种情况:获取服务器IP和获取客户端IP。

获取服务器IP地址

要获取服务器的IP地址,可以使用InetAddress.getLocalHost()方法,示例代码如下:


InetAddress localHost = InetAddress.getLocalHost();
String serverIp = localHost.getHostAddress();

这段代码首先获取本地主机的InetAddress对象,调用getHostAddress()方法获取IP地址字符串。

获取客户端IP地址

要获取客户端的IP地址,可以从HttpServletRequest对象中获取,示例代码如下:


String clientIp = request.getRemoteAddr();

这段代码直接调用HttpServletRequest对象的getRemoteAddr()方法即可获取客户端的IP地址。

下面我们将前面的两个知识点结合起来,编写一个简单的Java Servlet程序,用于判断当前访问的是否为手机设备,并输出客户端和服务器的IP地址。


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;

public class DeviceDetectionServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        // 判断是否为手机设备
        boolean isMobile = isMobileDevice(request);
        String deviceType = isMobile ? "手机" : "非手机设备";

        // 获取客户端IP地址
        String clientIp = request.getRemoteAddr();

        // 获取服务器IP地址
        InetAddress localHost = InetAddress.getLocalHost();
        String serverIp = localHost.getHostAddress();

        out.println("<h1>Device Detection</h1>");
        out.println("<p>您正在使用" + deviceType + "访问本站</p>");
        out.println("<p>客户端IP地址: " + clientIp + "</p>");
        out.println("<p>服务器IP地址: " + serverIp + "</p>");
    }

    private static boolean isMobileDevice(HttpServletRequest request) {
        String userAgent = request.getHeader("User-Agent");
        if (userAgent != null) {
            // 检查是否包含手机关键词
            boolean isMobile = userAgent.toLowerCase().matches("(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino");
            if (isMobile) {
                return true;
            }
        }
        return false;
    }
}

这个Servlet程序首先判断当前访问设备是否为手机,获取客户端和服务器的IP地址,将这些信息输出到页面上。