移动互联网时代用户的行为习惯逐渐往移动端迁移,越来越多的人通过手机浏览器来浏览网页。有时,我们需要知道一个用户是通过什么设备来访问我们的页面的,比如对比PC端访问量和移动端访问量。这些信息我们可以通过解析HTTP请求中的头信息来获取,但是这样和核心业务逻辑无关的代码放到Controller中实在不够优雅。没关系,Spring已经把这种脏活累活给干了!来看看基于Spring如何来做设备类型检查吧。
开发环境
- IDE+Java环境(JDK 1.7或以上版本)
- Maven 3.0+(Eclipse和Idea IntelliJ内置,如果使用IDE并且不使用命令行工具可以不安装)
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tianmaying</groupId>
<artifactId>spring-boot-device-detection</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-device-detection</name>
<description>use springboot to detect device type</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.mobile</groupId>
<artifactId>spring-mobile-device</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在POM中引入spring-mobile-device
这个依赖之后,Spring Boot会自动配置好DeviceResolverHandlerInterceptor
和DeviceHandlerMethodArgumentResolver
,其中:
DeviceResolverHandlerInterceptor
通过Web请求头中的User-Agent
属性来确定请求来自于桌面浏览器、移动浏览器还是平板浏览器。DeviceHandlerMethodArgumentResolver
则用于将DeviceResolverHandlerInterceptor
拦截器捕获的信息转换为Device
类,这样我们就能在Controller中,直接通过访问该类的属性就能检测出设备类型。
检测设备类型
我们通过Controller中的一个方法来返回设备信息,为了演示方便,这里我们不用HTML页面,让方法简单的返回一个字符串即可。@ResponseBody
标注告诉Spring MVC直接将字符串作为Web响应(Reponse Body)返回,而不需要通过渲染HTML视图。
package com.tianmaying.springboot.devicedetection;
import org.springframework.mobile.device.Device;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class DeviceDetectionController {
@RequestMapping("/detect-device")
public @ResponseBody String detectDevice(Device device) {
String deviceType = "unknown";
if (device.isNormal()) {
deviceType = "normal";
} else if (device.isMobile()) {
deviceType = "mobile";
} else if (device.isTablet()) {
deviceType = "tablet";
}
return "Hello " + deviceType + " browser!";
}
}
只要在方法签名中包含设备类型Device
参数,Spring会自动把信息填充好,你拿来即用便好,恩,David喜欢"拿来即用"这个词,希望各种经验课程代码都能拿来即用,对我们提高开发效率是多棒的事情啊!
Run起来
通过Springboot把程序跑起来,不解释
package com.tianmaying.springboot.devicedetection;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App{
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
https://www.tianmaying.com/tutorial/spring-device-detection
相关推荐
基于spring boot + maven + opencv 实现的图像深度学习Demo项目,包含车牌识别、人脸识别、证件识别等功能,贯穿样本处理、模型训练、图像处理、对象检测、对象识别等技术点。 基于spring boot + maven + opencv ...
这是一个基于Spring Boot和Vue.js构建的宿舍管理系统源代码项目,旨在提供一套完整的从前端到后端,再到数据库的解决方案。让我们深入探讨这个系统的各个组成部分及其关键知识点。 首先,Spring Boot是Java开发的一...
在构建基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统时,开发者通常会采用一系列先进的技术来实现高效、可扩展且灵活的系统。这个系统不仅涉及到后端服务的开发,还涉及到前端用户界面的...
基于Spring Boot框架的设备管理系统 项目简介 本项目是一个基于Spring Boot框架开发的设备管理系统,旨在提供一个高效、易用的设备管理解决方案。系统涵盖了设备的种类管理、部门管理、设备管理、检修记录管理、...
基于spring boot + maven + opencv 实现的图像深度学习Demo项目,包含车牌识别、人脸识别、证件识别等功能,贯穿样本处理、模型训练、图像处理、对象检测、对象识别等技术点 写在前面的话 这是一个基于spring boot +...
本系统力求结合实际找出一种切实可行的开发方案,经过反复研究和学习,借助java编程语言、Spring+MyBatis框架来完成系统的所有功能,最后进行系统测试,来检测系统的权限和漏洞,从而将系统完善,达到符合标准。
Spring Boot 是一款基于 Spring 架构的全新框架,它极大地简化了基于 Spring 的应用开发。Spring Boot 旨在提供快速应用开发所需的“一站式”解决方案。其目标是简化新Spring应用的初始搭建以及开发过程。 ##### 一...
《Spring Boot实战派》源码提供了丰富的学习材料,旨在帮助开发者深入理解并熟练掌握Spring Boot这一流行的Java后端开发框架。Spring Boot简化了Spring应用程序的初始设置和配置,使得开发人员能够快速构建可运行的...
【基于Spring Boot框架的校园博客系统的设计与实现】 在当今信息化社会,网络成为了人们交流信息的重要途径。针对这一背景,设计并实现一个基于Spring Boot的校园博客系统具有深远的教育和社交价值。该系统旨在为...
增强 Spring Boot 的健康检查能力 针对 Spring Boot 缺少 Readiness Check 能力的情况,SOFABoot 增加了 Spring Boot 现有的健康检查的能力,提供了 Readiness Check 的能力。 利用 Readiness Check 的能力,SOFA ...
《Spring Boot参考指南》是Spring Boot开发者的重要参考资料,它详细阐述了Spring Boot框架的核心特性、配置方式、自动配置原理以及如何构建微服务应用等关键知识点。Spring Boot是Java开发领域中一个极其流行的轻量...
5. **Spring Boot Actuator**:介绍监控和度量工具,如健康检查、指标收集、审计等,用于生产环境中的应用管理。 6. **Spring Boot CLI**:讨论命令行界面工具的使用,以及如何快速运行和测试 Spring Boot 应用。 ...
基于Spring Boot的秒杀系统 项目概述 本项目是一个基于Spring Boot的高并发秒杀系统,集成了Redis、RabbitMQ、MyBatis等技术栈,旨在提供一个高效、稳定的秒杀解决方案。 主要功能 用户管理用户注册、登录、...
本系统力求结合实际找出一种切实可行的开发方案,经过反复研究和学习,借助java编程语言、Spring+MyBatis框架来完成系统的所有功能,最后进行系统测试,来检测系统的权限和漏洞,从而将系统完善,达到符合标准。
自动配置是Spring Boot的一大亮点,它基于“约定优于配置”的原则,通过“spring-boot-starter”模块来引入特定功能的依赖,并默认配置好大部分设置,极大地减少了手动配置的工作量。 书中可能会涵盖以下内容: 1....
Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化基于 Spring Framework 的应用程序的初始设置和开发过程。它的核心理念是“约定优于配置”,这意味着 Spring Boot 在默认情况下已经预设了很多常用的配置,...
《基于Spring Boot技术的幼儿园管理系统》 在当前的信息化时代,教育行业的管理也逐渐走向数字化。Spring Boot作为Java领域的一款热门框架,以其简洁、高效、快速启动的特点,被广泛应用于各种系统的开发,包括...
《基于Spring Boot的宿舍管理系统设计与实现》 Spring Boot作为现代化Java开发的首选框架,以其简洁、快速的特性,使得开发者能快速构建可部署的应用程序。在这个基于Spring Boot的宿舍管理系统项目中,我们可以...
6. 配置文件:Spring Boot支持基于YAML或JSON格式的`application.yml`或`application.properties`配置文件,使得配置更加直观和灵活。 7. 零代码冗余:Spring Boot鼓励使用“约定优于配置”的原则,避免了大量的XML...
基于Spring Boot框架的员工管理系统 项目简介 本项目是一个基于Spring Boot框架的员工管理系统,整合了CRUD操作,实现了员工信息的管理功能。项目中使用了MyBatis作为ORM框架,并集成了MySQL数据库。通过该系统,...