SpringBoot 基于web应用开发

一、Lombok使用

1、导入依赖库

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.6</version>
</dependency>

2、安装插件

3、在实体bean使用

@Data    相当于set,get,toString,hashCode,equals

@AllArgsConstructor   所有参数的有参数构造函数

@NoArgsConstructor   无参数构造函数

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")  日期的格式转换

package com.offcn.po;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data //get 、set   toString
@AllArgsConstructor //所有参数的有参数构造函数
@NoArgsConstructor  //无参数构造函数
public class Car {
    private Integer id;
    private String name;
    private Float price;
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")

private Date createdate;
   
}

4、创建Controller

@RestController相当于@Controller和@ResponseBody

@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。

一般情况下来说常用其来处理application/json类型

package com.offcn.controller;

import com.offcn.po.Car;
import org.springframework.cache.CacheManager;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/car")
public class CarController {

@RequestMapping("/findone")
    public Car findOneCar(){
       Car car = new Car(1, "toyo", 1999.99F,new Date(),"13567890001");

return car;
    }
}

二、SpringBoot 请求传递参数

@RequestParam   获取查询参数。即url?name=value   这种形式

@PathVariable      获取路径参数。即url/{id}        这种形式

@RequestMapping("/getcar2/{name}")

public Car getCarById(@RequestParam(name="id") Integer id,@PathVariable(name="name") String name) {

Car car = new Car();

car.setId(id);

car.setName(name);

car.setPrice(100000.99F);

car.setCreateDate(new Date());

return car;

}

测试传递参数获取单个对象json

请求地址:http://localhost:8080/getcar2/宝马?id=999

三、SpringBoot 静态资源

1、默认静态资源映射

Spring Boot 对静态资源映射提供了默认配置

classpath:/static

classpath:/public

classpath:/resources

classpath:/META-INF/resources

如:在resources目录下新建 public、resources、static 三个目录,并分别放入 a.jpg b.jpg c.jpg 图片

浏览器分别访问:

http://localhost:8080/a.jpg

http://localhost:8080/b.jpg

http://localhost:8080/c.jpg

均能正常访问相应的图片资源。那么说明,Spring Boot 默认会挨个从 public resources static 里面找是否存在相应的资源,如果有则直接返回。

2、自定义静态资源访问

试想这样一种情况:一个网站有文件上传文件的功能,如果被上传的文件放在上述的那些文件夹中会有怎样的后果?

网站数据与程序代码不能有效分离;

当项目被打包成一个.jar文件部署时,再将上传的文件放到这个.jar文件中是有多么低的效率;

网站数据的备份将会很痛苦。

此时可能最佳的解决办法是将静态资源路径设置到磁盘的基本个目录。

第一种方式

1、配置类

package com.offcn.demo.config;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

//将所有D:\\springboot\\pic\\ 访问都映射到/myPic/** 路径下

registry.addResourceHandler("/myPic/**").addResourceLocations("file:D:\\springboot\\pic\\");

}

}

