SpringMVC基础+SSM整合

一、简介SpringMVC

1.1 MVC

  • Model(模型):模型包含业务模型和数据模型,数据模型⽤于封装数据,业务模型⽤于处理业务。
  • View(视图): 通常指的就是我们的 jsp 或者 html。作⽤⼀般就是展示数据的。通常视图是依据模型数据创建的。
  • Controller(控制器): 是应⽤程序中处理⽤户交互的部分。作⽤⼀般就是处理程序逻辑的。
  • MVC提倡:每⼀层只编写⾃⼰的东⻄,不编写任何其他的代码;分层是为了解耦,解耦是为了维
    护⽅便和分⼯协作。
    在这里插入图片描述

1.2 SpringMVC

  • 它通过⼀套注解,让⼀个简单的 Java 类成为处理请求的控制器,⽽⽆须实现任何接⼝。同时它还⽀持RESTful 编程⻛格的请求。
  • 总之:Spring MVC和Struts2⼀样,都是 为了解决表现层问题 的web框架,它们都是基于 MVC 设计模式的。⽽这些表现层框架的主要职责就是处理前端HTTP请求。
  • Spring MVC 本质可以认为是对servlet的封装,简化了我们serlvet的开发
  • 作⽤:1)接收请求 2)返回响应,跳转⻚⾯
    在这里插入图片描述

1.3 SpringMVC ⼯作流程

开发过程

  1. 配置DispatcherServlet前端控制器
  2. 开发处理具体业务逻辑的Handler(@Controller、@RequestMapping)
  3. xml配置⽂件配置controller扫描,配置springmvc三⼤件(视图解析器、处理器映射器、处理器适配器)
  4. 将xml⽂件路径告诉springmvc(DispatcherServlet)

1.4 Spring MVC 请求处理流程

在这里插入图片描述
架构流程

  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响应用户。

1.5 Spring MVC 九⼤组件

  • HandlerMapping(处理器映射器)

HandlerMapping 是⽤来查找 Handler的,也就是处理器,具体的表现形式可以是类,也可以是⽅法。⽐如,标注了@RequestMapping的每个⽅法都可以看成是⼀个Handler。Handler负责具体实际的请求处理,在请求到达后,HandlerMapping
的作⽤便是找到请求相应的处理器Handler 和 Interceptor.

  • HandlerAdapter(处理器适配器)

HandlerAdapter 是⼀个适配器。因为 Spring MVC 中 Handler可以是任意形式的,只要能处理请求即可。但是把请求交给 Servlet 的时候,由于 Servlet的⽅法结构都是doService(HttpServletRequestreq,HttpServletResponseresp)形式的,要让固定的 Servlet 处理⽅法调⽤ Handler 来进⾏处理,便是HandlerAdapter 的职责。

  • HandlerExceptionResolver

HandlerExceptionResolver ⽤于处理 Handler 产⽣的异常情况。它的作⽤是根据异常设置
ModelAndView,之后交给渲染⽅法进⾏渲染,渲染⽅法会将 ModelAndView 渲染成⻚⾯。

  • ViewResolver

ViewResolver即视图解析器,⽤于将String类型的视图名和Locale解析为View类型的视图,只有⼀个resolveViewName()⽅法。从⽅法的定义可以看出,Controller层返回的String类型视图名 viewName最终会在这⾥被解析成为View。View是⽤来渲染⻚⾯的,也就是说,它会将程序返回的参数和数据填⼊模板中,⽣成html⽂件。ViewResolver 在这个过程主要完成两件事情: ViewResolver找到渲染所⽤的模板(第⼀件⼤事)和所⽤的技术(第⼆件⼤事,其实也就是找到 视图的类型,如JSP)并填⼊参数。默认情况下,SpringMVC会⾃动为我们配置⼀个InternalResourceViewResolver,是针对 JSP 类型视图的。

  • RequestToViewNameTranslator
  • LocaleResolver
  • ThemeResolver
  • MultipartResolver

MultipartResolver ⽤于上传请求,通过将普通的请求包装成 MultipartHttpServletRequest 来实现。MultipartHttpServletRequest 可以通过 getFile() ⽅法 直接获得⽂件。如果上传多个⽂件,还 可以调⽤getFileMap()⽅法得到Map<FileName,File>这样的结构,MultipartResolver 的作⽤就是封装普通的请求,使其拥有⽂件上传的功能。

  • FlashMapManager

FlashMap ⽤于重定向时的参数传递,⽐如在处理⽤户订单时候,为了避免重复提交,可以处理完post请求之后重定向到⼀个get请求,这个get请求可以⽤来显示订单详情之类的信息。

二、 Spring应用

2.1 请求参数绑定

  • 请求参数绑定:说⽩了SpringMVC如何接收请求参数
  • 原⽣servlet接收⼀个整型参数:
1)String ageStr = request.getParameter("age");
2) Integer age = Integer.parseInt(ageStr);
  • SpringMVC框架对Servlet的封装,简化了servlet的很多操作。SpringMVC在接收整型参数的时候,直接在Handler⽅法中声明形参即可
