SpringMVC入门

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

一、SpringMVC是什么

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架通过把ModelViewController分离将web层进行职责解耦把复杂的web应用分成逻辑清晰的几部分简化开发减少出错方便组内开发人员之间的配合。

此外Spring MVC 的注解驱动和对 REST 风格的支持也是它最具特色的功能。无论是在框架设计还是扩展性、灵活性等方面都全面超越了 Struts2 等 MVC 框架。并且由于 Spring MVC 本身就是 Spring 框架的一部分所以可以说与 Spring 框架是无缝集成性能方面具有先天的优越性对于开发者来说开发效率也高于其它的 Web 框架在企业中的应用越来越广泛成为主流的 MVC 框架。

二、SpringMVC工作流程

在这里插入图片描述

  1. 用户发来一个请求首先进入的是前端控制器DispatcherServlet
  2. 前端控制器DispacherServlet将用户发来的请求发送给处理器映射器HandlerMapping
  3. 处理器映射器根据前端控制器发来的用户的请求找到对应符合的控制器Handler,并且将其封装成处理器执行链返回给前端控制器。
  4. 处理器适配器接收到来自前端控制器的执行链后找到对应执行此执行链的处理器适配器HandlerAdapter来调用的具体的控制器就是说其对应的方法或者逻辑
  5. 处理器适配器 (HandlerAdaptoer) 会调用对应的具体的 Controller处理业务逻辑
  6. 控制器执行完成后会返回一个ModelAndView对象给处理器适配器
  7. 处理器适配器将返回来的ModelAndView对象返回给前端控制器(到这里所有的业务处理过程就要完了接下就是将结果以页面的的形式响应给用户)
  8. 前端控制器将返回回来的ModelAndView对象交给视图解析器ViewResolver视图解析器根据传过来的View对象解析成对应的页面对象
  9. ViewResolver 将封装好的将页面对象和Model对象返回给 DIspatcherServlet
  10. 前端控制器再将返回回来的对象交给视图View
  11. 视图根据传过来的Model对象再一次的对页面进行渲染将模型数据填充至视图中然后在返回给前端控制器。
  12. 前端控制器将完成的结果响应给浏览器然后浏览器在展现给用户。

三、SpringMVC核心组件

  • DispatcherServlet

DispatcherServlet是SpringMVC框架了里面的前端控制器

作用统一处理用户发来的请求并和响应相当于一个中间转换器减少了各个组件之间的调度减少的耦合性。

  • HandlerMapping

HandlerMapping是SpringMVC框架里面的处理器映射器

作用根据请求发来的url 和method找到对应的Handler(就是说在一个用到SpringMVC框架的项目中会有好多方法和逻辑这个组件的作用就是找到对应的方法和组件返回给前端控制器)

  • Handler

Handler处理器注意这个需由工程师自己开发。

作用在 DispatcherServlet 的控制下Handler对具体的用户请求进行处理。

  • HandlerAdapter

HandlerAdapter是SpringMVC框架提供的处理器适配器

作用根据映射器找到的处理器Handler信息按照特定的规则去执行相关的处理器 Handler。

  • ViewResolver

ViewResolver是SpringMVC框架提供的视图解析器

作用就是字如其名就是用来将处理的结果解析成视图来展现给用户。视图解析器根据逻辑视图名解析成物理视图名生成View视图对象最后对视图进行渲染响应给用户。

  • View

View是开发者自己提供的视图

作用根据model对象的要求来渲染页面然后前端控器在响应给用户。

四、入门案例

4.1 添加pom.xml依赖

<!-- jstl+standard -->
<jstl.version>1.2</jstl.version>
<standard.version>1.1.2</standard.version>
<!-- spring -->
<spring.version>5.0.2.RELEASE</spring.version>
...
<!-- spring mvc相关依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>${jstl.version}</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>${standard.version}</version>
</dependency>

4.2 创建spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<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"
       xmlns="http://www.springframework.org/schema/beans"
       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.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--1) 扫描com.zking.zf及子子孙孙包下的控制器(扫描范围过大耗时)-->
    <context:component-scan base-package="com.ycxw"/>
 
    <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <mvc:annotation-driven/>
 
    <!--3) 创建ViewResolver视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
 
    <!--4) 单独处理图片、样式、js等资源 -->
    <!-- <mvc:resources location="/css/" mapping="/css/**"/>
     <mvc:resources location="/js/" mapping="/js/**"/>
     <mvc:resources location="WEB-INF/images/" mapping="/images/**"/>-->
</beans>

1.扫描com.ycxw及其子包下的控制器使用context:component-scan标签实现。
2.注册了支持注解驱动的组件使用mvc:annotation-driven标签实现。
3.创建了一个视图解析器用于解析JSP视图使用标签实现。
4.配置了处理静态资源如CSS、JS和图片使用mvc:resources标签实现。

4.3 配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  <!-- Spring和web项目集成start -->
  <!-- spring上下文配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-context.xml</param-value>
  </context-param>
  <!-- 读取Spring上下文的监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- Spring和web项目集成end -->
 
  <!-- 中文乱码处理 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- Spring MVC servlet -->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--此参数可以不配置默认值为/WEB-INF/springmvc-servlet.xml-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <!--web.xml 3.0的新特性是否支持异步-->
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

配置步骤

  1. 配置Spring与Web项目集成
  2. 配置中文乱码过滤器
  3. 配置SpringMVC核心控制器DispatcherServlet

4.4 SpringMVC配置Web

package com.xqx.web;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 

@Controller
public class DemoController {
    @RequestMapping(value="/hello")
    public String hello(){
        System.out.println("调用了hello方法...");
        return null;
    }
}
  1. 该类使用了@Controller注解表示它是一个控制器组件。
  2. 在该控制器类中定义了一个处理请求的方法hello()它使用@RequestMapping注解来指定处理的URL路径为"/hello"。当客户端发送一个匹配该路径的请求时该方法会被调用。

4.5 jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SpringMVC</title>
</head>
<body>
HelloWorld
</body>
</html>

在这里插入图片描述

4.6 静态资源处理

所有文件都会被spring-mvc.xml配置文件进行拦截所以要添加配置让处理器扫描扫该资源

<mvc:resources location="/static/" mapping="/static/**"/>
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring