Spring学习笔记之二: Spring MVC

Spring学习笔记之二: Spring MVC

Spring MVC的请求路线

在Spring MVC中,DispatcherServlet就是前端控制器

Spring MVC 架构

  1. DispatcherServlet的任务是将请求(包含URL)发送给Spring MVC控制器(controller)
  2. DispatcherServlet会查询一个或多个处理器映射(handler mapping), 选择合适的控制器
  3. 请求到达控制器,等待控制器处理,控制器将业务逻辑委托给一个或多个服务对象
  4. 控制器完成逻辑处理后,将模型(model)和视图名返回给DispatcherServlet
  5. DispatcherServlet使用视图解析器(view resolver)将逻辑视图名匹配成一个特定的视图实现
  6. 视图渲染输出

搭建Spring MVC

配置Spring MVC

Spring MVC通常带有两个应用上下文
- DispatcherServlet加载包含Web组件的bean,如控制器、视图解析器和处理器映射
- ContextLoaderListener要加载应用中的其他bean,这些bean通常是驱动应用后端的中间层和数据层组件

example:

import org.springframework.web.servlet. support.
    AbstractAnnotationConfigDispatcherServletInitializer

public class WebAppInitializer extends 
    AbstractAnnotationConfigDispatcherServletInitializer {
    @Override protected String [] getServletMappings () { 
        return new String[] { "/" }; 
    }

    @Ovemde protected Class<?>[] getRootConfigClasses() {
         return new Class<?>[] { RootConfig.class };
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() {
         return new Class<?>[] { WebConfig.class }; 
    } 
} 

AbstractAnnotationConfigDispatcherServletInitializer会同时创建DispatcherServletContextLoadeListener:
- getServletConfigClasses()方法返回的带有@Configuration注解的类会用来定义DispatcherServlet创建的应用上下文中的bean
- getRootConfigClasses()方法返回的带有@Configuration注解的类会用来配置ContextLoaderListener创建的应用上下文中的bean

启用Spring MVC

  • 通过启用注解驱动的Spring MVC
  • 通过@EnableWebMvc注解实现配置类WebConfig

接受请求的输入

Spring MVC允许以三种方式将客户端的数据传送到控制器的处理器方法中:

  • 查询参数(Query Parameter)
  • 表单参数(Form Parameter)
  • 路径变量(Path Variable)

通过查询参数输入

通过注解@RequestParam实现,该注解可以增加参数:

  • value(String): 传入参数名
  • defaultValue(String): 默认值

example:

@RequestMapping(value = "/users", method = RequestMethod.GET)
public String getUser(
    @RequestParam(value = "id",
                  defaultValue="AMX1948_Châtillon") String id) {
       return "user";               
  }

这个处理器方法将会处理形如/users?id=1948的请求

通过路径参数接受输入

通过注解@PathVariable实现

example:

@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
public String getUser(
    @PathVariable("id"") String id) {
       return "user";           
  }

这个处理器方法将会处理形如/users/1948的请求, 这种请求的优先级高于上一种

处理表单

传入POJO对象,或者请求体,通过@RequestBody注解实现

example:

@RequestMapping(value = "/users/list", method = RequestMethod.POST)
    public List<User> listUser(@RequestBody ListUserReq listReq) throws Exception {
        ……
        return userList;

表单的校验可以通过JSR303JSR305的相关API实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值