Spring MVC
Spring MVC
1.执行流程:
- 用户点击某个连接发起HTTP请求,提交到前端控制器(DispatcherServlet)。
- 前端控制器(DispatcherServlet)收到请求后,将请求信息交给处理器映射器(HandlerMapping)。
- 处理器映射器(HandlerMapping)根据,用户提交的URL查找相应的处理器(Handler)返回执行链(HandlerExecutionChain)。
- 前端控制器(DispatcherServlet)将执行链信息,发送给处理器适配器(HandlerAdapter)。
- 处理器适配器(HandlerAdapter)将根据处理器(Handler)信息,执行相应的处理器(Handler),又称Controller。
- 返回ModelAndView对象(包含Model 数据与 View数据),处理器适配器(HandlerAdapter)接收后返回给前端控制器(DispatcherServlet)。
- 前端控制器(DispatcherServlet),接收后发送请求给视图解析器(ViewResolver)对视图(View)进行解析。
- 视图解析器(ViewResolver),将视图(View)信息进行匹配到相应的视图(View)结果,返回一个真正JSP页面。
- DispatcherServlet 接收到具体的 视图(View)后,进行视图渲染,将 Model 中的模型数据填充到视图(View)中,生成最终的 View(视图)
- 视图(View)负责将结果显示到浏览器(客户端)。
2.常用注解
@Controller
- 注解在org.springframework.stereotype.Controller包下,指示Spring类实例是一个控制器。
- @Controller 负责处理由DispatcherServlet分发的请求,它把用户请求数据,经过业务处理后封装成一个model,返回给对应View。
- @Controller用于标记一个类,使用它标记的类就是一个Spring MVC Controller对象,分发处理器会扫描使用该注解的类的方法,并检测是否使用了@RequestMappinng注解,@Controller只定义类成为一个控制器类,而使用@RequestMapping才是一个真正处理请求的处理器。
- 配置文件两种方式
<!--方式一-->
<bean class="包下,Controller文件"/>
<!--方式二-->
< context:component-scan base-package = "包" />
//路径写到controller的上一层(扫描包)
@Controller
public class HelloController{
@RequestMapping("/helloWord")
public String helloWorld(Model model){
model.addAttribute("msg",Hello World);
return "helloWorld";
}
}
@RequestMapping
-
注解在org.springframework.web.bind.annotation.RequestMapping包下,指示Spring 用一个类或者方法来处理请求动作。(可以同时用于类或方法上)。
-
@RequestMapping负责处理地址映射,如果作用在类上则类中所有响应的方法的请求都以该路径作为父路径。
@Congtroller
@RequestMapping("/user")
public class UserController{
@RequestMapping("/login")
public String login(){
return "login";
}
@RequestMapping("/index")
public String index(){
return "index";
}
}
@PathVariable
-
注解在org.springframework.web.bind.annotation.PathVariable包下,获取URL 参数。
-
实现RestFull风格
//localhost:8080/login/admin @RequestMapping("/login/{name}") public String login(@PathVariable String name){ return "login"; }
@RequestParam
-
注解在org.springframework.web.bind.annotation.RequestParam 包下,与@PathVariable相同都是获取URL参数。
-
传统风格
// localhost:8080/login?name=admin @RequestMapping("/login") public String login(@RequestParamString name){ return "login"; }
@RequestBody注解
-
注解在org.springframework.web.bind.annotation.RequestBody包下,主要用来接收前端传给后端的Json字符串的数据。
-
GET方式没有请求体,所以使用@RequestBody注解时,使用带请求体方式如POST。
$.ajax({
url:"/login",
type:"POST",
data:'{"userName":"admin","pwd","admin123"}',
content-type:"application/json charset=utf-8",
success:function(data){
alert("request success ! ");
}
});
@RequestMapping("/login")
public void login(@RequestBody String userName,@RequestBody String pwd)
{
System.out.println(userName+" :"+pwd);
}