@RequestMapping("xxx")
public String handle(Integer age) {
System.out.println(age);
}
参数绑定:取出参数值绑定到handler⽅法的形参上
默认⽀持 Servlet API 作为⽅法参数
当需要使⽤HttpServletRequest、HttpServletResponse、HttpSession等原⽣servlet对象时,直接在handler⽅法中形参声明使⽤即可。
  • 接收简单数据类型参数,直接在handler方法的形参中声明即可,框架会取出参数值然后绑定到对应参数上。如果形参名和参数名不一致,SpringMVC 使用@RequestParam注解接收简单数据类型参数
  • 接收pojo类型参数,直接形参声明即可,类型就是Pojo的类型,形参名无所谓,但是要求传递的参数名必须和Pojo的属性名保持一致
  • 绑定日期类型参数,如url:/demo/handle06?birthday=2019-10-08,需要定义一个SpringMVC的类型转换器 是一个接口,扩展实现接口即可,注册你的实现(在springmvc.xml中注册)
public class DateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String source) {
        // 完成字符串向日期的转换
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Date parse = simpleDateFormat.parse(source);
            return parse;
        } catch (ParseException e) {
            SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy/MM/dd");
            e.printStackTrace();
        }

        return null;
    }
}

2.2 Restful ⻛格请求⽀持

  • Restful 是⼀种 web 软件架构⻛格,它不是标准也不是协议,它倡导的是⼀个资源定位及资源操作的⻛
    格。
  • REST(英⽂:Representational State Transfer,简称 REST)描述了⼀个架构样式的⽹络系统, REST 都倾向于⽤更加简单轻量的⽅法设计和实现。值得注意的是 REST 并没有⼀个明确的标准,⽽更像是⼀种设计的⻛格。
    它本身并没有什么实⽤性,其核⼼价值在于如何设计出符合 REST ⻛格的⽹络接⼝。
  • Restful 的优点
    它结构清晰、符合标准、易于理解、扩展⽅便,所以正得到越来越多⽹站的采⽤。
  • GET 、POST 、PUT 、DELETE 。它们分别对应四种基本操作:GET ⽤来获取资源,POST ⽤来新建资源,PUT ⽤来更新资源,DELETE ⽤来删除资源。

2.3 Ajax Json交互

  • 交互:两个⽅向
  1. 前端到后台:前端ajax发送json格式字符串,后台直接接收为pojo参数,使⽤注解@RequstBody
  2. 后台到前端:后台直接返回pojo对象,前端直接接收为json对象或者字符串,使⽤注解
  • @ResponseBody注解

@ResponseBody注解的作⽤是将controller的⽅法返回的对象通过适当的转换器转换为指定的格式之后,写⼊到response对象的body区,通常⽤来返回JSON数据或者是XML数据。
注意:在使⽤此注解之后不会再⾛视图处理器,⽽是直接将数据写⼊到输⼊流中,他的效果等同于通过response对象输出指定格式的数据。

三,SSM整合

  • SSM = Spring + SpringMVC + Mybatis = (Spring + Mybatis)+ SpringMVC
  • 过程:

先整合 Spring + Mybatis
然后再整合 SpringMVC

3.1 Mybatis整合Spring

  • 整合⽬标
  1. 数据库连接池以及事务管理都交给Spring容器来完成
  2. SqlSessionFactory对象应该放到Spring容器中作为单例对象管理
  3. Mapper动态代理对象交给Spring管理,我们从Spring容器中直接获得Mapper的代理对象
  1. web.xml文件
  <context-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
  		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

<!-- 配置前端控制器(DispatcherSerlvet) -->
  <servlet>
  		<servlet-name> SpringmvcMyBatis</servlet-name>
  		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  		<init-param>
  			<!--指定springmvc配置文件的加载位置-->
  			<param-name>contextConfigLocation</param-name>
  			<param-value>classpath:springmvc.xml</param-value>
  		</init-param>
  		<load-on-startup>1</load-on-startup><!-- load-on-startup:表示servlet随服务启动; -->
 	 </servlet>
  
    <!-- 配置<url-pattern></url-pattern>  Servlet拦截方式,拦截用户请求 -->
  <servlet-mapping>
    	<servlet-name> SpringmvcMyBatis</servlet-name>
  	     <url-pattern>*.action</url-pattern>
  </servlet-mapping>
  <!-- 通过上面url-pattern的配置,知道拦截的规则,以action结尾的请求将被Spring MVC的DispatcherServlet截获。 -->
  1. Spring配置(applicationContext.xml)
    jdbc 
	连接池
	sqlsession工程
	开启扫描的方式,自动去映射mapper包
	注意整合Spring,面向接口,使用Mapper动态代理开发dao层需要:
    1. java\com.lagou.edu.mapper\AccountMapper.java  接口
    2. 还要有一个:和接口编译之后放在同一目录并且名称相同的xml文件(resources\com.lagou.edu.mapper\AccountMapper.xml)
  1. SpringMVC配置文件(springmvc.xml)
加上注解扫描
				<context:component-scan base-package="cn.tz.xz"></context:component-scan>
			启动注解驱动
				<mvc:annotation-driven></mvc:annotation-driven>
			配置视图解析器前缀路径和后缀路径
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		            <property name="prefix" value="/WEB-INF/jsp/"/>
		            <property name="suffix" value=".jsp"/>
	             </bean>

3.2 整合SpringMVC

  • 整合思路
    把SpringMVC的⼊⻔案例整合进来即可(在已有⼯程基础之上开发⼀个SpringMVC⼊⻔案例)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值