基于Spring来检测访问Web页面的设备是很简单的,在这个经验中我们讲到过。通常不同的设备访问我们是通过响应式设计来统一处理各种设备的尺寸的。但是如果希望针对不同的设备,显示不同的内容呢? Spring对于这一点同样提供了很好的支持,来看看如何实现。

准备工作

我们通过一个简单的例子来演示,基于Spring MVC来实现一个简单的HTTP GET请求,访问的地址是:

http://localhost:8080/greeting

  • 如果从桌面浏览器访问这个地址,则返回的页面中显示:Say hello from desktop
  • 如果从手机浏览器访问这个地址:则返回的页面中显示Say hello from mobile
  • 如果从平板电脑访问这个地址:则返回的页面中显示Say hello from tablets

先该准备好开发环境:

  • IDE+Java环境(JDK 1.7或以上版本)
  • Maven 3.0+(Eclipse和Idea IntelliJ内置,如果使用IDE并且不使用命令行工具可以不安装)

Maven POM文件的设置

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.mobilecontent</groupId>
  <artifactId>content-for-multiple-device</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>content-for-multiple-device</name>
  <description>Demo of serving different content for desktop, mobile and tablet device</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.boot</groupId>
      <artifactId>spring-boot-starter-mobile</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

创建Properties文件

Spring Boot能够针对不同设备渲染不同的视图(View),只需要在应用的Properties文件中中稍加配置即可。在src/main/resources/application.properties文件(没有这个文件,则自己创建这个文件)中增加一行:

spring.mobile.devicedelegatingviewresolver.enabled: true

针对一个请求,LiteDeviceDelegatingViewResolver通过DeviceResolverHandlerInterceptor识别出的Device类型来判断返回哪种视图进行响应(桌面、手机还是平板),这一部分大家参考Spring如何识别设备的经验。

