SpringMVC(第一天 基础知识)第一课时

本文深入浅出地介绍了SpringMVC框架的基本概念及其工作原理,包括前端控制器、处理器映射器、处理器适配器和视图解析器等核心组件的作用与配置方法,并通过一个入门示例展示了如何搭建和运行一个简单的SpringMVC应用。
摘要由CSDN通过智能技术生成

主要内容:

什么是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的代码如下:

 

<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>
GoodsController类:

 

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>
 
<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>

是不是很简单的?就是这么easy!!!!!!

 

 

6.源码分析springmvc的执行过程(了解即可)

第一步:前端控制器(DispatcherServlet)接收请求,调用doDispatch

 

<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

 

第三步:前端控制器(DispatcherServlet)调用处理器适配器来执行相应的Controller,得到执行的结果ModelAndview

第四步:视图渲染,将model数据填充到request作用域。

 

7.入门程序的小结

通过入门程序理解springmvc前端控制器,处理器映射器,处理器适配器,视图解析器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值