上面的意思就是:将所有D:/springboot/pic/ 访问都映射到/myPic/** 路径下

2、重启项目

例如,在D:/springboot/pic/中有一张logo.jpg图片

在浏览器输入:http://localhost:8080/myPic/logo.jpg即可访问。

第二种方式

首先,我们配置application.properties

web.upload-path=D:/springboot/pic/

spring.mvc.static-path-pattern=/**

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,\

classpath:/static/,classpath:/public/,file:${web.upload-path}

注意:

web.upload-path:这个属于自定义的属性,指定了一个路径,注意要以/结尾;

spring.mvc.static-path-pattern=/**:表示所有的访问都经过静态资源路径;

spring.resources.static-locations:在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上否则static、public等这些路径将不能被当作静态资源路径,在这个最末尾的file:${web.upload-path}之所有要加file:是因为指定的是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量。

然后,重启项目

例如,在D:/springboot/pic/中有一张8.png图片

在浏览器输入:http://localhost:8080/8.png 即可访问。

4、WebJars

在SpringBoot中,允许我们直接访问WEB-INF/lib下的jar包中的/META-INF/resources目录资源,即WEB-INF/lib/{*.jar}/META-INF/resources下的资源可以直接访问。

WebJars也是利用了此功能,将所有前端的静态文件打包成一个jar包,这样对于引用放而言,和普通的jar引入是一样的,还能很好的对前端静态资源进行管理。

WebJars是将web前端资源(如jQuery & Bootstrap)打成jar包文件。借助版本管理工具(Maven、gradle等)进行版本管理,保证这些Web资源版本唯一性。避免了文件混乱、版本不一致等问题。

(1)、WebJar结构

开始使用前,我们看下Jquery的webjars,借此来了解下webjars包的目录结构。以下是基于jquery-3.3.1.jar:

META-INF

└─maven

└─org.webjars.bower

└─jquery

└─pom.properties

└─pom.xml

└─resources

└─webjars

└─jquery

└─3.3.1

└─(静态文件及源码)

jquery-3.3.1目录结构

所以可以看出,静态文件存放规则:META-INF/resources/webjars/${name}/${version}。

(2)、WebJars实践

接下来我们以一个简单的示例,对webjars进行简单的实践下。

1、在src/main/resouces路径下创建META-INF/resources/webjars/demo/0.0.1目录,同时为了演示效果,拷贝一个图片到此目录下。

2、编写一个简单的html页面,放在在src/main/resources/static下(当然也可以直接放在webjar下了,只需要后面加个映射关系即可),内容如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Hello,WebJars</title>

</head>

<body>

<h1>Hello,WebJars</h1>

<img alt="offcn" src="webjars/demo/0.0.1/ujiuye.jpg">

</body>

</html>

3、编写配置类,添加一个资源映射关系.其实也可以不写,因为第4节也有说过,springboot默认的四个资源路径里面就包含了/META-INF/resources/了

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

//配置映射关系        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");

}

}

4、编写控制层,返回此页面地址。

/** webjar示例

* @author sunny

* */

@Controller

public class WebJarsDemoController {

@GetMapping("/")

public String index() {

return "index.html";

}

}

5、启动应用,访问地址即可:

可以看见图片已经正确显示出来了。

6、现在直接将META-INF下打成一个jar,然后加入依赖进入。在来测试下。

这里直接创建一个新的工程,存在静态资源信息,工程结果如下:

然后对应的pom配置文件加入一个资源拷贝动作:

<build>

<resources>

<resource>

<directory>${project.basedir}/src/main/resources</directory>            <targetPath>${project.build.outputDirectory}/META-INF/resources/webjars</targetPath>

</resource>

</resources>

</build>

利用maven打包后,就可以看见jar包目录结构了:

7、然后我们删除了我们原先的资源文件或者图片重命名下,并引入依赖:

<dependency>

<groupId>com.offcn</groupId>

<artifactId>Webjars-Demo</artifactId>

<version>1.0</version>

</dependency>

最后重新启动应用,再次访问下,依旧是正常显示的!

(1)、WebJars使用webjars-locator

我们可以看见,我们在index.html中访问图片是这么访问的:webjars/demo/0.0.1/springboot.jpg。咋一看,可能觉得没问题。但当我们静态资源版本有更新时,我们不是又需要去改下这个静态资源的引入路径,那何来的优雅!所以官方提供了一个webjars-locator包,就是来解决此问题的。

1、pom文件中,加入依赖(这里注意,Springboot(2.1.1.RELEASE)父类pom文件中已经指定了此版本为:0.35,所以我们可以不需要去添加版本了):

<dependency>

<groupId>org.webjars</groupId>

<artifactId>webjars-locator-core</artifactId>

</dependency>

2、修改index.html中的图片路径

原来:

<img alt="offcn" src="webjars/demo/0.0.1/ujiuye.jpg">

修改后:

<img alt="offcn" src="webjars/demo/ujiuye.jpg">

3、修改配置类,加入resourceChain属性,不然还是去除了版本时路径找不到的,这里需要注意。

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

//将所有D:\\springboot\\pic\\ 访问都映射到/myPic/** 路径下

// registry.addResourceHandler("/myPic/**").addResourceLocations("file:D:\\springboot\\pic\\");

//配置映射关系

registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/")

.resourceChain(true);//加入resourceChain属性,不然还是去除了版本时路径找不到的

}

}

这样之后,我们只需要修改依赖包即可,前端都不需要重新改了。

4、测试访问,依然可以正常浏览到图片。

