主要内容:
什么是SpringMVC?
SpringMVC的框架原理(掌握)
前端控制器,处理器映射器,处理器适配器,视图解析器
SpringMVC入门程序(如果怕麻烦者,可移步百度网盘)
非注解的处理器映射器,处理器设配器
注解的处理器映射器,处理器配置器(掌握)
常见注解类的学习
参数绑定(简单类型,pojo,集合类型(明天讲))
自定义参数绑定(掌握)
SpringMVC和Struts的区别
SpringMVC和Mybatis整合(掌握)
1.什么是SpringMVC?
SpringMVC是Spring的一部分, 是一个基于mvc的web框架。
mvc是一种设计模式,就是从优秀的项目中抽取设计方法,提炼出模式,方便以后更快开发。
mvc在项目中的应用流程:
用户发送request请求到Controller层,然后Controller层把数据传递给Model层(包括service,dao)处理,然后Model层把处理结果返回给Controller层,而Controller层将数据渲染到View层,再返回给用户。
2.SpringMVC的框架
用户发送request请求到前端控制器DispatcherServlet(接收用户请求),而真正的URL是通过处理器映射器来找到相应的Controller,是有处理器设配器来执行相应的Controller,返回ModelAndView(模型和视图的结合体),进而前端控制器接收到了ModelAndView,但是他要通过视图解析器来返回真正的视图,进而视图渲染给用户。
框架图:
详细步骤:
第一步,发起请求到前端控制器(DispatcherServlet)。
第二步,前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)查找相应的Handler,即Controller。
可以根据xml配置,注解查找。
第三步,处理器映射器(HandlerMapping)向前端控制器返回Controller。
第四步,前端控制器(DispatcherServlet)调用处理器适配器去执行Controller。
第五步,处理器适配器去执行Controller。
第六步,Controller执行完成给处理器适配器返回ModelAndView。
第七步,处理器适配器向前端控制器返回ModelAndView (是SpringMVC框架的一个底层对象,包括Model和View)。
第八步,前端控制器请求视图解析器进行视图解析,根据逻辑视图名解析成真正的视图(jsp)。
第九步,视图解析器向前端控制器返回view。
第十步,前端 控制器进行视图渲染,也就是将数据填充到request域里面。
以上重要的组件:
前端控制器(DispatcherServlet):接收请求,响应结果,相当于一个转发器。这个不需要我们开发,框架自带的。
处理器映射器:根据请求的url查找Controller,通过xml的配置和注解的方式。
处理器适配器:执行Controller,返回ModelAndView。
视图解析器:根据逻辑视图解析真正的视图,比如JSP,Excel,PDF。
3.SpringMVC入门程序
环境配置:
在web.xml里面配置前端控制器(DispatcherServlet):
在springmvc.xml里面配置处理器映射器:
在springmvc.xml里面配置处理器适配器:
在springmvc.xml里面配置视图解析器:
编写Controller,实现Controller接口
即springmvc.xml的代码如下:
GoodsController类:<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 配置Controller --> <bean name="/queryGoods.action" class="com.neusoft.controller.GoodsController"></bean> <!-- 处理器映射器,将bean的name作为URL查找,需要在配置Controller时指定name(即URL) --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <!-- 处理器适配器 , 所有的处理器,适配器都根据HandlerAdapter规则--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!-- 视图解析器 ,默认为jstl,所以下面要有jstl的架包--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" /> </beans>
goodslist.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'goodslist.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <table> <tr> <td> 名称 </td> <td> 价格 </td> <td> 详情 </td> </tr> <c:forEach items="${goodslist}" var="g"> <tr> <td> ${g.name} </td> <td> ${g.price} </td> <td> ${g.details} </td> </tr> </c:forEach> </table> </body> </html>
此时,springmvc的入门程序已经搭建完成,即可部署在Tomcat上运行。
注意注意:在这个地方穿插一个知识点, 热部署就是只改方法,可以不重新启动Tomcat,面试的第一家公司曾经问到这个知识点。
运行结果图如下:
存在的问题:
以前我们一个类里面可以有很多方法,但是现在我们一个类里面只有一个方法,早期springmvc的确是这么做的,但是之后springmvc就提倡注解开发。
4.非注解的处理器映射器,处理器适配器
刚才上面的映射器和处理器就是非注解的。
5.注解的处理器映射器,处理器适配器
此处的DispatcherServlet.properties里面就是相应的配置文件,包括注解开发需要的类。
bling,bling,众望所归的注解开发来啦,相信看到这里的一定是勇士!!!!!!!!
主要的区别就是springmvc.xml和Controller类:
<span style="color:#000000"><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 注解开发 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 进行组件扫描,Controller,service --> <context:component-scan base-package="com.neusoft.controller"></context:component-scan> </beans></span>
是不是很简单的?就是这么easy!!!!!!<span style="color:#000000">package com.neusoft.controller; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.neusoft.vo.Goods; //使用Controller标识他是一个控制器 <span style="color:#ff0000">@Controller</span> public class GoodsControllerAnnotation { //使用RequestMapping来实现方法与URL进行映射,一般建议写为一样 <span style="color:#ff0000">@RequestMapping("/querygoodslist.action")</span> public ModelAndView querygoodslist() throws Exception { // 调用service层的方法,此处使用模拟数据 List<Goods> goodslist = new ArrayList<Goods>(); Goods goods1 = new Goods("联想笔记本", 123.12, "ThinkPad T430联想笔记本电脑!"); Goods goods2 = new Goods("苹果手机", 100.12, "iPhone6苹果手机!"); goodslist.add(goods1); goodslist.add(goods2); ModelAndView modelandview = new ModelAndView(); modelandview.addObject("goodslist", goodslist); modelandview.setViewName("/WEB-INF/jsp/goods/goodslist.jsp"); return modelandview; } }</span>
6.源码分析springmvc的执行过程(了解即可)
第一步:前端控制器(DispatcherServlet)接收请求,调用doDispatch
第二步:前端控制 器(DispatcherServlet)调用处理器映射器去查找相应的Controller<span style="color:#000000">protected void doDispatch(HttpServletRequest request,HttpServletResponse response) throw Expections{ HttpServletRequest processedRequest=request; HandlerExecutionChain mappedHandler=null; int interceptorIndex=-1; }</span>
第三步:前端控制器(DispatcherServlet)调用处理器适配器来执行相应的Controller,得到执行的结果ModelAndview
第四步:视图渲染,将model数据填充到request作用域。
7.入门程序的小结
通过入门程序理解springmvc前端控制器,处理器映射器,处理器适配器,视图解析器。