海创软件组-20200517-SpringMVC(一)

SpringMVC简介

…SpringMVC也叫Spring web mvc。属于表现层的框架。
海创软件组-20200517-SpringMVC(一)_第1张图片

Sping MVC组件与流程

…Spring MVC的核心在于其流程,这是使用 Spring MVC 框架的基 础, Spring MVC是一个基于 Servlet 的技术, 它提供了核心控制器 DispatcherServlet和相关的组件, 并制定了松散的结构,以适合各种灵活的需要。
海创软件组-20200517-SpringMVC(一)_第2张图片…首先, Spring MVC 框架是围绕着 DispatcherServlet 而工作的所以这个类是其最为重要的类。从它的名字来看,它是一个Servlet ,那么根据 Java EE 基础的学习 ,我们知道它可以拦截 HTTP 发送过来的请求,在 Serviet 初始化(调用 init 方法〉时, SpringMVC 会根据配置,获取配置信息,从而得到统一资源标识符和处理器(Handler )之间的映射关系 (Handler Mapping ),为了更加灵活和增强功能, Spring MVC 还会给处理器加入拦截器,所以还可以在处理器执行前后加入自己的代码 这样就构成了一个处理器的执行链(HandlerExecutionChain ),并且根据上下文初始化视图解析器等内容,当处理器返回的时候就可以通过视图解析器定位视图,然后将数据模型渲染到视图中,用来响应用户的请求了。
…当一个请求到来时, DispatcherServlet 首先通过请求和事先解析好的 HandlerMapping配置,找到对应的处理器( Handler), 这样就准备开始运行处理器和拦截器组成的执行链,而运行处理器需要有一个对应的环境,这样它就有了一个处理器的适配器(HandlerAdapter ),通过这个适配器就能运行对应的处理器及其拦截器,这里的处理器包含了控制器的内容和其他增强的功能,在处理器返回模型和视图给 DispacherServlet 后,DispacherServlet 就会把对应的视图信息传递给视图解析器(ViewResolver )。注意,这一步取决于是否使用逻辑视图,如果是逻辑视图,那么视图解析器就会解析它,然后把模型渲染到视图中去,最后响应用户的请求:如果不是逻辑视图,则不会进行处理,而是直接通过视图渲染数据模型。这就是一个SpringMVC 完整的流程,它是一个松散的结构,所以可以满足各类请求的需要,为此它也实现了大部分的请求所需的类库,拥有较为丰富的类库供我们使用,所以流程中的大部分组件并不需要我们去实现。

web.xml配置Spring MVC
<!--web.xml配置Spring MVC--!><?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
	id="WebApp_ID" version="3.0">
  <display-name>01-primary</display-name>
  
<!--   注册中央调度器 -->
	  <servlet>
	  	<servlet-name>springmvc</servlet-name>
	  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>	  	
	<!--   	指定springmvc中的配置文件的位置和名称 -->
	  	<init-param>
	  		<param-name>contextConfigLocation</param-name>
	  		<param-value>classpath:springmvc.xml</param-value>
	  	</init-param>
	<!--   在tomcat服务器启动时就创建 -->
	  <load-on-startup>1</load-on-startup>
	  </servlet>
	  <servlet-mapping>
	  	<servlet-name>springmvc</servlet-name>
	  	<url-pattern>*.do</url-pattern>
	  </servlet-mapping>
	  
	  <welcome-file-list>
	    <welcome-file>index.jsp</welcome-file>
	  </welcome-file-list>
</web-app>

这个文件的配置内容:
①系统变量 contextConfigLocation 的配置,它会告诉 SpringMVC和Spring IoC 的配置文件在哪里,这样 Spring 就会找到这些配置文件去加载它们。如果是多个配置文件,可以使用逗号将它们分隔开来,并且它还能支持正则式匹配,进行模糊匹配,这样就更加灵活了,其默认值为/WEB-INF applicationContext.xml。但可以这样子写,则可以更改位置


 contextConfigLocation
 classpath:springmvc.xml

海创软件组-20200517-SpringMVC(一)_第3张图片
②ContextLoaderListener 实现了接口 ServletContextListener ,通过 Java Web 容器的学习,我们知道 ServletContextListener 的作用是可以在整个 Web工程前后加入自定义代码,所以可以在 Web 工程初始化之前,它先完成对 Spring IoC 容器的初始化,也可以在 Web 工程关闭之时完成 Spring IoC 容器的资源进行释放。
③配置 DispatcherServlet 首先是配置了 servlet-name dispatcher ,这就 着需要一个/WEB-INF /dispatcher-serv let. xml 文件(注意 servlet-name 和文件名的对应关系)与之对应,并且我们配置了在服务器启动期间就初始化它。
④配置 DispatcherServlet 拦截以后缀“ do” 结束 请求,这样所有以后后缀“do”结尾的请求都会被它拦截。

springmvc.xml文件的配置
<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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/tx
       http://www.springframework.org/schema/tx/spring-txc.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

       <!-- 注册mvc注解驱动 -->
       <mvc:annotation-driven  />
   <!--定义扫描装载的包,用它来扫描对应的包,用以加载对应的控制器和其他的一些组件-->
   <context:component-scan base-package="com.springmvc.handlers"></context:component-scan>
       
</beans>
简单的controller
package com.springmvc.handlers;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

@Controller//表示当前类是一个控制器
public class MyController  {

	@RequestMapping("/my.do")
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		ModelAndView mv=new ModelAndView();
		mv.addObject("message", "Hello SpeingMVC World!");
		mv.setViewName("/WEB-INF/jsp/welcome.jsp");
		return mv;
	}

}

…​首先注解@Controller 是一个控制器。 Spring MVC 扫描的时候就会把它作为控制器加载进来。然后 注解@RequestMapping 指定了对应的请求的URL, Spring MVC在初始化的时候就会将这些信息解解析,存放起来。于是便有了HandlerMapping 。当发生请求时, Spring MVC就会去使用这些信息去找到对应控制器提供服务。
结果:
海创软件组-20200517-SpringMVC(一)_第4张图片

你可能感兴趣的:(海创软件组)