Springboot Web开发


文章目录

  • 一. 静态资源访问
      • 1. 配置静态资源访问前缀
      • 2. 修改默认静态资源存放目录
      • 3. Webjars
      • 4. 欢迎页支持
      • 5. 自定义Favicon
  • 二. 请求处理
      • 1. 路径变量
      • 2. 请求头处理
      • 3. 查询字符串处理
      • 4. 获取Cookie的值
      • 5. 获取请求体的值
      • 6. 获取请求域中的数据
      • 7. 矩阵变量


一. 静态资源访问

只要静态资源放在类路径下: called /static (or /public or /resources or /META-INF/resources)
Springboot Web开发_第1张图片
则可以直接通过: 当前项目根路径/ + 静态资源名
进行静态资源的访问,这都是Springboot已经约定好的配置。
原理: 请求进来的时候,先去找Controller看能不能处理,不能处理的所有请求又都交给静态资源处理器,静态资源也找不到则响应404页面。
而 resources 下的 templates 目录,只能通过控制器来进行访问比如:
Springboot Web开发_第2张图片
Springboot Web开发_第3张图片
访问: 当前项目根路径/hello 才能访问到 success.html 的内容

1. 配置静态资源访问前缀

有时候我们为了区分静态资源请求和其他动态请求,所以一般我们都会设置一个静态资源的访问前缀,这个功能我们只需要修改配置文件即可(默认无前缀):

