单例模式 singleton
IOC容器每次创建bean对象,都是同一个。
当Bean的作用域为单例模式时,他会在一开始(容器加载配置时)就被创建,之后拿到的都是这个对象。(可以配置lazy懒加载,不在一开始就创建对象)
原型模式 prototype
每次调用都新建一个对象。
处于原型模式时,只有在被获取时才会被创建,也就是说,在单例模式下Bean会被IOC容器存储,只要容器没有被销毁,那么此对象将会一直存在,而原型模式才相当于在要用的时候直接new一个对象,并不会被保存。
controller控制器
@RequestMapping
@RequestMapping(“/index”)可以多个路径->@RequestMapping({“/index”, “/hello”})
放在当前Controller类名上时,当前controller中的所有Mapping映射前面都需要加一个这个路径。
@Controller
@RequestMapping("/yyds")
public class MainController {
@RequestMapping({"/index", "/test"})
public ModelAndView index(){
return new ModelAndView("index");
}
}
路径还支持使用通配符进行匹配:
-
?:表示任意一个字符,比如
@RequestMapping("/index/x?")
可以匹配/index/xa、/index/xb等等。 -
*:表示任意0-n个字符,比如
@RequestMapping("/index/*")
可以匹配/index/lbwnb、/index/yyds等。 -
**:表示当前目录或基于当前目录的多级目录,比如
@RequestMapping("/index/**")
可以匹配/index、/index/xxx等。RequestMapping可以在内部设置method来定义允许访问的类型。也可以直接明确书写 @PostMapping或@GetMapping、@DeletedMapping等
@RequestParam和@RequestHeader
获取请求中的参数,只需要在方法上添加一个形参,形参前面加上@RequestParam:
@RequestMapping(value = "/index") public ModelAndView index(@RequestParam("username") String username){ }
我们需要在
@RequestParam
中填写参数名称,参数的值会自动传递给形式参数,我们可以直接在方法中使用,注意,如果参数名称与形式参数名称相同,即使不添加@RequestParam
也能获取到参数值。
一旦添加@RequestParam
,那么此请求必须携带指定参数,我们也可以将require属性设定为false来将属性设定为非必须。
RestFul风格
中文释义为**“表现层状态转换”**(名字挺高大上的),它不是一种标准,而是一种设计风格。它的主要作用是充分并正确利用HTTP协议的特性,规范资源获取的URI路径。通俗的讲,RESTful风格的设计允许将参数通过URL拼接传到服务端,目的是让URL看起来更简洁实用,并且我们可以充分使用多种HTTP请求方式(POST/GET/PUT/DELETE),来执行相同请求地址的不同类型操作。
这种风格的连接,我们就可以直接从请求路径中读取参数,比如:
http://localhost:8080/mvc/index/123456
我们可以直接将index的下一级路径作为请求参数进行处理,也就是说现在的请求参数包含在了请求路径中:
@RequestMapping("/index/{str}")
public String index(@PathVariable String str) {
System.out.println(str);
return "index";
}
我们可以按照不同功能进行划分:
- POST http://localhost:8080/mvc/index - 添加用户信息,携带表单数据
- GET http://localhost:8080/mvc/index/{id} - 获取用户信息,id直接放在请求路径中
- PUT http://localhost:8080/mvc/index - 修改用户信息,携带表单数据
- DELETE http://localhost:8080/mvc/index/{id} - 删除用户信息,id直接放在请求路径中
我们分别编写四个请求映射:
@Controller
public class MainController {
@RequestMapping(value = "/index/{id}", method = RequestMethod.GET)
public String get(@PathVariable("id") String text){
System.out.println("获取用户:"+text);
return "index";
}
@RequestMapping(value = "/index", method = RequestMethod.POST)
public String post(String username){
System.out.println("添加用户:"+username);
return "index";
}
@RequestMapping(value = "/index/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable("id") String text){
System.out.println("删除用户:"+text);
return "index";
}
@RequestMapping(value = "/index", method = RequestMethod.PUT)
public String put(String username){
System.out.println("修改用户:"+username);
return "index";
}
}