SpringMVC-原理简述

SpringMVC的入门案例

配置核心控制器,一个Servlet

<?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"> 
<!-- 配置spring mvc的核心控制器 --> 
<servlet> 
    <servlet-name>SpringMVCDispatcherServlet</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>
     <!-- 配置servlet的对象的创建时间点:应用加载时创建。 取值只能是非0正整数,表示启动顺序 --> 
     <load-on-startup>1</load-on-startup> 
</servlet>
 <servlet-mapping>
     <servlet-name>SpringMVCDispatcherServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
</servlet-mapping>
</web-app>

 配置SpringMVC的配置文件,SpringMVC.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
<!-- 配置创建spring容器要扫描的包 --> 
<context:component-scan base-package="com.itheima"></context:component-scan> 
<!-- 配置视图解析器 --> 
<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/pages/"></property>
     <property name="suffix" value=".jsp"></property>
</bean> 
<mvc:annotation-driven></mvc:annotation-driven>
</beans>

 编写控制器并使用注解配置

@Controller
public class HelloController{
       @RequestMapping("/hello")
       public String hello(){
        System.out.println("输出hello");
        return "success";
    }

}

 测试一下,返回一个success页面,跳转到这个成功页面

入门案例的执行过程及原理分析

 案例的执行过程

案例的执行过程

1、tomcat启动后,加载web.xml文件,实例化和初始化Servlet()

2、加载SpringMVC.xml配置文件,创建spring容器,根据配置初始化容器中的对象

3、客户端发起请求,请求到达前端控制器、

4、前端控制器分给,处理器映射器,找到对应的Controller 和方法

5、返回给前端控制器,前端控制器再发个处理器适配器,把所有的Controller 和方法都适配上,并且执行某个方法,返回ModelAndView给前端控制器

6、前端控制器再请求视图解析器,返回View。

7、视图渲染将模型数据填充到response域

SpringMVC的请求响应流程

入门案例中涉及的组件

DispatherServlet:前端控制器,

用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

HanderMapping:适配器映射器,HandlerMapping负责根据用户请求找到Handler即处理器,SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

Handler:处理器,它就是我们开发中要编写的具体业务控制器。由DispatcherServlet把用户请求转发到Handler。由Handler对具体的用户请求进行处理。

HandlAdapter:处理器适配器,通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

View Resolver:视图解析器,View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

View:视图,SpringMVC框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。 一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户。

<mvc:annotation-driven>说明,在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。 使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter(处理适配器),可用在SpringMVC.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。

RequestMapping注解

源码: 
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Mapping 
public @interface RequestMapping { }

作用: 用于建立请求URL和处理请求方法之间的对应关系。

value:用于指定请求的URL。它和path属性的作用是一样的。

@RequestMapping("/findAccount")

method:用于指定请求的方式。

@RequestMapping(value="/saveAccount",method=RequestMethod.POST)

params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样 

@RequestMapping(value="/removeAccount",params= {"accountName","money>100"})

发布了311 篇原创文章 · 获赞 58 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/qq_30353203/article/details/103455866