SpringBoot 基于web应用开发(请求参数获取,静态资源,webjars)的更多相关文章

  1. Http协议入门、响应与请求行、HttpServletRequest对象的使用、请求参数获取和编码问题

    1 课程回顾 web入门 1)web服务软件作用: 把本地资源共享给外部访问 2)tomcat服务器基本操作 : 启动:  %tomcat%/bin/startup.bat 关闭: %tomcat%/ ...

  2. Spring3 MVC请求参数获取的几种方法

    Spring3 MVC请求参数获取的几种方法 一.      通过@PathVariabl获取路径中的参数 @RequestMapping(value="user/{id}/{name}&q ...

  3. Spring3 MVC请求参数获取的几种方法[转]

    Spring3 MVC请求参数获取的几种方法 Spring3 MVC请求参数获取的几种方法 一.      通过@PathVariabl获取路径中的参数 @RequestMapping(value=& ...

  4. HttpClient4.3.3 使用样例—获取静态资源

    HttpClient4.3.3 使用样例—获取静态资源 学习了:http://shihlei.iteye.com/blog/2067688

  5. Servlet学习(二):ServletConfig获取参数;ServletContext应用:请求转发,参数获取,资源读取;类装载器读取文件

    转载:http://www.cnblogs.com/xdp-gacl/p/3763559.html 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件 ...

  6. Spring3 MVC请求参数获取的几种场景

    访问/aaa/bbb所对应的@Controller @RequestMapping("/aaa")//类级别,可以不需要,如果要了,下面所有的请求路径前都需要加入/aaa publ ...

  7. springmvc请求参数获取的几种方法

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @pa ...

  8. 基于web工作流开发

    目前在研发基于web工作流的开发 什么是工作流? 工作流简言之就是: 1.反应业务流程的计算机化的模型. 2.一类能够完全或者部分自动执行的经营过程:(为了提高效率,实现自动化). 3.任务.活动及活 ...

  9. Spring MVC 的请求参数获取的几种方法

    通过@PathVariabl注解获取路径中传递参数 @RequestMapping(value = "/{id}/{str}") public ModelAndView hello ...

随机推荐

  1. Win10 手动安装 WSL 并修改默认登录用户为 root

    首先要在"程序和功能"里面开启这个服务 然后重启系统使其生效. 然后打开 PowerShell,输入: Invoke-WebRequest -Uri https://aka.ms/ ...

  2. python 提取整个 HTML 节点

    有的时候,需要把整个 HTML 节点原封不动地取下来,也就是包括节点标签.节点内容,甚至也包括内容中的空格.各种特殊符号等等. 假设已获取到页面源码,并将其保存在变量 src 中.则可有代码如下: f ...

  3. Java生鲜电商平台-积分,优惠券,会员折扣,签到、预售、拼团、砍价、秒杀及抽奖等促销模块架构设计

    Java生鲜电商平台-积分,优惠券,会员折扣,签到.预售.拼团.砍价.秒杀及抽奖等促销模块架构设计 说明:本标题列举了所有目前社会上常见的促销方案,目前贴出实际的业务运营手段以及架构设计,包括业务说明 ...

  4. 【spring】全局异常 globalexception 处理

    全局异常 globalexception 处理   一般在做api开发时我们希望将所有业务层抛到controller异常都集中处理一下.比如对异常差异化报警.转发不同页面.封装不同http状态码.集中 ...

  5. Linux存储管理

    一.存储基础知识 从工作原理区分: 机械 HDD 固态 SSD SSD的优势: SSD是摒弃传统磁介质,采用电子存储介质进行数据存储和读取的一种技术,突破了传统机械硬盘的性能瓶颈,拥有极高的存储性能, ...

  6. linux系统下安装配置Jenkins

    准备java 环境 安装java sdk yum -y install java 验证是否安装成功 java -version 下载安装jenkins 官网:https://wiki.jenkins- ...

  7. gsoap生成webservice调用客户端接口

    1.下载gsoap2.8 2.运行 wsdl2h.exe -o XXX.h XXX.wsdl wsdl文件可以是本地文件,也可以是服务器的wsdl,比如http://192.168.0.122:333 ...

  8. dtd语法

    dtd语法 <!ELEMENT 元素名 约束> //简单元素三种:没有子元素的元素 eg: <!ELEMENT name (#PCDATA)> (#PCDATA):约束name ...

  9. 关于css中的定位

    关于前端的几种定位方式 近期自己感觉自己对于前端定位的知识还是不是太理解,所以自己就在这里做一个总结 1.元素的定位属性主要包括定位模式和边偏移两部分. 边偏移属性 描述 top       bott ...

  10. HeadFirst设计模式--命令模式

    模式定义 命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化:对请求排队或者记录请求日志,以及支持可撤销的操作.命令模式是一种对象行为型模式 ...