SpringMVC入门原理

本文详细介绍了SpringMVC的原理,包括其配置流程、核心组件如DispatcherServlet、HandlerMapping、HandlerAdapter和ViewResolver的工作原理。同时,通过一个入门案例展示了SpringMVC的配置与实现,包括导入jar包、配置核心控制器、处理器映射器和处理器控制器等步骤。此外,还深入讲解了注解开发、数据绑定、JSON支持、文件上传与下载、拦截器和SSM整合等内容,是学习SpringMVC的全面指南。
摘要由CSDN通过智能技术生成

1.     Springmvc原理

1.1. 什么是springmvc

SpringMVC是一个Spring框架内置的对MVC模式的实现,就spring的一个子模块

 

1.2. 什么是mvc

 Model - view-controller(模型-视图-控制器),实现页面与业务代码分离

 

 

1.3. mvc的作用

SpringMVC就是MVC这种思想一个实现.所以作用就是实现页面代码和后台代码的分离.

 

1.4. Springmvc的配置流程

 

1.5. Springmvc的体系结构

 

2.     入门案例

2.1. 导入jar包

 

2.2. 配置核心控制器

  <!-- 配置核心控制器

    servlet加载的时候会默认会去WEB-INFO下找spring的配置文件

    默认的文件名为:<servlet名字>-servlet.xml

  -->

  <servlet>

    <servlet-name>spring</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!-- 修改spring配置文件的路径 -->

   <init-param>

        <param-name>contextConfigLocation</param-name>

      <param-value>classpath:applicationContext-mvc.xml</param-value>

   </init-param>

     <!-- 配置tomcat启动时加载servlet-->

    <load-on-startup>1</load-on-startup>

  </servlet>

  <!-- 配置路径映射 -->

  <servlet-mapping>

      <servlet-name>spring</servlet-name>

      <!-- 映射的路径

        *.mvc  拦截 .mvc结尾的请求

        /      所有请求全部由springmvc解析 (resful风格)

        /*     如果配置了/* 返回jsp也由springmvc进行解析(不使用)

       -->

      <url-pattern>*.mvc</url-pattern>

  </servlet-mapping>

 

配置请求路径拦截的注意事项:

可以配/,此工程所有请求全部由springmvc解析

         可以配置*.mvc或者*.do,所有请求的url扩展名为*.mvc或者*.do由springmvc解析

         不可配置/* ,如果配置了/* 返回jsp也由springmvc进行解析了。

配置了

 <load-on-startup>1</load-on-startup>

  spring对象容器随项目启动

 

2.3. 配置处理器映射器和处理器控制器

 <!-- 配置处理器映射器 (HandlerMapping)

    BeanNameUrlHandlerMapping

     根据beanname属性去匹配对应的处理类 -->

  <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

 

  <!-- 配置处理器适配器(HandlerAdapter)   处理类是什么样的规则-->

  <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

 

 

 

2.4. 编写处理类

/**

     * ModelAndView 模型与视图

     */

    @Override

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        System.out.println("第一个springmvc的程序。。。。");

    /*  //请求转发

        request.setAttribute("username", "小明");

        request.getRequestDispatcher("/hellospringmvc.jsp").forward(request, response);*/

        ModelAndView modelAndView = new ModelAndView();

        //设置模型,等同于request.setAttribute

        modelAndView.addObject("username", "春哥");

        //设置响应的视图

        modelAndView.setViewName("hellospringmvc.jsp");

        returnmodelAndView;

    }

在配置文件中配置

<!-- spring管理TestController name为请求的路径 -->

  <beanid="testController"name="/hellospringmvc.mvc" class="com.ys.controller.TestController"></bean>

 

 

 

2.5. 编写测试代码

<%@ 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>springmvc测试</title>

</head>

<body>

  <a href="${pageContext.request.contextPath}/hellospringmvc.mvc">测试springmvc</a>

</body>

</html>

 

3.     Springmvc核心介绍

3.1. DispathcerServlet核心控制器

DispathcerServlet作为springmvc的中央调度器存在,DispatcherServlet创建时会默认从DispatcherServlet.properties文件加载springmvc所用的各各组件,如果在applicationContext.xml中配置了组件则以applicationContext.xml中配置的为准,DispatcherServlet的存在降低了springmvc各各组件之间的耦合度。

3.2. HandlerMapping处理器映射器

HandlerMapping 负责根据request请求找到对应的Handler处理器及Interceptor拦截器,

         将它们封装在HandlerExecutionChain对象中给前端控制器返回。         

3.2.1.   BeanNameUrlHandlerMapping

         BeanNameUrl处理器映射器,根据请求的url与spring容器中定义的bean的name进行匹配,从而从spring容器中找到bean实例

3.2.2.   SimpleUrlHandlerMapping

          simpleUrlHandlerMapping是BeanNameUrlHandlerMapping的增强版本,它可以将url和处理器bean的id进行统一映射配置。

3.2.3.   RequestMappingHandlerMapping

         注解式处理器映射器,对类中标记@ResquestMapping的方法进行映射,根据ResquestMapping定义的url匹配ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装url对应的方法Method

                    注解描述:

                            @RequestMapping:定义请求url到处理器功能方法的映射

3.3. HandlerAdapter处理器适配器

HandlerAdapter会根据适配器接口对后端控制器进行包装(适配),包装后即可对处理器进行执行,通过扩展处理器适配器可以执行多种类型的处理器,这里使用了适配器设计模式。

3.3.1.   SimpleControllerHandlerAdapter

SimpleControllerHandlerAdapter简单控制器处理器适配器,所有实现了org.springframework.web.servlet.mvc.Controller 接口的Bean通过此适配器进行适配、执行。

3.3.2.   HttpRequestHandlerAdapter

HttpRequestHandlerAdapter,http请求处理器适配器,所有实现了org.springframework.web.HttpRequestHandler 接口的Bean通过此适配器进行适配、执行。

3.3.3.   RequestMappingHandlerAdapter

                   注解式处理器适配器,对标记@ResquestMapping的方法进行适配。

 

3.4. ViewResolver视图解析器

         InternalResourceViewResolver:支持JSP视图解析viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar 包;prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为:前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为hello,则最终返回的jsp视图地址 “WEB-INF/jsp/hello.jsp”

<!-- 配置视图解析器 -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<!-- 响应的路径为前缀+viewName+后缀 -->

   <!-- 前缀 -->

   <property name="prefix" value="/"></property>

   <!-- 后缀 -->

   <property name="suffix" value=".jsp"></property>

</bean>

 

 

4.     注解开发springmvc

配置注解处理器映射器和处理器适配器

<!-- 配置包扫描 -->

<context:component-scan base-package="com.ys.controller"></context:component-scan>

 

<!-- 配置注解的处理器映射器 -->

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>cn.itcast.parent</groupId> <artifactId>itcast-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>cn.itcast</groupId> <artifactId>travel</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency> <!-- 连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <!-- Jackson Json处理工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值