初学Spring MVC理解以及框架demo

1.SpringMVC 架构图

2.Spring MVC的运作流程

1、  用户首先发送一个请求到前端控制器Dispatcher

2、  DispatcherServlet收到请求调用HandlerMapping处理映射器(这个到时候会在springmvc-config.xml中配置)

3、  处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、  DispatcherServlet调用HandlerAdapter处理器适配器。

5、  HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

6、  Controller执行完成返回ModelAndView。

7、  HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

8、  DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

9、  ViewReslover解析后返回具体View。

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11、 DispatcherServlet响应用户。

组件:

1.前端控制器DispatcherServlet(不需要工程师开发),由框架提供
作用:接收请求,响应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

2.处理器映射器HandlerMapping(不需要工程师开发),由框架提供
作用:根据请求的url查找Handler
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

3.处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

4.处理器Handler(需要工程师开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。

5.视图解析器View resolver(不需要工程师开发),由框架提供
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由工程师根据业务需求开发具体的页面。

6.视图View(需要工程师开发jsp...)
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)


核心架构的具体流程步骤如下:

1.首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2.DispatcherServlet——>HandlerMapping, HandlerMapping 将会把请求映射为HandlerExecutionChain 对象(包含一个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3.DispatcherServlet——>HandlerAdapter,HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

4.HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView 对象(包含模型数据、逻辑视图名);

5.ModelAndView的逻辑视图名——> ViewResolver, ViewResolver 将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

6.View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

7返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

3.简单的Spring MVC 例子

1.新建一个项目SpringMVCdemo4,我建项目的习惯是跟老师学习的,这是我的项目清单

2.配置WEB-INF下面的web.xml:

<?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_2_5.xsd"

	id="WebApp_ID" version="2.5">

<!-- 配置DispatchcerServlet -->
<servlet>
	<servlet-name>springDispatcherServlet</servlet-name>	
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<!-- 配置Spring mvc下的配置文件的位置和名称 -->
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:springmvc.xml</param-value>		
	</init-param>	
	<load-on-startup>1</load-on-startup>
</servlet>
	<servlet-mapping>
		<servlet-name>springDispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>	
	</servlet-mapping>
</web-app>

注:①我是将springmvc.xml文件添加到src目录下面,所以配置上面的参数值的时候配置<param-value>classpath:springmvc.xml</param-value>  ,当然我们也可以不用新建,默认的配置文件格式为/WEB-INF/[servlet-name]-servlet.xml,一般我习惯将这个xml文件放在src下面,这样能方便些,web.xml中的<servlet-name>springDispatcherServlet</servlet-name>这个里面的值是不能随意改的,规定好的。

②servlet-mapping表示拦截的模式,这里是“/”,表示对于所有的请求都会拦截,包括静态资源html,js ,png。

3.接下来配置刚才放在src下面的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: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-4.0.xsd	
	http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
	<!-- 配置自动扫描的包 -->
	<context:component-scan base-package="pers.chao.handlers"></context:component-scan>	
	<!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->	
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">	
		<property name = "prefix" value="/WEB-INF/"></property>		
		<property name = "suffix" value = ".jsp"></property>	
	</bean>
</beans>

注:①上面xml中的http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd需要校验联网,需要联网

②最后一个bean标签是配置一个视图解析器,需要配合controller来解析

 

4.添加jar包

添加Spring-Framework框架相关的jar包

5.在WebRoot文件夹下面添加index.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">		
		<title>界面标题</title>	
	</head>
	<body>
		<a href="hello">hello world</a>
	</body>
</html>

 

注:当访问index.jsp时,页面会展示一个超链接,点击超链接后URL就会发生跳转。根据hello请求会请求到demo1中的hello方法上

6.在WEB-INF下面添加success.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8" isELIgnored="false"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

	<head>
	
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">		
		<title>成功界面</title>	
		</head>
	<body>
		<h4>恭喜您成功了</h4>
	</body>

</html>

7,创建demo1这个类(包名:pers.chao.handlerxia)

package pers.chao.handlers;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.ModelAndView;

@Controller
public class demo1 {
/**
* 1. 使用RequestMapping注解来映射请求的URL 
* 2. 返回值会通过视图解析器解析为实际的物理视图,
* 对于InternalResourceViewResolver视图解析器,会做如下解析 通过prefix+returnVal+suffix
* 这样的方式得到实际的物理视图,然后会转发操作 "/WEB-INF/success.jsp"
*/
	@RequestMapping("/hello")
	public String hello() {
		System.out.println("我返回的是字符串,根据字符串映射。。。。。。。。。。。。。。。。。");	
		return "success";
	}
}

注:1. 首先要在类的前面添加“Controller”注解,表示是spring的控制器,这里会写一个方法hello()

  2. hello方法上方有一个@RequestMapping, 是用于匹配请求的路径,比如这里匹配的请求路径就是“http://localhost:8080/SpringMVCdemo4/hello.action”,即当tomcat服务启动后,在浏览器输入这个url时,如果在这个方法打断点了,就会跳入该方法。

   3. 这个return的结果不是乱写的,这个返回的字符串就是与上面springmvc.xml中line15-18进行配合的,springmvc.xml中声明了prefix和suffix,而夹在这两者之间的就是这里返回的字符串,所以执行完这个方法后,我们可以得到这样的请求资源路径“/WEB-INF/views/success.jsp”,这个success.jsp是需要我们创建的。

最后在地址栏中输入url:http://localhost:8080/SpringMVCdemo4/index.jsp

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值