当前位置: 首页 > news >正文

网站推荐男生正能量2021/站长统计是什么意思

网站推荐男生正能量2021,站长统计是什么意思,网站建设微信商城运营,国内十大动画制作公司目录 一、配置文件 1.1 文件类型 1.1.1 properties 1.1.2 yaml 1.2 配置提示 二、web开发 2.1 SpringMVC自动配置概览 2.2 简单功能分析 2.2.1 静态资源访问 2.2.2 静态资源访问前缀 2.2.3 欢迎页支持 2.2.4 自定义 Favicon 2.2.5 静态资源配置原理 2.2.6 扩展知…

目录

一、配置文件

1.1 文件类型

1.1.1 properties

1.1.2 yaml

1.2 配置提示

二、web开发

2.1 SpringMVC自动配置概览

2.2 简单功能分析

2.2.1 静态资源访问

2.2.2 静态资源访问前缀

2.2.3 欢迎页支持

2.2.4 自定义 Favicon

2.2.5 静态资源配置原理

2.2.6 扩展知识——配置类只有一个有参构造器,则有参构造器所有参数的值都会从容器中确定

2.2.7 资源处理的默认规则

2.3 请求参数

2.3.1 注解

2.3.2 自定义对象参数——通过数据绑定原理

2.4 响应数据与内容协商

2.4.1 响应json——jackson.jar+@ResponseBody

2.4.2 内容协商——根据客户端接收能力的不同,返回不同类型的数据

2.5 拦截器

 


 

教案:https://www.yuque.com/atguigu/springboot/rg2p8g

 

一、配置文件

1.1 文件类型

1.1.1 properties

同以前的properties用法

1.1.2 yaml

YAML 是 "YAML Ain't Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。

 

非常适合用来做以数据为中心的配置文件

 

基本语法

  • key: value;kv之间有空格
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#' 表示注释
  • 字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义

 

数据类型

  • 字面量:单个的、不可再分的值。date、boolean、string、number、null
k: v
  • 对象:键值对的集合。map、hash、set、object
行内写法:  k: {k1:v1,k2:v2,k3:v3}
#或
k: k1: v1k2: v2k3: v3
  • 数组:一组按次序排列的值。array、list、queue
行内写法:  k: [v1,v2,v3]
#或者
k:- v1- v2- v3

 

示例

@Data
public class Person {private String userName;private Boolean boss;private Date birth;private Integer age;private Pet pet;private String[] interests;private List<String> animal;private Map<String, Object> score;private Set<Double> salarys;private Map<String, List<Pet>> allPets;
}@Data
public class Pet {private String name;private Double weight;
}

yaml表示以上对象

person:userName: zhangsanboss: falsebirth: 2019/12/12 20:12:33age: 18pet: name: tomcatweight: 23.4interests: [篮球,游泳]animal: - jerry- marioscore:english: first: 30second: 40third: 50math: [131,140,148]chinese: {first: 128,second: 136}salarys: [3999,4999.98,5999.99]allPets:sick:- {name: tom}- {name: jerry,weight: 47}health: [{name: mario,weight: 47}]

 

 

 

1.2 配置提示

自定义的类和配置文件绑定一般没有提示。加入下方的依赖,这样在编写yaml文件时,会和配置pring组件一样,产生提示信息。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>

但是在打包时,如果不希望我们上述新增的配置处理器被打包到jar包中(我们不希望打出来的包太重了),可以使用下面的配置满足我们的需求

 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId></exclude></excludes></configuration></plugin></plugins>
</build>

 

 

 

 

二、web开发

 

2.1 SpringMVC自动配置概览

Spring Boot provides auto-configuration for Spring MVC that works well with most applications.(大多场景我们都无需自定义配置)

 

 

 

2.2 简单功能分析

 

2.2.1 静态资源访问

1、静态资源目录

