Springmvc

springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。

springmvc是一个基于mvc的web框架。

基本概念和执行过程

第一步:浏览器发起请求到前端(核心)控制器(DispatcherServlet)

前端控制器决定什么类型的请求会进入springmvc框架。

第二步:前端控制器请求处理器映射器(HandlerMapping)查找处理器(Handler)

映射器作用:根据特定规则查找处理器,找不到报异常。

第三步:处理器映射器(HandlerMapping)向前端控制器返回找到的处理器(Handler)

第四步:前端控制器调用处理器适配器(HandlerAdapter)去执行Handler

适配器作用:执行某种特定的Handler

第五步:处理器适配器去执行处理器(Handler)

第六步:处理器(Handler)执行完成后给处理器适配器返回模型视图(ModelAndView)

第七步:处理器适配器向前端控制器继续返回ModelAndView

第八步:前端控制器请求视图解析器(ViewReslover)去解析视图

第九步:视图解析器向前端控制器返回视图View

第十步:前端控制器进行视图渲染

第十一步:前端控制器向用户响应结果

入门程序

l 准备环境和jar包

Spring的4+1

Spring的Spring-web

Spring的Spring-webmvc

jstl

l 创建springmvc配置文件

在classpath下创建springmvc的配置文件,文件名习惯是:springmvc.xml

l 配置前端(核心)控制器

在web.xml文件中配置springmvc的前端控制器DispatcherServlet,且向contextConfigLocation属性注入springmvc配置文件的路径。如果不配置contextConfigLocation,默认加载WEB-INF/servletname-servlet.xml

