在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地址,可以使用InetAddress.getLocalHost()方法,示例代码如下:
InetAddress localHost = InetAddress.getLocalHost();
String serverIp = localHost.getHostAddress();
这段代码首先获取本地主机的InetAddress对象,调用getHostAddress()方法获取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地址,将这些信息输出到页面上。