Spring MVC的基本概念及处理的流程

Spring是视图层提供的基于MVC设计理念的Web框架,是目前最主流的MVC框架之一。

Spring3.0后全面超越Struts2,Spring MVC通过一套MVC注解,让POJO(java bean)成为处理请求的控制器,而无需实现任何接口。

Spring MVC支持REST风格的URL请求,采用了松散耦合可插拔组件结构。

Spring MVC的特点有以下几点:

清晰的角色划分

强大而直接的配置方式

可适配、非入侵的Controller

可重用的业务代码

可定制的绑定(binding)和验证(validation)

可定制的handler mapping 和view resolution

灵活的model转换

可定制的本地化和主题(theme)解析

Spring MVC的处理流程:

Spring MVC的基本概念及处理的流程_第1张图片


1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
7. ViewResolver 结合Model和View,来渲染视图
8. 将渲染结果返回给客户端。

Spring MVC 的使用流程:
1、添加jar包:
Spring MVC的基本概念及处理的流程_第2张图片

2、在web.xml中配置dispatcherServlet


  	mvc
  	org.springframework.web.servlet.DispatcherServlet
  	
  		
  		contextConfigLocation
  		classpath:servlet-mvc.xml
  	
  	
  	1
  
  
  	mvc
  	/
  
3、在servlet-mvc.xml中添加Spring MVC的配置文件


    
    	
    
    
    
    

4、编写请求处理器:

package com.jredu.controller;

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

@Controller
@RequestMapping("/hello")  //通过这个路径可以定位到控制器
public class HelloController {
	
	@RequestMapping("/hello1.action")
	public String hello1(){
		return "hello"; //hello:/WEB-INF/pages下的jsp页面的名称
		//访问jsp页面的路径是:http://localhost:8080/SpringMVC/hello/hello1.action
	}
}

5、编写视图

Spring MVC的基本概念及处理的流程_第3张图片

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
    
    My JSP 'hello.jsp' starting page
    
	
	
	    
	
	
	

  
  
  
  
    hello.jsp页面
  


ANT风格:URL的匹配可以是模糊匹配

?:代表任意一个字符

/**
	 * ?:匹配任意一个字符
	 * @return
	 */
	@RequestMapping("/h?") 
	public String hello5(){
		return "hello";
		//访问路径:http://localhost:8080/SpringMVC/hello/h2
			  //http://localhost:8080/SpringMVC/hello/h!       
	}

*:代表任意多个字符(0,1,)

/**
	 * *:匹配任意多个字符
	 * @return
	 */
	@RequestMapping("/a*") 
	public String hello6(){
		return "hello";      
	}
**:匹配任意多层路径:
/**
	 * **:匹配任意多层路径
	 * @return
	 */
	@RequestMapping("/a/**/hello7.action") 
	public String hello7(){
		return "hello"; 
		//http://localhost:8080/SpringMVC/hello/a/hello7.action
		//http://localhost:8080/SpringMVC/hello/a/123/456/hello7.action
	}

在页面中加入静态资源,三种配置方式:

1、在web.xml中配置


  
  	default
  	*.png
   
2、在servlet-mvc.xml中配置


     
3、在servlet-mvc.xml中配置


	
这三种方式中,方式3最好,只需要配置1次就可以了


你可能感兴趣的:(Java)