springmvc学习笔记

阅读更多

1.springmvc流程

1、 用户发送请求至前端控制器DispatcherServlet

2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

5、 执行处理器(Controller,也叫后端控制器)。

6、 Controller执行完成返回ModelAndView

7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9、 ViewReslover解析后返回具体View

10、 DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

11、 DispatcherServlet响应用户

springmvc学习笔记_第1张图片

    1. DispatcherServlet:前端控制器

    用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

    2. HandlerMapping:处理器映射器

    HandlerMapping负责根据用户请求url找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

    在springmvc.xml配置文件中配置如下:

    

    <bean

class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />

    3. Handler:处理器

    Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。

    由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。

    4. HandlAdapter:处理器适配器

    通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

    在springmvc.xml配置文件中配置如下:

    

<bean

class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />

2.组件扫描器

    使用组件扫描器省去在spring容器配置每个Controller类的繁琐。

    在springmvc.xml配置文件中配置如下:

    

    <context:component-scan base-package="cn.itcast.springmvc.controller" />

3.注解驱动

    直接配置处理器映射器和处理器适配器比较麻烦,可以使用注解驱动来加载。

    SpringMVC使用自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter

    可以在springmvc.xml配置文件中使用替代注解处理器和适配器的配置。

    

    <mvc:annotation-driven />

4.参数绑定

    1.简单参数绑定

    参数类型推荐使用包装数据类型,因为基础数据类型不可以为null

    整形:Integer、int

    字符串:String

    单精度:Float、float

    双精度:Double、double

    布尔型:Boolean、boolean

    说明:对于布尔类型的参数,请求的参数值为true或false。或者1或0

    请求url:

    http://localhost:8080/xxx.action?id=2&status=false

    处理器方法:

    public String editItem(Model model,Integer id,Boolean status)

    2.@RequestParam

    使用@RequestParam常用于处理简单类型的绑定。

    value:参数名字,即入参的请求参数名字,如value=“itemId”表示请求的参数    区中的名字为itemId的参数的值将传入

    required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报错

    TTP Status 400 - Required Integer parameter 'XXXX' is not present

    defaultValue:默认值,表示如果请求中没有同名参数时的默认值

    定义如下:

    @RequestMapping("/itemEdit")

    public String queryItemById(@RequestParam(value = "itemId", required = true, defaultValue = "1") Integer id,ModelMap modelMap)

    3.pojo类绑定

    参数:表单中的数据。

    要求:pojo对象中的属性名和表单中input的name属性一致

springmvc学习笔记_第2张图片

springmvc学习笔记_第3张图片

    请求的参数名称和pojo的属性名称一致,会自动将请求参数赋值给pojo的属性。

    注意:

    提交的表单中不要有日期类型的数据,否则会报400错误。如果想提交日期类型的数据需要用到后面的自定义参数绑定的内容。

    4.自定义参数绑定

    由于日期数据有很多种格式,springmvc没办法把字符串转换成日期类型。所以需要自定义参数绑定。

    前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定。可以在springmvc处理器适配器上自定义转换器Converter进行参数绑定。

    一般使用注解驱动加载处理器适配器,可以在此标签上进行配置。

    DataConverter类:

    //Converter

    //S:source,需要转换的源的类型

    //T:target,需要转换的目标类型

    public class DateConverter implements Converter {

 

    @Override

    public Date convert(String source) {

    try {

    // 把字符串转换为日期类型

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");

    Date date = simpleDateFormat.parse(source);

 

    return date;

    } catch (ParseException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    // 如果转换异常则返回空

    return null;

    }

    }

    springmvc.xml配置:

    <mvc:annotation-driven conversion-service="conversionService" />

 

    

    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

    <property name="converters">

    <set>

    <bean class="cn.itcast.springmvc.converter.DateConverter" />

    set>

    property>

    bean>

    5.数组绑定

    Controller方法中可以用String[]接收,或者pojo的String[]属性接收。两种方式任选其一即可。

     方法一:义QueryVo,如下图:

springmvc学习笔记_第4张图片

    方法二:修改Controller中的方法

145534_rOiK_3591016.png

6.list绑定

    springmvc学习笔记_第5张图片

 

    name属性必须是list属性名+下标+元素属性。

springmvc学习笔记_第6张图片

5.方法限定

    1. 限定GET方法

    @RequestMapping(method = RequestMethod.GET)

    2.限定POST方法

    @RequestMapping(method = RequestMethod.POST)

    3.GET和POST都可以

    @RequestMapping(method = {RequestMethod.GET,RequestMethod.POST})

6.Controller方法返回

    1.返回void

    在Controller方法形参上可以定义request和response,使用request或response指定响应结果:

    1、使用request转发页面,如下:

    request.getRequestDispatcher("页面路径").forward(request, response);

    request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);

    2、可以通过response页面重定向

    response.sendRedirect("url")

    response.sendRedirect("/springmvc-web2/itemEdit.action");

    3、可以通过response指定响应结果,例如响应json数据如下:

    response.getWriter().print("{\"abc\":123}");

   2.返回字符串

    1.逻辑视图名

    controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。

    //指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/itemList.jsp

    return "itemList";

    2.Redirect重定向

    Contrller方法返回字符串可以重定向到一个url地址

springmvc学习笔记_第7张图片

    3.forward转发

    Controller方法执行后继续执行另一个Controller方法

springmvc学习笔记_第8张图片

7.json数据交互

    1.@RequestBody

    作用:

    @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上。

    使用POST请求,在请求体里面加入json数据

{

    "id": 1,

    "name": "测试商品",

    "price": 99.9,

    "detail": "测试商品描述",

    "pic": "123456.jpg"

}

    2.@ResponseBody

    作用:

    @ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端

    3.请求json,响应json实现

    如果需要springMVC支持json,必须加入json的处理jar

    我们使用Jackson这个jar,如下图:

springmvc学习笔记_第9张图片

Controller层:

springmvc学习笔记_第10张图片

配置json转换器:

    如果不使用注解驱动,就需要给处理器适配器配置json转换器,参考之前学习的自定义参数绑定。

    在springmvc.xml配置文件中,给处理器适配器加入json转换器:

springmvc学习笔记_第11张图片

 

转载于:https://my.oschina.net/u/3591016/blog/1486271

你可能感兴趣的:(springmvc学习笔记)