spring:
  mvc:
    static-path-pattern: /res/**  # 静态资源访问前缀

自此静态资源的访问路径为: 当前项目 + /res/ + 静态资源名
但是访问前缀的配置会导致 Favicon、welcome page功能失效

2. 修改默认静态资源存放目录

默认的静态资源存放目录就是上面提到的 called /static (or /public or /resources or /META-INF/resources) 这都是Springboot项目约定好的配置,如果需要自定义静态资源存放目录,也可以通过修稿配置文件的方式实现:

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

  resources:
    static-locations: [classpath:/haha/]

这样只有haha目录下存放的才是能通过访问路径得到的静态资源,其他存放静态资源的目录都失效。

3. Webjars

将我们常用的JQuery等前端实用库通过Maven依赖的方式引入 官网地址: 点击跳转

        <dependency>
            <groupId>org.webjarsgroupId>
            <artifactId>jqueryartifactId>
            <version>3.5.1version>
        dependency>

Springboot Web开发_第4张图片
这样我们也可以以访问静态资源的方式访问引入的JQuery: http://localhost:8080/webjars/jquery/3.5.1/jquery.js

4. 欢迎页支持

只要在静态资源目录下放置 index.html 文件,这个文件就会被当成欢迎页,只要访问项目的根路径就会访问到该文件。

spring:
#  mvc:
#    static-path-pattern: /res/**   这个会导致welcome page功能失效

  resources:
    static-locations: [classpath:/haha/]

值得注意的是: 但是不可以配置静态资源的访问前缀,否则导致 index.html不能被默认访问

5. 自定义Favicon

只要将favicon.ico 放在静态资源目录下即可

spring:
#  mvc:
#    static-path-pattern: /res/**   这个会导致 Favicon 功能失效

二. 请求处理

1. 路径变量

将传递的参数存放在请求路径中,如果使用@PathVariable 标注Map集合,那么传递过来的所有参数都会以键值对的方式存放进去。

@GetMapping("/car/{id}/owner/{username}")
public String getCar(@PathVariable("id") Integer id,
					 @PathVariable("username") String name,
					 @PathVariable Map<String,String> pv){
	
}

2. 请求头处理

可以使用@RequestHeader注解获取请求中对应请求头的值,如果标注的是一个Map集合,那么请求中所有请求头的信息都会以键值对的方式存放在这个Map集合中

@GetMapping("/car/{id}/owner/{username}")
public String getCar(@PathVariable("id") Integer id,
					 @PathVariable("username") String name,
					 @RequestHeader("User-Agent") String userAgent,
					 @RequestHeader Map<String,String> header){
	
}

3. 查询字符串处理

@RequestParam注解获取以查询字符串的方式传递过来的值,如果传递的键对应多个值则可以标注一个List集合,会将所有键对应的值存放到List集合中,也可以标注一个Map集合这样所有的值会以键值对的方式存储进这个Map集合

@GetMapping("/car")
public String getCar(@RequestParam("age") Integer age, 
                     @RequestParam("inters") List<String> inters,
                     @RequestParam Map<String,String> params){
}

4. 获取Cookie的值

可以使用 @CookieValue注解进行Cookie值的获取,根据Cookie的键获取其对应的值,也可以标注一个Cookie类型,这样会将对应键Cookie的信息全部封装进去。

@GetMapping("/car")
public String getCar(@CookieValue("_ga") String _ga,
                     @CookieValue("_ga") Cookie cookie){
}

5. 获取请求体的值

可以使用@RequestBody注解获取Post请求中请求体的值,获取到类似 name=zhangsan&age=44的数据类型

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

6. 获取请求域中的数据

可以使用@RequestAttribute 注解获取请求域中的数据

	@GetMapping("/goto")
    public String goToPage(HttpServletRequest request){

        request.setAttribute("msg","成功了...");
        request.setAttribute("code",200);
        return "forward:/success";  //转发到  /success请求
    }

	@ResponseBody
    @GetMapping("/success")  // required = false 指定是否为必传
    public Map success(@RequestAttribute(value = "msg",required = false) String msg, 
                       @RequestAttribute(value = "code",required = false)Integer code,
                       HttpServletRequest request){
		// 代码的方式获取
        Object msg1 = request.getAttribute("msg");
        return map;

    }

7. 矩阵变量

请求方式 /cars/sell;low=34;brand=byd,audi,yd
/boss/1;age=20/2;age=20 分号前面是访问路径后面是矩阵变量
SpringBoot默认是禁用了矩阵变量的功能,手动开启:原理。对于路径的处理。UrlPathHelper进行解析。
开启矩阵变量,
方式一,配置类继承WebMvcConfigurer接口,实现configurePathMatch方法

@Configuration(proxyBeanMethods = false)
public class WebConfig implements WebMvcConfigurer  {
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {

        UrlPathHelper urlPathHelper = new UrlPathHelper();
        // 不移除分号后面的内容。矩阵变量功能就可以生效
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }
}

方式二,不继承WebMvcConfigurer接口:

@Configuration(proxyBeanMethods = false)
public class WebConfig {
    //1、WebMvcConfigurer定制化SpringMVC的功能
    // 开启矩阵变量 这样不用继承接口
    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer() {

            @Override
            public void configurePathMatch(PathMatchConfigurer configurer) {
                UrlPathHelper urlPathHelper = new UrlPathHelper();
                // 不移除分号后面的内容,矩阵变量功能就可以生效
                urlPathHelper.setRemoveSemicolonContent(false);
                configurer.setUrlPathHelper(urlPathHelper);
            }
        };
    }

}

直接注意的是: caec/path 不能直接固定请求路劲,后面的path必须是可变动的路径

	@GetMapping("/cars/{path}")
    public Map carsSell(@MatrixVariable("low") Integer low,
                        @MatrixVariable("brand") List<String> brand,
                        @PathVariable("path") String path){ // 拿到访问路径
        Map<String,Object> map = new HashMap<>();

        map.put("low",low);
        map.put("brand",brand);
        map.put("path",path);
        return map;
    }

处理 /boss/1;age=20/2;age=10
以顺序从左到右获取其中的值并重命名到pathVar指定的键中

@GetMapping("/boss/{bossId}/{empId}")
    public Map boss(@MatrixVariable(value = "age",pathVar = "bossId") Integer bossAge,
                    @MatrixVariable(value = "age",pathVar = "empId") Integer empAge){
        Map<String,Object> map = new HashMap<>();

        map.put("bossAge",bossAge);
        map.put("empAge",empAge);
        return map; // 返回一个json字符串 里面有两个属性

    }

你可能感兴趣的:(Springboot,spring,boot,前端,java)