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方法…
请求转发和请求重定向的区别
(字越少事越大)
请求转发字比较少,需要客户端执行跳转,而请求重定向什么也不干,只是告诉客户端去哪访问。