Spring MVC基础知识

  Web项目开发过程中一般都是使用MVC(Model-View-Controller)模式,早先的Struts2到Spring MVC,再到现在Spring Boot,都是相似的思

路。Spring Boot用多了就真的不想回到SSM或者SSH框架(虽然公司还在用Spring MVC),写这篇随笔,算是自己对Spring MVC内容的复习吧。

工作流程

DispatchServlet的配置方式

1、web.xml

2、通过将其配置在Servlet容器中(Tomcat7+版本要求)

/**
 * AbstractAnnotationConfigDispatcherServletInitializer的拓展类会自动配置DispatchServlet和
 * Spring ApplicationContext(应用上下文位于应用程序的Servlet上下文之中)
 */
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 返回带有@Configuration注解的类用来定义ContextLoaderListener创建的应用上下文中的bean
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }

    /**
     * 返回带有@Configuration注解的类用来定义DispatchServlet创建的应用上下文中的bean
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    /**
     * 将一个或多个路径映射到DispatchServlet上。"/"表示使用应用默认的Servlet,会理所有请求
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }
}
配置DispatchServlet
public class WebConfig  extends WebMvcConfigurerAdapter{
//通常包含视图解析器配置
//静态资源处理
//。。。。。
}
WebConfig

DispatchServlet启动的时候,会创建Spring应用上下文,加载声明的bean,Spring Web应用中,通常还有另一个应用上下文,由

ContextLoaderListener创建

DispatchServlet:加载包含Web组件的bean,如控制器、视图解析器、处理器映射

ContextLoaderListener:加载应用中的其他bean,通常是驱动应用后端的中间层和数据层组件

常用注解

1、@EnableWebMvc:在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,不使用注解,需要重写

WebMvcConfigurerAdapter方法用于对SpringMVC的配置。

2、@RequestParam:http://host:port/path?id=1001

public String test1(@RequestParam("id") String id)

3、@PathVariable:http://host:port/path/1001

public String test2(@PathVariable("id") String id) 

4、表单验证:都在javax.validation.constraints包里面

public class Login {
    @NotNull
    @IsMobile
    private String mobile;
    
    @NotNull
    @Length(min=32)
    private String password;
}
public Result<String> doLogin(HttpServletResponse response, @Valid LoginVo loginVo) {
    log.info(loginVo.toString());
    //登录
    String token = userService.login(response, loginVo);
    return Result.success(token);
}

5、@ResponseBody:支持将返回值放在response内,而不是一个页面,通常用户返回json数据

@ResponseBody
public String test3() {

    return "id";//这时候返回到页面的是String,而不是解析到id.html等类似的页面
}

6、@RequestBody:允许request的参数在request体中,而不是在直接连接在地址后面。

7、@RestController:该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,该Controller的所有方法都默认加上了@ResponseBody。

@Controller
@ResponseBody
public @interface RestController {
    String value() default "";
}

8、@ModelAttribute:绑定键值对到Model里

先写到这,同学来了,去喝酒了。。。。

猜你喜欢

转载自www.cnblogs.com/huigelaile/p/10963320.html