在这个例子中, LiteDeviceDelegatingViewResolver会将请求代理给ThymeleafViewResolver,作为Spring自身提供的正牌ViewResolver,相比传统的视图技术如JSP,Velocity等,有不少过人之处,大家可以回顾一下Thymeleaf的介绍以及如何在Spring MVC中使用Thymeleaf。默认情况下,Spring Boot去到**mobile/和tablet/**文件下去寻找移动端和平板端对应的视图进行渲染。当然你也可以在属性文件中进行设置,约定大于配置,没有特别需求用约定就好了。

创建Controller

Spring Boot的请求都是通过Controller的处理的。Controller的实现非常简单:

  • 通过@Controller标注一个普通的类
  • 通过@RequestMapping标注一个方法,设置该方法响应的URL地址和方法( 如@RequestMapping(method=GET )
  • 在方法中填入Model,返回视图的名称

SayHelloController

package com.tianmaying.mobilecontent;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class SayHelloController {
    @RequestMapping("/sayHello")
    public String greeting() {        return "sayHello";
    }

}

创建视图

最后让我们来创建Thymeleaf的视图模板,这里没什么模型的数据需要填充,只需要显示一句话即可:

sayHello.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'Say hello from desktop'" />
</body>
</html>

接下来我们创建存放移动端模板和平板端模板的目录:

└── src
    └── main
        └── resources
            └── templates
                └── greeting.html
                └── mobile
                    └── greeting.html
                └── tablet
                    └── greeting.html

在mobile和tablet目录下的HTML文件,内容大多是一样的,唯一不同的就是<p>标签,分别为:

<p th:text="'Say hello from mobile'" />

<p th:text="'Say hello from tablet'" />

测试

最后我们通过main()函数将这个SpringBootApplication Run起来:

App.java

package com.tianmaying.mobilecontent;

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);
    }

}

大家从不同的设备上访问http://localhost:8080/sayHello就能看到效果了。

转载于:https://www.cnblogs.com/duyinqiang/p/5696571.html

基于Spring提供支持不同设备的页面相关推荐

  1. (附源码)基于Spring Boot的ERP仓储管理信息系统设计与实现 毕业设计150958

    基于Spring Boot的ERP仓储管理信息系统设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的 ...

  2. Spring Boot 使用 AOP 实现页面自适应

    鉴于复杂页面自适应的难度,一般会做几套模板分别适应手机.平板.电脑等设备.使用 Spring Boot 开发单体应用时,一般会使用 Thymeleaf 模板,那么可以使用 AOP 技术来实现页面自适应 ...

  3. 基于Spring Boot 2 和 Vue.js 2 的 食品科学与工程学院网站的设计与实现

    摘要 互联网具有传播信息容量大.形态多样.迅速方便.自由和交互等特点,已经发展成为新的传播媒体,现在很多的大学和社会其他部门都已经建立了网站,通过计算机网络实现宣传.交流及资源的整合.建立学校网站有以 ...

  4. 基于 Spring Boot 的个人博客系统设计与实现(源码+数据库+42页论文)

    目录 若下载链接失效,请私信我:或加vx(grzyfun)发送资源 1.选题来源 2.项目背景 3.可行性分析 4.数据字典 5.开发环境介绍 6.数据库设计 7.界面展示 8.测试 9.文档目录,计 ...

  5. 基于javaweb+jsp的设备维修管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)

    基于javaweb+jsp的设备维修管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap) JavaWeb JavaBean JSP MVC ...

  6. 基于Spring+SpringMVC+hibernate实现的体检中心管理系统

    源码及论文下载: http://www.byamd.xyz/tag/java/ 摘 要 随着人们生活水平的不断提高,人们的保健意识随之增强,体检已普遍成为人们保健的重要部分.特殊职业的体检.各种职业病 ...

  7. 基于Spring Boot垂钓服务系统的设计与实现毕业设计源码071739

    目  录 摘要 1 绪论 1.1 研究背景 1.2研究意义 1.3相关技术介绍 1.4论文结构与章节安排 2垂钓服务系统需求分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性 ...

  8. Java生成二维码的几种实现方式(基于Spring Boot)

    本文将基于Spring Boot介绍两种生成二维码的实现方式,一种是基于Google开发工具包,另一种是基于Hutool来实现: 为了方便理解二维码的实际应用场景,举一些例子! (1)进销存系统 想必 ...

  9. 基于javaweb的it设备固定资产管理系统(java+ssm+jsp+mysql)

    基于javaweb的it设备固定资产管理系统(java+ssm+jsp+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclips ...

最新文章

  1. UVa 1531 - Problem Bee
  2. K-Means ++ 和 kmeans 区别
  3. Targan 算法[有向图强连通分量]
  4. 部分网站为什么上不去_企业网站如何霸占搜索引擎首页
  5. 【DirectX12】4.用FBX_SDK读取网格数据
  6. 您拒绝了位置共享服务器,共享服务器拒绝访问
  7. python面向对象(part1)--类和对象
  8. Scanner获取用户输入
  9. 第二阶段团队项目冲刺第一天
  10. 嵌入式电路设计(dsp电路设计)
  11. 英伟达赚钱能力创历史新高,老黄:GPU供不应求我也很急
  12. syslog收到的日志存放在哪里_Linux使用RsyslogServer记录远程主机系统日志
  13. 智能陈桥五笔输入法 for linux,智能陈桥五笔官方版
  14. 胖子哥的大数据之路(二)- 大数据结构化数据存储应用模式
  15. python word 表格最大列数_Excel表格中的行数和列数的最大是多少?
  16. 【小米手机ROOT记录】
  17. layui开关按钮及代码实现
  18. c语言浮点常量,C 浮点常量
  19. 基于Windows平台的Radius服务器搭建指南
  20. PD 关于tso 分配源代码分析

热门文章

  1. 上海应用物理所计算机,【中国科学报】上海应用物理所建立组合学原理DNA计算器原型...
  2. java区分不同的excel_Java处理excel两种不同的方式
  3. 雷蛇键盘灯光配置文件_指尖的流光溢彩,雷蛇黑寡妇蜘蛛V3竞技版开箱
  4. 远程过程调用失败0x800706be_WordPress5.0 远程代码执行分析
  5. 面对不可避免的故障,我们造了一个“上帝视角”的控制台
  6. 阿里巴巴的云原生应用开源探索与实践
  7. oracle 提取首字母,oracle 取字段文字拼音首字母
  8. string截取某个字符串之前的_python String字符串操作
  9. 微机原理换行代码_微机原理实验保留最长行输入字符的程序
  10. 我国java发展_Java在我国的应用现状和发展趋势