Spring MVC 初识

前端控制器(DispatcherServlet)的工作流程:


前端控制器工作流程:用户通过http协议发送请求到前端控制器,前端控制器根据用户的请求到具体的controller处理数据,返回处理结果到前端控制器,前端控制器将数据分发给业务视图,由业务视图呈现最终的用户页面,返回给前端控制器,在呈现给用户
-----------------------------------------------------------------------------------------------

Spring  MVC基本概念:

1.DispatcherServlet:桥梁(核心)
2.Controller:MVC 中的C
3.MVC中的V 用户看到的东西
-------------------------------------------------
SpringMVC的静态概念:
1:.DispatcherServlet :分发到合适的controller来生产我们需要的model model通过DispatcherServlet来传递给我们的View
2.Controller: 就是MVC中的C 屌用业务逻辑生成model的地方
3.在SpringMVC中并没有一个Interface叫controller  但是有一个annotation 叫@Controller去识别controller
4.HandlerAdapter: 是DispatcherServlet中的一个类  DispatcherServlet实际调用的Controller其实是以handler(Handler是DispatcherServlet调用Controller的中间过渡对象,是Controller的一种表现形式)形式出现的  HandlerAdapter(适配器模式)就是把各种不同的Handler适配成DispatcherServlet可以使用的Handler
5.HandlerInterceptor:(拦截器) 该接口提供after postHandle preHandle 三个方法,调用controller前后使用
6.HandlerMapping:前端控制器与controller映射关系的类
7.HandlerExecutionChain: preHandle->Controller method->postHandle->afterCompletion的执行链
8.ModelAndView:model的具体表现
9.viewResolver:视图解析器,决定需要用哪个视图来进行视图的呈现
10.view:响应页面的呈现。
------------------------------------------------------

SpringMVC的动态概念:


1.用户发送请求request 
2.DispatcherServlet拦截request  就需要找到一个Controller 如何找?
3.DispatcherServlet就把功能代理给了HandlerMapping(web.xml中配置的init-param就是HandlerMapping配置方式之一)
4.HandlerMapping根据配置  通过annotation找到Controller也找到了HandlerInterceptor
形成了一个HandlerExcutionChain 作为一个Handler或者是HandlerAdapter返回给DispatcherServlet
5.DispatcherServlet调用这个Handler或者是HandlerAdapter(找到Controller,Controller目的:生成ModelAndView) 生成ModelAndView 并返回给DispatcherServlet
6.DispatcherServlet调用ViewResolver(视图解析器)方法 返回View对象给DispatcherServlet
7.DispatcherServlet调用ModelAndView作为模型数据传递给我们的View完成了呈现 返回给DispatcherServlet
8.DispatcherServlet再把视图响应给用户

---------------------------------------------

创建一个Spring MVC  需要做的:

1.DispatcherServlet,HandlerMaping 只需要配置
2.Handler/HandlerAdapter忽略掉
3.Controller需要自己写
4.HandlerInterceptor(Controller调用前后干点啥)是一个接口,需要就写不需要就不用实现
5.ModelAndView:只是一个类  也可以使用Map把需要的放进去就好了
6.ViewResolver和HandlerMapping差不多只需要知道使用那种类型就可以了
7.view:不需要管具体的呈现。只需要管是哪一个就好了


---------------------------------------
综上所述:需要自己写的就是Controller 其他的就是配置


------------------------------------------------

第一个Spring  MVC实例(eclipse 要是高版本的)
安装Maven 
创建一个Maven项目:
启动CMD cd到自己想要在那个文件夹下创建Maven项目输入
--》mvn archetype:generate -DgroupId=imooc-loki -DartifactId=spring-mvc-study -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeCatalog=internal
(加个参数 -DarchetypeCatalog=internal 
让它不要从远程服务器上取catalog:)
在安装maven的计算机用户下会有一个m2文件夹,把maven安装目录下的conf文件夹下的配置文件settings.xml复制一份到.m2文件下 (好处:可以在升级maven后不必再更改settings.xml文件)
在eclipse的 window-->preferences-->Maven-->Installations-->add 加入最新安装的Maven路径
             Maven-->User settings-->User settings  加入.m2文件夹下的settings.xml 而不是用户下的  

导入maven项目: import-->maven-->exisiting Maven Projetcs



点击项目右键  properties-->java Bulid Path-->Libraries  看那些包没有就创建

项目包结构:


1.配置POM.xml  加入项目所需要的依赖包 :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>imooc-loki</groupId>
  <artifactId>spring-mvc-study2</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>spring-mvc-study2 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
    <properties>
		<commons-lang.version>2.6</commons-lang.version>
		<slf4j.version>1.7.6</slf4j.version>
		<spring.version>4.1.3.RELEASE</spring.version>
        <jackson.version>2.5.4</jackson.version>
	</properties>


	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-framework-bom</artifactId>
				<version>${spring.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
		</dependency>

		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>${commons-lang.version}</version>
		</dependency>


		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
			<exclusions>
				<exclusion>
					<artifactId>slf4j-api</artifactId>
					<groupId>org.slf4j</groupId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
		</dependency>

		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
               <!-- JSON依赖包 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.version}</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.eclipse.jetty</groupId>
				<artifactId>jetty-maven-plugin</artifactId>
				<version>9.2.2.v20140723</version>
			</plugin>
		</plugins>
	</build>
	
</project>
2.配置web.xml  因为DispatcherServlet是一个Servlet:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
   <!-- DispatcherServlet, Spring MVC的核心 -->
  <servlet>
		<servlet-name>mvc-dispatcher</servlet-name>
		<servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- DispatcherServlet对应的上下文配置, 默认为/WEB-INF/$servlet-name$-servlet.xml
		 -->
		<init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml</param-value>
        </init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvc-dispatcher</servlet-name>
	    <!-- mvc-dispatcher拦截所有的请求-->
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
</web-app>
3.创建并配置mvc-dispatcher-servlet.xml(位置在
    <param-value>/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml</param-value>


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        
        <!-- 本配置文件是工名为mvc-dispatcher的DispatcherServlet使用, 提供其相关的Spring MVC配置 -->

	<!-- 启用Spring基于annotation的DI, 使用户可以在Spring MVC中使用Spring的强大功能。 激活 @Required 
		@Autowired,JSR 250's @PostConstruct, @PreDestroy and @Resource 等标注 -->
	<context:annotation-config />
	
	<!-- DispatcherServlet上下文, 只管理@Controller类型的bean, 忽略其他型的bean, 如@Service -->
	<context:component-scan base-package="com.imooc.mvcdemo">
		<context:include-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
	</context:component-scan>

	<!-- HandlerMapping, 无需配置, Spring MVC可以默认启动。 DefaultAnnotationHandlerMapping 
		annotation-driven HandlerMapping -->

	<!-- 扩充了注解驱动,可以将请求参数绑定到控制器参数 -->
	<mvc:annotation-driven />

	<!-- 静态资源处理, css, js, imgs  不加这个就访问不到静态资源-->
	<mvc:resources mapping="/resources/**" location="/resources/" />
	
		<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsps/" />
		<property name="suffix" value=".jsp" />
	</bean>
	</beans>

4.写Controller:

package com.imooc.mvcdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/hello2")
public class HelloSpring {
   
	@RequestMapping("/xixi")
	public String hellomvc(){
		//组成了一个请求URL-->http://localhost:8080/hello2/xixi
		return "home";
	}
}

5:编写home.jsp  (随便写点啥)

6.在CMD中 进入创建的项目中 输入如下命令(第一次会下载各种资源


如果出现gbk字符不匹配的问题就在后面加 mvn jetty:run -Dfile.encoding=UTF-8

7:在URL处输入--》

http://localhost:8080/hello2/xixi

结果截图:


第一个Spring MVC工作流程:
用户发送 http://localhost:8080/hello2/xixi-->web.xml文件读取DispatcherServlet对应的上下文配置-->mvc-dispatcher-servlet.xml-->解析annotation类型的controller-->controller返回一个home字符串-->ViewResolver
用前缀和home和后缀 组成一个响应路径给DispatcherServlet (但是URL路径却没有变)

类级别的@RequestMapping("/hello2")和方法级别的@RequestMapping("/xixi")组成了请求路径

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值