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";}
}
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;}
}
-
传入单个参数(不传,非基础数据)
-
隐藏参数(request,response)
-
多参数按照的名称而不是顺序
-
前后端参数名不同,用@RequestParam进行映射(参数重命名)
-
表单/用户对象的获取(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; }
-
JSON对象数据获取(和之前不同)(需要使用@RequestBody注解声明)
注意:JSON对象的模拟发送(postman的发送)
即通过请求体获取对象
-
从普通的url的path获取参数(还比较常用)(使用@PathVariable这个注解实现)【详情页也是使用的一个经典场景】
参数可传可不传,需要设置required属性
路由里边的花括号是对参数名敏感的意思
好处:1.搜索引擎抓取关键字权重会比较高 2.参数比较少的情况下,url更加简洁
-
获取上传文件,@RequestPart注解【保存在数据库中使用varchar】
必须使用指定类型接收,才能把具体文件流转化(图片,文档…)
注意:使用Postman模拟前端图片上传(file)
有的传到自己服务器(项目不多的话),有的传到OSS上边的(腾讯或阿里专门提供的)
-
获取cookie(请求体)使用@CookieValue注解
-
获取header使用@RequestHeader注解
-
获取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";}
}
-
返回静态页面(使用比较少,因为前后端分离)
-
返回非静态页面(JSON,HTML…框架会自动适配)
-
返回跳转【请求重定向和请求转发(实现方式有很多)】(使用比较少,因为前后端分离,但是有时也会有的)
还可以通过reponse对象的sendRedirect方法…
请求转发和请求重定向的区别
(字越少事越大)
请求转发字比较少,需要客户端执行跳转,而请求重定向什么也不干,只是告诉客户端去哪访问。