Spring MVC架构请求处理流程
用户发送请求☞DispatcherServlet DispatcherServlet是前端控制器,作为统一访问点,进行全局的流程控制。其收到请求后不直接进行处理,而是委托其他解析器进行处理。 DispatcherServlet☞HandlerMapping DispatcherServlet根据URI调用HandlerMapping,获得HandlerExecutionChain对象(一个Handler对象(页面控制器)和多个HandlerInterceptor对象(拦截器)) DispatcherServlet☞HandlerAdapter HandlerAdapter将Handler包装为Adapter,采用Adapter模式,从而很容易支持多类型Handler HandlerAdapter☞Handler相应方法调用 HandlerAdapter会根据适配结果调用真正地Handler处理方法,并返回一个ModelAndView对象(模型数据、逻辑视图名) ModeAndView中逻辑视图名☞ViewResolver ViewResolver将逻辑视图名解析为具体的View Model☞View☞渲染 View根据Model数据进行渲染,Model本质是一个Map数据结构,因此很容易支持各种视图技术 DispatcherServlet☞响应客户端
Spring MVC框架的使用
pom.xml中添加依赖
spring web MVC 依赖 jackson 依赖
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-webmvc</ artifactId>
< version> 5.1.12.RELEASE</ version>
</ dependency>
< dependency>
< groupId> com.fasterxml.jackson.core</ groupId>
< artifactId> jackson-databind</ artifactId>
< version> 2.10.0</ version>
</ dependency>
< context-param>
< param-name> contextConfigLocation</ param-name>
< param-value> classpath:root.xml</ param-value>
</ context-param>
< listener>
< listener-class> org.springframework.web.context.ContextLoaderListener</ listener-class>
</ listener>
< servlet>
< servlet-name> springDispatcherServlet</ servlet-name>
< servlet-class> org.springframework.web.servlet.DispatcherServlet</ servlet-class>
< init-param>
< param-name> contextConfigLocation</ param-name>
< param-value> classpath:spring-servlet.xml</ param-value>
</ init-param>
< load-on-startup> 1</ load-on-startup>
</ servlet>
< servlet-mapping>
< servlet-name> springDispatcherServlet</ servlet-name>
< url-pattern> /</ url-pattern>
</ servlet-mapping>
创建root.xml&spring-servlet.xml
root.xml可以暂时不用写东西 spring-servlet.xml中设置注解驱动和扫描包路径
< mvc: annotation-driven> </ mvc: annotation-driven>
< context: component-scan base-package = " com.test.controller" > </ context: component-scan>
@Controller
public class UserController {
@RequestMapping ( "/login" )
public ModelAndView login ( String username, String password) {
ModelAndView mav = new ModelAndView ( "/user.jsp" ) ;
mav. addObject ( "username" , username) ;
return mav;
}
@RequestMapping ( "/login" )
public String login ( String username, String password, Model model, HttpSession session) {
model. addAttribute ( "username" , username) ;
session. setAttribute ( "username" , username) ;
return "/user.jsp" ;
}
@RequestMapping ( "/loginUser" )
public String login ( User user, Model model) {
model. addAttribute ( "user" , user) ;
return "/user.jsp" ;
}
@RequestMapping ( "/loginMap" )
public String login ( @RequestParam Map< String, Object> user, Model model) {
model. addAttribute ( "user" , user) ;
return "/user.jsp" ;
}
@RequestMapping ( "/testParam" )
public String testParam ( @RequestParam ( defaultValue = "1" ) int pageNum, @RequestParam ( name = "abc" ) String name) {
return "/user.jsp" ;
}
@RequestMapping ( value = "/testMethod" , method = { RequestMethod. POST } )
public String testMethod ( ) {
return "/user.jsp" ;
}
@RequestMapping ( "/testResp" )
public String testResp ( ) {
return "redirect:/user.jsp" ;
}
@RequestMapping ( value = "/testRespText" , produces = { "text/plain;charset=utf-8" } )
@ResponseBody
public String testRespText ( ) {
return "你好, world" ;
}
@RequestMapping ( value = "/testRespJson" , produces = { "application/json;charset=utf-8" } )
@ResponseBody
public List< User> select ( ) {
List< User> users = new ArrayList < User> ( ) ;
users. add ( new User ( 1 , "qq" , "34324" ) ) ;
users. add ( new User ( 1 , "qq" , "34324" ) ) ;
users. add ( new User ( 1 , "qq" , "34324" ) ) ;
users. add ( new User ( 1 , "qq" , "34324" ) ) ;
return users;
}
}