zoukankan      html  css  js  c++  java
  • SpringMVC简介

    1.概述

    SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow中

    M:Model,主要用于数据封装,业务逻辑处理

    V:View,视图,用于数据的展示

    C:Controller,控制器,主要用于分发,指派的工作

    SpringMVC已经成为目前最主流的MVC框架之一,并且随着Spring3.0的发布,全面超越Struts2,成为最优秀的MVC框架。它通过一套注解,让简单的Java类成为处理请求的控制器(web层---Servlet),而无须实现任何接口。同时它还支持RESTful变成风格。

    web层Servlet一般执行哪些动作?

    接受请求参数,封装实体,访问业务层,接受返回结果,指派页面(视图)

    web层的每个Servlet都去执行这些动作(共有行为),因此可以进行抽取,抽取的那一部分,一般情况下,就是web层的框架帮助完成的。

    特有行为,比如说,表单数据的校验,cookie的编写

    2.SpringMVC的开发步骤

    需求:客户端发起请求,服务器端接收请求,执行逻辑并进行视图跳转

    (1)导入SpringMVC包(导入SpringMVC相关坐标

    SpringMVC用Servlet去充当前端控制器的

    (2)配置Servlet(配置SpringMVC核心控制器DispatcherServlet

    配置时候要知道Tomcat请求过来的时候,每个请求都要去找共有行为的Servlet,再去分发特有行为的。

    (3)编写POJO(Controller)(创建Controller类和视图页面)

    内部负责调用业务层,指派视图(JSP)

    (4)将Controller使用注解配置到spring容器中(@Controller)(使用注解配置Controller类中业务方法的映射地址

    把普通的POJO通过bean标签的方式配置到spring容器中,或者通过注解的方式放到spring容器中

    (5)配置spring-mvc.xml文件(配置组件扫描)(配置SpringMVC核心文件spring-mvc.xml

    (6)执行访问测试(客户端发起请求测试

    下面按照上面的开发步骤实现一下

     

     第一步:在pom.xml中导入spring-mvc坐标

     第二步:配置SpringMVC核心控制器DispatcherServlet,在web.xml中

     在spring-mvc.xml中添加Controller组件扫描

     第三步:创建Controller类和视图页面UserController.java和success.jsp

    UserController.java

    package com.company.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class UserController {
        // 访问quick时,帮你映射到save()方法,执行下面的逻辑,最终返回,跳到success.jsp视图中
        @RequestMapping("/quick")
        public String save() {
            System.out.println("Controller save running...");
            return "success.jsp";
        }
    }
    

      success.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h1>success!!!!</h1>
    </body>
    </html>
    

      第四步:使用注解配置Controller类中业务方法的映射地址

     第五步:配置SpringMVC核心文件spring-mvc.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"
           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.xsd
    ">
    
        <!--Controller组件扫描-->
        <context:component-scan base-package="com.company.controller"/>
    </beans>

    第六步:客户端请求测试

    开启Tomcat服务器

     完整版的web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
      ~ Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
      -->
    
    <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_4_0.xsd"
             version="4.0">
        
        <!--配置springmvc的前端控制器-->
        <servlet>
            <servlet-name>DispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring-mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>DispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <!--全局初始化参数-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
    
        <!--配置监听器-->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
        <servlet>
            <servlet-name>UserServlet</servlet-name>
            <servlet-class>com.company.web.UserServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>UserServlet</servlet-name>
            <url-pattern>/userServlet</url-pattern>
        </servlet-mapping>
    </web-app>

    其他代码可以参看这篇博客:https://www.cnblogs.com/GumpYan/p/14206688.html

    完整版的pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             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>
    
        <groupId>org.example</groupId>
        <artifactId>spring_mvc</artifactId>
        <version>1.0-SNAPSHOT</version>
        <build>
            <finalName>simple-webapp</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.0</version>
                    <configuration>
                        <webXml>webappWEB-INFweb.xml</webXml>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
        <!--web工程的打包方式war-->
       <packaging>war</packaging>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.2.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>5.2.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.9.6</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>5.2.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.4</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.44</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>javax.servlet.jsp-api</artifactId>
                <version>2.2.1</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>5.2.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
        </dependencies>
    
    </project>

     从代码角度看整个流程

     

     配置缺省的 / <url-pattern>/</url-pattern>,缺省的每次访问都要过整个<servlet></servlet>,根据请求资源去解析,找对应的资源

    3.总结:springmvc流程图示

     

  • 相关阅读:
    iOS 关于字体根据不同屏幕尺寸等比适配的问题(zz)
    安卓开发:一种快速提取安卓app的UI图标资源的方法
    申请邓白氏编码的时候总是提示 Enter a valid Street Address 怎么办?
    利用日期、经纬度求日出日落时间 C语言程序代码(zz)
    JS导出Excel 代码笔记
    Bootstrap系列 -- 44. 分页导航
    Bootstrap系列 -- 43. 固定导航条
    Bootstrap系列 -- 42. 导航条中的按钮、文本和链接
    Bootstrap系列 -- 41. 带表单的导航条
    Bootstrap系列 -- 40. 导航条二级菜单
  • 原文地址:https://www.cnblogs.com/GumpYan/p/14210441.html
Copyright © 2011-2022 走看看