springmvc的原理

springmvc的结构组成

一个中心

前端控制器  DispatcherServlet 负责请求的转发和响应的提交

三大组件

处理器映射器  HandlerMapping 负责根据url查找Handler

处理器适配器  HandlerAdapter  负责执行Handler

视图解析器    View resolver     负责解析view

经典MVC结构原理

以SSH框架为例

springmvc框架原理

springmvc的执行流程

1.     用户发起请求,请求到DispatcherServlet前端控制器

DispatcherServlet(中央调度),负责request和response,调用处理器映射器查找Handler,调用处理器适配器执行Handler,有了前端控制器降低了各各组件之间的耦合性,系统扩展性提高。

2.     DispatcherServlet前端控制器请求处理器映射器HandlerMapping查找Handler

根据用户请求的url,根据一定的规则去查找(比如:xml配置,注解)

3.     HandlerMapping处理器映射器将Handler返回给前端控制器

4.     DispatcherServlet前端控制器调用HandlerAdapter处理器适配器

5.     HandlerAdapter处理器适配器执行Handler

6.     Handler执行完成,返回ModelAndView

ModelAndView是springmvc的封装对象,将model和view封装在一起。

7.     HandlerAdapter处理器适配器将ModelAndView返回给前端控制器

8.     前端控制器调用视图解析器,进行视图解析,解析完成给前端控制器返回View

View是springmvc的封装对象,是一个接口,实现类包括jspview,pdfview……

9.     前端控制器调用view进行视图渲染,将模型数据填充到view(将model数据填充到request)响应给用户

10、前端控制器响应给用户

springmvc开发应用

配置式的springmvc开发

1.     在web.xml文件中配置springmvc前端控制器

contextConfigLocation指定 springmvc的全局配置文件 如果 contextConfigLocation不指定,默认找配置文件名称:servlet的name+"-servlet.xml"

1.     在springmvc.xml文件中配置三大组件

配置处理器映射器

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

配置处理器适配器

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

配置视图解析器

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

2.     编写Handler

由于使用SimpleControllerHandlerAdapter适配器,要求编写的Handler实现Controller接口。

3.     编写jsp页面

4.     配置Handler

由于使用处理器映射器BeanNameUrlHandlerMapping,要求在spring的容器配置Handler,Handler的name就是url。

<bean id="hello_controller"name="/helloworld.action" class="cn.itcast.springmvc.Hello"/>

配置式开发的注意事项

1.      Handler的编写和配置要和映射器,适配器对应

处理器映射器和处理器适配器有多个,Handler的配置和编写根据处理器映射器和处理器适配器进行

2.      逻辑视图名

调用:modelAndView.setViewName指定逻辑视图名,如果这里指定jsp的完整路径也支持

在springmvc.xml中修改视图解析器

修改action

注解式的spingmvc开发

1.     在web.xml文件中配置springmvc前端控制器

2.     配置注解式springmvc三大组件

<!--注解映射器 -->

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

<!--注解适配器 -->

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

3.     编写Handler

// 修改学生信息页面

// @RequestMapping指定url

@RequestMapping("/editstudent")

public String editstudent(Model model) throws Exception {

// 将学生信息的显示在页面

// 使用静态数据

Student student = new Student();

student.setName("张三");

student.setAge(32);

student.setBirthday(new Date());

// 需要将学生信息传到页面

model.addAttribute("student", student);

// 返回逻辑视图名

return "student/editstudent";

}

// 学生信息修改提交

@RequestMapping("/editstudentsubmit")

public String editstudentsubmit(Student student)throws Exception{

System.out.println(student);

return "success";

}

一个url对应action的一个方法

4.     使用注解方式将action类配置到spring容器中

1.      在spring文件中配置

2.      给acton类添加注解

Struts2与springmvc的不同

1.       springmvc的入口是servlet,struts是filter

2.       springmvc是基于方法开发,struts是基于类开发

action类中,一个url对应一个方法,对Handler对象,springmvc框架将一个方法封装到Handler中(只有一个method)。

Struts对action类进行实例化。

Springmvc中的action可以使用单例也可以使用多例,建议使用单例(对相同的方法只new一个)。

Struts不能用单例,因为struts传递参数是通过成员变量。

Springmvc通过形参接收参数好处:更符合软件开发的思想,和service接口类似。

3.       Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

Springmvc的参数解析过程

1.       页面请求数据:key/value

2.       参数解析器:

Spring提供了很多参数解析器,将key/value的数据解析成形参,通过反射解析method中的参数(类型、名称),按照类型和名称规则解析形参

3.       属性编辑器:

将key/value转换成pojo中的属性

4.       Action方法的形参

Springmvc开发常用注解