url-pattern的值:*.action、/ 。 /*报错

l 配置处理器适配器

在springmvc的配置文件中,配置处理器适配器类SimpleControllerHandlerAdapter。能执行实现了Controller接口的Handler。

l 编写和配置处理器

处理器类Handler,其实功能等价于strtus2的action动作类。需实现controller接口。才能由SimpleControllerHandlerAdapter适配器执行。

向模型视图填充数据,相当于填充到request域。

在springmvc配置文件中配置处理器类。

<bean name="/hello.action" class="com.springmvc_01.handler.UserHandler"></bean>

l 编写视图

在WEB-INF下创建jsp目录,在目录中创建index.jsp页面

l 配置处理器映射器

在springmvc配置文件中配置处理器映射器类BeanNameUrlHandlerMapping,能根据bean的name属性作为url查找处理器。

l 配置视图解析器

在springmvc配置文件中配置视图解析器InternalResourceViewResolver,解析jsp视图。

l 部署调试

http://ip:port/site/动作名

映射器和适配器

非注解映射器和适配器(掌握)

l 非注解映射器:

org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

作用:根据bean的name属性作为url查找。

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

简单url映射,配置时,注入mappings指定url和处理器类的映射关系。

注:多个映射器可以共存,前端控制器自动判断用哪个映射器。

l 非注解适配器:

org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

要求编写的Handler实现Controller接口。

org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter

要求编写的Handler实现HttpRequestHandler接口。

此方法可以通过修改response,设置响应的数据格式,比如响应json等。

多个适配器可以共存

l DispatcherSerlvet.properties文件

位置在:/org/springframework/web/servlet/DispatcherServlet.properties,是框架的配置文件。

前端控制器默认从DispatcherSerlvet.properties文件中加载映射器、适配器、视图解析器等组件,如果不在配置文件中配置,使用默认的加载。

注解映射器和适配器(掌握)

注解映射器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping。

注解适配器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter。

l 配置注解映射器适配器

配置主键映射器和适配器时,可以用bean配置。

也可以使用<mvc:annotation-driven>配置,默认加载参数绑定方法,json转换解析器等功能。

开发中使用<mvc:annotation-driven>。

注:注解映射器和适配器必须配对使用。

l 开发注解Handler

n 编写Handler类

使用@Controller标识它是一个Handler动作类

用@RequestMapping实现方法和url的映射,建议url和方法名一样

n 配置Handler

可以使用bean单独配置Handler

也可以使用<context:component-scan>标签指定扫描的包,自动扫描Handler。

小结

理解springmvc的前端控制器、处理器映射器、处理器适配器、视图解析器用法。

前端控制器url-pattern的配置:*.action、/

<mvc:annotation-driven>配置注解适配器和映射器

<context:component-scan>配置注解类扫描包

视图解析器前缀和后缀

配置视图解析器时,可以注入prefix前缀,和suffix后缀。

用户访问的路径=prefix+用户url+suffix

Handler详解

@RequestMapping

l url映射

将handler中的方法映射到url上。

l 窄化请求映射

在动作类上用@RequestMapping指定访问当前动作类中方法的父路径。

l 限制请求方式

指定只接受get类型或post类型的请求。

handler方法返回值

l 返回ModelAndView

Handler中的方法可以返回ModelAndView

l 返回String

1. 返回逻辑视图。

return "/jsp2";真正路径=前缀+逻辑视图+后缀

2. 重定向

return "redirect:/index.jsp";

3. 页面转发

return "forward:/index.jsp";

l 返回void

当方法返回void时,可以使用request转发页面,也可以使用response页面重定向,也可以使用response指定响应结果,例如响应json数据。

参数绑定

客户端发送的请求是key/value,经过参数绑定,将请求参数绑定到handler方法的形参上。

l 默认参数绑定

直接在controller方法形参上定义以下类型,可以直接使用。

n HttpServletRequest

n HttpServletResponse

n HttpSession

n Model/ModelMap:Model是一个接口,ModelMap是一个接口实现。

l 简单类型参数绑定

当请求参数名和controller方法的形参名一致,参数会自动绑定成功。

参数名和方法形参名可以不一致,可以通过@RequestParam对参数进行绑定,。

l Pojo类型参数绑定

页面中<input>的name属性的值和handler中的方法的pojo形参中的属性名一致,自动将页面中数据绑定到pojo。

l 包装pojo类型参数绑定

Handler方法中形参类型是包装pojo,pojo的属性又是pojo。

让<input>标签name属性的值是handler中方法形参的pojo对象中的pojo属性的属性。会自动参数绑定。

集合类型参数绑定

l 数组绑定

页面发送多个相同key不同value的数据。在handler方法形参中定义数组接收。

l list绑定

在包装pojo中定义list类型属性

<input type="text" name="list[0]" value="b">

l map绑定

在包装pojo中定义map类型属性。

<input type="checkbox" name="map[key1]" value="c">

自定义converter

controller形参中的pojo对象,如果属性中有日期类型,可能需要自定义参数绑定。

l 自定义类

自定义类实现Converter接口,重写方法。

l 配置转换器

配置自定义参数绑定bean,对应的类是FormattingConversionServiceFactoryBean类,注入converters,指定转换器类。

在注解配置中用conversion-service引用参数绑定类。

jsp springmvc 视图解析器_SpringMVC学习笔记相关推荐

  1. jsp springmvc 视图解析器_Springmvc中多视图解析器解析问题

    最近被问到过几次关于springmvc多视图解析器解析的问题:总结一下. 1.问题: 假设我有两个jsp: WEB-INF/html/a.jsp WEB-INF/report/b.jsp 且我配置了视 ...

  2. jsp springmvc 视图解析器_springMVC配置jsp/html视图解析器

    1.maven项目引入freemark相关jar包 freemaker是以个模板引擎,可以根据提供的数据和创建好的模板,去自动的创建html静态页面.所以在返回html视图时可以用这个引擎结合数据生成 ...

  3. jsp springmvc 视图解析器_SpringMVC工作原理

    SpringMVC的工作原理图: SpringMVC流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherServlet收到请求调用HandlerMapp ...

  4. springmvc视图解析器_SpringMVC视图及REST风格

    什么是视图解析器? springMVC用于处理视图最重要的两个接口是ViewResolver和View. ViewResolver的主要作用是把一个逻辑上的视图名称解析成一个真的的视图,而Spring ...

  5. jsp springmvc 视图解析器_Java面试题整理——SpringMVC

    SpringMVC 1.什么是SpringMVC Spring MVC是一个MVC的开源框架,Spring MVC = Struts2+spring,Spring MVC就相当于是Struts2加上S ...

  6. SpringMVC视图解析器

    SpringMVC视图解析器 前言 在前一篇博客中讲了SpringMVC的Controller控制器,在这篇博客中将接着介绍一下SpringMVC视 图解析器.当我们对SpringMVC控制的资源发起 ...

  7. SpringMVC视图解析器(转)

    前言 在前一篇博客中讲了SpringMVC的Controller控制器,在这篇博客中将接着介绍一下SpringMVC视图解析器.当我们对SpringMVC控制的资源发起请求时,这些请求都会被Sprin ...

  8. SpringMVC 视图解析器

    1.视图解析器 会 根据 把控制器返回的逻辑视图名 确定 渲染模型的视图文件的物理位置. Spring MVC的一个重要特性:将控制器中处理请求的逻辑 和 视图中渲染实现 解耦. 控制器方法和视图实现 ...

  9. springmvc如何使用视图解析器_SpringMVC的工作原理

    SpringMVC的工作原理图: SpringMVC流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherServlet收到请求调用HandlerMapp ...

最新文章

  1. Struts2返回json
  2. 转:【AI每日播报】从TensorFlow到Theano:横向对比七大深度学习框架
  3. 嵌入网站的挖矿代码——Webmine
  4. 【Python】Scrapy入门实例
  5. 用户登陆进去后,没有权限操作
  6. 最小二乘法和极大似然估计
  7. linux目录与文件
  8. 皮尔逊相关系数(Pearson Correlation Coefficient)
  9. python box2d模拟平抛运动_[HTML5]使用Box2dWeb模拟飞行箭矢
  10. 使用ViewPage + Fragment,ViewPage所在的activity重建时的问题
  11. SpringBoot整合腾讯云COS
  12. 小米官网竖直导航栏html,手把手教你做小米商城顶部导航栏
  13. 计算机领域经典书籍推荐
  14. 线程的同步和异步理解
  15. 计算机组成原理实验报告JMPR,计算机组成原理实验四:组合逻辑控制器部件教学实验...
  16. Cousera吴恩达深度学习第二次编程作业
  17. CXF 客户端报错 No conduit initiator was found for the namespace http://schema
  18. 脚本及恶意网页攻击实验
  19. 智能家居改装方案学习笔记【双控灯改智能单控灯】2022.05.08
  20. BGP线路是什么意思?BGP三线的优点是什么?

热门文章

  1. linux日志本地存储和网络存储,文件系统和本地存储管理 1
  2. [转载] 陈皓:一些重要的算法
  3. 【数据结构与算法】之深入解析“寻找旋转排序数组中的最小值”的求解思路与算法示例
  4. LeetCode Algorithm 414. 第三大的数
  5. PAT (Basic Level) Practice (中文)1012 数字分类 (20 分)
  6. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1079:计算分数加减表达式的值
  7. VS2017简单用法
  8. 【机器视觉】 reset_fuzzy_measure算子
  9. 【机器视觉】 endfor算子
  10. 【机器视觉】 assign_at算子