SpringWeb项目核心功能总结

SpringWeb项目核心功能总结

文章目录

  • SpringWeb项目核心功能总结
    • 1.浏览器与Java程序的连接(个人偏好使用@RequestMapping)
    • 2.参数的传入
    • 3.结果的返回
    • 请求转发和请求重定向的区别

核心功能用到的注解:

  • @RestController=@Controller+@ResponseBody
  • RequestMapping【GetMapping,PostMapping…】
  • @Data
  • @RequestParam
  • @RequestPart
  • @CookieValue
  • @SessionAttribute

注解的详细用法在这:

MVC常用注解详解

这里是进一步简化和总结,建议先看上边,再看这个

1.浏览器与Java程序的连接(个人偏好使用@RequestMapping)

首先注册一级路由,指定返回的页面不是静态页面,以及加上类注解

然后注册二级路由,写具体的代码,返回相应的结果

@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/sayhi")//二级路由注册
    public String sayHi(){
        return "hi";
    }
    @RequestMapping(value = "/sayhi2",method = RequestMethod.POST)
    public String sayHi2(){
        
        return "hi";
    }
}

SpringWeb项目核心功能总结_第1张图片

2.参数的传入

传普通单个参数|多个参数(前后端参数名相同和不同(含参数类型的影响))|cookie|session|文件|JSON对象|header

spring这里传参数和之前是一样的,不传的话会得到默认值

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/gp")
    public String getParam(String name){
        return name;
    }
    @RequestMapping("/gp3")
    public String getParam(HttpServletRequest request,HttpServletResponse response) throws IOException {
        response.sendRedirect("http://www.javacn.site");
        return "hi";
    }
    @RequestMapping("/gp4")
    public String getParam(String name,String password) {
        return name+":"+password;
    }
        @RequestMapping("/gp5")
    public String getParam5(@RequestParam("username") String name) {
        return name;
    }
    //获取对象
    @RequestMapping("/reg")
    public Object getParam9(UserInfo userInfo){
        return userInfo;
    }
    //获取JSON对象
    @RequestMapping("/reg2")
    public Object reg2(@RequestBody UserInfo userInfo){
        return userInfo;
    }
    //从url的path获取参数
    @RequestMapping("/reg3/{name}/{pwd}")
    public Object reg3(@PathVariable String name,@PathVariable(required = false,name = "pwd") String password){
        return name+":"+password;
    }
    //获取上传文件(可以上生产线的代码)
    @RequestMapping("/myupload2")
    public Object upload2(@RequestPart("test")MultipartFile file){
        String fileName= UUID.randomUUID()+file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        File saveFile=new File("F://test//"+fileName);
        try {
            file.transferTo(saveFile);
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
    //获取cookie
    @RequestMapping("/getck")
    public Object getck(@CookieValue(value = "java",required = false)String java){
        return java;
    }
    //获取Header
    @RequestMapping("gethd")
    public Object getHeader(@RequestHeader("Host")String ht){
        return ht;
    }
    //获取Session(更为方便的,原来的比这个麻烦一点)
    @RequestMapping("getsess")
    public Object getSession(@SessionAttribute(SESSION_KEY)String name){
        return "session:"+name;
    }
}
  1. 传入单个参数(不传,非基础数据)

  2. 隐藏参数(request,response)

  3. 多参数按照的名称而不是顺序

  4. 前后端参数名不同,用@RequestParam进行映射(参数重命名)

  5. 表单/用户对象的获取(spring web自动实现参数映射(拦截器,统一处理),保证属性名同)

    package com.example.demo.entity;
    
    import lombok.Data;
    
    @Data
    public class UserInfo {
        private int id;
        private String name;
        private String password;
        private int age;
    }			
    
  6. ​ JSON对象数据获取(和之前不同)(需要使用@RequestBody注解声明)

    注意:JSON对象的模拟发送(postman的发送)

    即通过请求体获取对象

  7. 从普通的url的path获取参数(还比较常用)(使用@PathVariable这个注解实现)【详情页也是使用的一个经典场景】

    参数可传可不传,需要设置required属性

    路由里边的花括号是对参数名敏感的意思

    好处:1.搜索引擎抓取关键字权重会比较高 2.参数比较少的情况下,url更加简洁

  8. 获取上传文件,@RequestPart注解【保存在数据库中使用varchar】

    必须使用指定类型接收,才能把具体文件流转化(图片,文档…)

    注意:使用Postman模拟前端图片上传(file)

    有的传到自己服务器(项目不多的话),有的传到OSS上边的(腾讯或阿里专门提供的)

  9. 获取cookie(请求体)使用@CookieValue注解

  10. 获取header使用@RequestHeader注解

  11. 获取session使用@SessionAttribute注解

3.结果的返回

静态页面的返回|非静态页面的返回|跳转链接的返回

//加斜杠是从根目录返回,不加斜杠是从当前页面找静态页面

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("test")
public class TestController {
    //返回静态界面
    @RequestMapping("/index")
    public Object getIndex(){
        return "/index.html";
    }
    //返回json对象
    @RequestMapping("/reg2")
    public Object reg2(@RequestBody UserInfo userInfo){
        return userInfo;
    }
    //请求重定向
    @RequestMapping("index1")
    public String index1(){
        return "redirect:/index1.html";
    }
    //请求转发
    @RequestMapping("index2")
    public String index2(){
        return "forward:/index2.html";
    }
}
  1. 返回静态页面(使用比较少,因为前后端分离)

  2. 返回非静态页面(JSON,HTML…框架会自动适配)

  3. 返回跳转【请求重定向和请求转发(实现方式有很多)】(使用比较少,因为前后端分离,但是有时也会有的)

    还可以通过reponse对象的sendRedirect方法…

请求转发和请求重定向的区别

(字越少事越大)

请求转发字比较少,需要客户端执行跳转,而请求重定向什么也不干,只是告诉客户端去哪访问。

你可能感兴趣的:(JAVA,EE,Spring,SpringMVC,Java)