1.   @controller

标识该类为控制器类,@controller、@service、@repository分别对应了web应用三层架构的组件即控制器、服务接口、数据访问接口

2.   @RequestMapping

进行url映射,一个方法对应一个url,定义方法:在action方法上定义requestMapping

开发中经常使用根路径+子路径的方法管理url

例:

定义根路径:

在类名上边定义requestMapping

@RequestMapping("/stu")

定义子路径:

在方法上边定义requestMapping

@RequestMapping("/querystudent")

最终访问路径:根路径+子路径:/stu/ querystudent.action

SSM框架01--springmvc相关推荐

  1. JavaWeb学习之路——SSM框架之SpringMVC(八)

    SpringMVC参数传递:把内容写到方法(HandlerMethod)参数中,SpringMVC只要有这个内容,则会注入,在这里使用注解的方式来传递参数 前提使用springmvc注解功能,相应配置 ...

  2. SSM框架:SpringMVC

    SSM框架:SpringMVC 文章目录 前言 一.回顾 1. 学习方法说明 2. 回顾MVC架构 1.什么是MVC 2.MVC的结构分析 3.Model1时代 4.Model2时代 3. 回顾Ser ...

  3. SSM框架(spring+springmvc+mybatis)+Mysql实现的社区物业管理系统(功能包含分角色,报修管理、抄表管理、车位管理、房屋管理、业主管理、投诉管理、报修统计分析等)

    博客目录 SSM框架(spring+springmvc+mybatis)+Mysql实现的社区物业管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SSM框架(spring+springmv ...

  4. SSM框架——Spring+SpringMVC+Mybatis的搭建教程

    一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP. S ...

  5. [转载] 手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis

    参考链接: Java继承类的对象创建 本文发表于2016年6月,写于作者学生时期.文中使用到的技术和框架可能不是当下最佳实践,甚至很不"优雅".但对于刚接触JavaEE和Sprin ...

  6. 手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis

    http://blog.csdn.net/qq598535550/article/details/51703190 我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课 ...

  7. SSM框架:springmvc实现图片的上传与图片上传路径的设置

    说明:这个图片类文件上传的步骤是我经过验证的,在SSM框架下完成,搭建框架的部分不在这里说明. 第一步:添加两个项目需要的依赖.(pom.xml) <dependency><grou ...

  8. SSM框架知识点-SpringMVC流程图

    文章目录 SSM框架知识点 示例图 SpringMVC流程图 SSM框架知识点 示例图 SpringMVC流程图

  9. SSM框架Spring+SpringMVC+MyBatis——详细整合教程

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参 ...

  10. SSM框架 (一) SpringMVC

    1.SpringMVC 1.1 概述 Spring MVC 是 Spring 提供的一个基于 MVC 设计模式 的轻量级 Web 开发框架,本质上相当于 Servlet相当于对其的进一步封装 核心组件 ...

最新文章

  1. mysql创建非聚集索引_聚集索引和非聚集索引的区别
  2. Java - 排序大全
  3. 计算机组成asr实验,计算机组成与结构实验讲义.doc
  4. 前端应该关注的2021年UI设计趋势
  5. pandas 合并所有列_图解Python表格操作包Pandas
  6. ESXI开启SNMP服务
  7. python openstack vpc互通_深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(一)-简述与端口转发...
  8. 第十六章 复杂的抽像类结构
  9. layui图片上传按钮按着没反应_关于layui动态生成文件上传按钮后点击无效的解决办法...
  10. curl, apt-get, apt
  11. 直播卖房和VR看房,到底是噱头还是新趋势?
  12. Assets和Raw区别
  13. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.解决办法
  14. java 项目报错,查找错误的方法
  15. 联想外接键盘fn热键取消
  16. RiceQuant开源项目Rqalpha运行结果文件result.pkl读取
  17. 距离2022年研究生考试还有多少天?倒计时天数用便签设置
  18. 数据结构和算法的区别
  19. 加域电脑激活指纹识别
  20. 淘宝客做不下去怎么办?

热门文章

  1. Cesium:加载百度地图
  2. Openlaye:学习笔记之事件
  3. jsch mysql_java Jsch实现跳板机操作远程数据库
  4. 数据库截取字段 转换成int型函数
  5. 论文笔记_S2D.16-2016-3DV-利用全卷积残差网络进行深度预测
  6. 重磅!中国科协发布2020重大科学问题和工程技术难题
  7. 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。
  8. opencv鼠标回调函数实现ROI区域像素值相同化
  9. (box-shadow)阴影 -CSS3 注:外阴影
  10. 【Golang】如何不反序列化为前提的情况下,修改ProtoBuffer某个Tag的值