只要静态资源放在类路径下:called /static (or /public or /resources or /META-INF/resources 访问 : 当前项目根路径/ + 静态资源名 就能访问到我们的静态资源。

 

 

2. 获取静态资源实现原理: 静态映射/**。

请求进来,先去找Controller看能不能处理。不能处理的所有请求,都交给静态资源去处理。

静态资源也找不到则响应404页面

 

改变默认的静态资源路径

spring:mvc:static-path-pattern: /res/**resources:static-locations: [classpath:/haha/]

 

 

2.2.2 静态资源访问前缀

默认无前缀。

如果需要配置前缀,可以在yaml文件中进行配置。下面的例子是给静态资源配置res前缀

spring:mvc:static-path-pattern: /res/**

 

 

配置静态资源得到指定存储路径(配置之后,将无法通过默认的路径获取静态资源)

 

 

 

2.2.3 欢迎页支持

  • 静态资源路径下  index.html
  • 可以配置静态资源路径,但是不可以配置静态资源的访问前缀。否则导致 index.html不能被默认访问
spring:
#  mvc:
#    static-path-pattern: /res/**   这个会导致welcome page功能失效resources:static-locations: [classpath:/haha/]
  • controller能处理/index

 

 

2.2.4 自定义 Favicon

favicon.ico 放在静态资源目录下即可。

 

 

2.2.5 静态资源配置原理

SpringBoot启动默认加载  xxxAutoConfiguration 类(自动配置类)

 

SpringMVC功能的自动配置类 WebMvcAutoConfiguration,在找到配置类后,需要看一下配置类是否生效。下面的源码,通过注解可以看出其生效了

@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class) //容器中没有这个WebMvcConfigurationSupport.class组件时,下面的配置才会生效
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {}

 

给容器中配了什么。

@Configuration(proxyBeanMethods = false)
@Import(EnableWebMvcConfiguration.class)
@EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class })
@Order(0)
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer {}

 

配置文件的相关属性和xxx进行了绑定。WebMvcProperties与spring.mvc进行了绑定ResourceProperties与spring.resources进行了绑定

 

 

 

2.2.6 扩展知识——配置类只有一个有参构造器,则有参构造器所有参数的值都会从容器中确定

//有参构造器所有参数的值都会从容器中确定
//ResourceProperties resourceProperties;获取和spring.resources绑定的所有的值的对象
//WebMvcProperties mvcProperties 获取和spring.mvc绑定的所有的值的对象
//ListableBeanFactory beanFactory Spring的beanFactory
//HttpMessageConverters 找到所有的HttpMessageConverters
//ResourceHandlerRegistrationCustomizer 找到 资源处理器的自定义器。=========
//DispatcherServletPath  
//ServletRegistrationBean   给应用注册Servlet、Filter....
public WebMvcAutoConfigurationAdapter(ResourceProperties resourceProperties, WebMvcProperties mvcProperties,ListableBeanFactory beanFactory, ObjectProvider<HttpMessageConverters> messageConvertersProvider,ObjectProvider<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizerProvider,ObjectProvider<DispatcherServletPath> dispatcherServletPath,ObjectProvider<ServletRegistrationBean<?>> servletRegistrations) {this.resourceProperties = resourceProperties;this.mvcProperties = mvcProperties;this.beanFactory = beanFactory;this.messageConvertersProvider = messageConvertersProvider;this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizerProvider.getIfAvailable();this.dispatcherServletPath = dispatcherServletPath;this.servletRegistrations = servletRegistrations;
}

 

 

2.2.7 资源处理的默认规则

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {if (!this.resourceProperties.isAddMappings()) {logger.debug("Default resource handling disabled");return;}Duration cachePeriod = this.resourceProperties.getCache().getPeriod();CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();//webjars的规则if (!registry.hasMappingForPattern("/webjars/**")) {customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/").setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}String staticPathPattern = this.mvcProperties.getStaticPathPattern();if (!registry.hasMappingForPattern(staticPathPattern)) {customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}
}
通过以下配置,可以导致上述倒吗中走入条件 this.resourceProperties.isAddMappings(),并打印出日志:静态资源访问已被禁用
​​​​​​​spring:resources:add-mappings: false   禁用所有静态资源规则
 

 

 

 

2.3 请求参数

 

2.3.1 注解

@PathVariable——用于获取路径参数

PathVariable用于获取请求路径中传入的变量值;可以根据变量名获取,也可以通过map将参数一次性全部获取。测试代码如下:

@RestController
public class ParameterTestController {@GetMapping("/car/{id}/owner/{username}")public Map<String, Object> getCar(@PathVariable("id") Integer id,@PathVariable("username") String name,@PathVariable Map<String, String> pv) {Map<String, Object> map = new HashMap<>();map.put("id", id);map.put("name", name);map.put("pv", pv);return map;}
}

 

 

@RequestHeader——用于获取请求头信息

测试代码如下:

@RestController
public class ParameterTestController {@GetMapping("/car/{id}/owner/{username}")public Map<String, Object> getCar(@PathVariable("id") Integer id,@PathVariable("username") String name,@PathVariable Map<String, String> pv,@RequestHeader("User-Agent") String userAgent,@RequestHeader Map<String, String> header) {Map<String, Object> map = new HashMap<>();map.put("id", id);map.put("name", name);map.put("pv", pv);map.put(" userAgent", userAgent);map.put("headers", header);return map;}}

 

 

@RequestParam——获取请求参数

@RestController
public class ParameterTestController {@GetMapping("/car/{id}/owner/{username}")public Map<String, Object> getCar(@PathVariable("id") Integer id,@PathVariable("username") String name,@RequestParam Map<String, String> params) {Map<String, Object> map = new HashMap<>();map.put("id", id);map.put("name", name);map.put("params", params);return map;}}

 

 

@RequestAttribute——获取请求域中的值

测试代码如下:

@Controller
class RequestController {@GetMapping("/goto")public String goToPage(HttpServletRequest request) {request.setAttribute("msg", "成功了...");request.setAttribute("code", 200);return "forward:/success"; //转发到 /success 请求}@ResponseBody@GetMapping("/success")public Map success(@RequestAttribute("msg") String msg,@RequestAttribute("code") Integer code,HttpServletRequest request) {Object msg1 = request.getAttribute("msg");Map<String, Object> map = new HashMap<>();map.put("reqMethod_msg", msg1);map.put("annotation_msg", msg);return map;}
}

 

 

 

@CookieValue——获取cookie的值

@RestController
public class ParameterTestController {@GetMapping("/car/{id}/owner/{username}")public Map<String, Object> getCar(@PathVariable("id") Integer id,@PathVariable("username") String name,@RequestParam Map<String, String> params,@CookieValue(" _ga") String _ga,@CookieValue("_ ga") Cookie cookie) {Map<String, Object> map = new HashMap<>();map.put("id", id);map.put("name", name);map.put("params", params);return map;}
}

 

 

 

@RequestBody——获取post请求体的值

@RestController
public class ParameterTestController {@PostMapping("/save")public Map postMethod(@RequestBody String content) {Map<String, Object> map = new HashMap<>();map.put(" content", content);return map;}
}

 

 

 

2.3.2 自定义对象参数——通过数据绑定原理

可以自动类型转换与格式化,可以级联封装。

 

 

 

 

2.4 响应数据与内容协商

 

2.4.1 响应json——jackson.jar+@ResponseBody

环境配置

需要引入以下依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

该依赖中帮我们引入了starter-json

starter-json主要使用了jackson来处理依赖

 

 

示例代码

@Controller
public class ResponseTestController {@ResponseBody@GetMapping("/test/person")public User getUser() {User user = new User();user.setAge(10);user.setName("rudy");return user;}
}

 

 

 

2.4.2 内容协商——根据客户端接收能力的不同,返回不同类型的数据

1、引入xml依赖

<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId>
</dependency>

引入依赖之后,优先返回xml格式的数据

 

原理

客户端发送请求时,请求头中携带的Accept字段对应的值控制了服务端的返回值信息:

  • application/json时,返回的是json格式的数据
  • application/xml时,返回的是xml格式的数据

 

 

2.  原理

1、判断当前响应头中是否已经有确定的媒体类型。MediaType

2、获取客户端(PostMan、 浏览器 Accepte请求头字段) [application/xml]

3、遍历循环所有当前系统的MessageConverter,看谁支持操作这个对象(Person)

4、找到支持操作Person的converter, 把converter支 持的媒体类型统计出来。

5、客户端需要[application/xml] 。服务端能力[10种、json. xml]

6、进行内容协商的最佳匹配媒体类型

7、用支持将对象转为最佳匹配媒体类型的converter。调用它进行转化。

 

 

 

3. 其他——可以开启基于请求参数的内容协商

spring:contentnegotiation:favor-parameter: true  #开启请求参数内容协商模式

发请求:

  • http://localhost:8080/test/person?format=json
  • http://localhost:8080/test/person?format=xml

 

 

 

2.5 拦截器

https://www.cnblogs.com/black-spike/p/7813238.html

 

 

 

 

http://www.jmfq.cn/news/4759057.html

相关文章:

  • xp系统做网站服务器吗/成都网站seo费用
  • 深圳专业做网站案例/百度链接收录提交入口
  • 做网站后要回源码有何用/深圳seo推广培训
  • 中贸网做的网站/免费平台
  • 平顶山网站建设/今日头条收录入口
  • 如何做网站优化 纯外链/淘宝数据分析
  • 少女论坛资源/长沙网站seo报价
  • 泰安集团网站建设多少钱/全网营销平台有哪些
  • 网站怎么更新网页内容/百度查询网
  • 在线做logo的网站/最新网站推广方法
  • 涟源网络建站/百度指数移动版app
  • 方案网站有哪些/百度认证官网申请
  • 网站建设与维护教程/泉州全网营销推广
  • 黑彩网站充值就给你做单子/跨境电商平台哪个最好最可靠
  • 做购物车网站多少钱/宁波seo外包公司
  • 北方网天津疫情/东莞seo计费
  • 网站建设技巧/宁波正规站内优化seo
  • wordpress ping/杭州seo按天计费
  • 怎么做转载小说网站/微信推广平台哪里找
  • 郑州网站建设哪个好/百度站长收录
  • 旅游网站建设策划方案书/企业品牌营销推广
  • 长春网站建设首选网诚传媒/百度刷排名百度快速排名
  • ppt那个网站做的好/google play服务
  • 做网站需要简介/餐饮营销策划方案
  • 怎么做简单网站/360优化关键词
  • 做网站 当站长/现在百度怎么优化排名
  • 网站建设的摊销/营销策略都有哪些
  • 怎样测试网站是否正规/手机百度下载安装
  • wordpress显示所有文章列表/威海seo
  • 嘉兴做网站seo/交换友情链接的途径有哪些