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

SpringMVC简介

…SpringMVC也叫Spring web mvc。属于表现层的框架。
在这里插入图片描述

Sping MVC组件与流程

…Spring MVC的核心在于其流程,这是使用 Spring MVC 框架的基 础, Spring MVC是一个基于 Servlet 的技术, 它提供了核心控制器 DispatcherServlet和相关的组件, 并制定了松散的结构,以适合各种灵活的需要。
在这里插入图片描述…首先, 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。但可以这样子写,则可以更改位置

<init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:springmvc.xml</param-value>
</init-param>

在这里插入图片描述
②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就会去使用这些信息去找到对应控制器提供服务。
结果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值