Spring MVC 起步

2023-11-12

一.MVC

这里写图片描述

首先http的请求到达前端控制器,前端知道具体的请求,将代理给到控制器,控制器了解具体的业务细节,因此调用业务逻辑,生成业务数据,并将业务数据返回给前端控制器。然后前端控制器将数据分发给我们的业务视图。由业务视图来呈现业务页面返还给前端控制器,再由前端控制器返回到浏览器端。

MVC的核心思想是业务数据抽取同业务数据呈现相分离
MVC是一种架构模式:程序分层,分工合作,既相互独立,又协同工作。

二.Spring MVC的静态概念

DispatcherServlet是前端控制器

这里写图片描述

HandlerAdapter相当于controller,DispatcherServelet调用各种HandlerAdapter来实现任务分发给相关的业务逻辑

这里写图片描述

HandlerInterceptor是一个接口,可以用来在Handler调用之前,之后,以及view呈现后可以做很多事情

HandlerMapping是负责确定DispatcherServelet与controller之间映射的类,告诉DispatcherServelet,在请求到来后,由哪个controller来响应这个请求

HandlerExecutionChain

这里写图片描述

ModelAndView ViewResolver View

这里写图片描述

三.配置maven环境

1.myEclipse新建项目,选择import导入

这里写图片描述

示例代码git地址

2.pom.xml文件配置

<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>imooc-arthur</groupId>
    <artifactId>spring-mvc-study</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <properties>
        <commons-lang.version>2.6</commons-lang.version>
        <slf4j.version>1.7.6</slf4j.version>
        <spring.version>4.1.3.RELEASE</spring.version>
        <jackson.version>2.5.4</jackson.version>
    </properties>


   <!--   依赖管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>${spring.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>${commons-lang.version}</version>
        </dependency>


        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.2.2.v20140723</version>
            </plugin>
        </plugins>
    </build>

</project>

web.xml文件代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <display-name>Spring MVC Study</display-name>
  <!-- Spring应用上下文, 理解层次化的ApplicationContext -->
  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/configs/spring/applicationContext*.xml</param-value>
  </context-param>

  <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
  </listener>

  <!-- DispatcherServlet, Spring MVC的核心 -->
  <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- DispatcherServlet对应的上下文配置, 默认为/WEB-INF/$servlet-name$-servlet.xml
         -->
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <!-- mvc-dispatcher拦截所有的请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

因为我们配置了pom.xml文件,所以对于创建相应的文件目录
这里写图片描述

接下里创建配置文件
这里写图片描述

这里写图片描述

mvc-dispatcher-servlet.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"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    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
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 本配置文件是工名为mvc-dispatcher的DispatcherServlet使用, 提供其相关的Spring MVC配置 -->

    <!-- 启用Spring基于annotation的DI, 使用户可以在Spring MVC中使用Spring的强大功能。 激活 @Required 
        @Autowired,JSR 250's @PostConstruct, @PreDestroy and @Resource 等标注 -->
    <context:annotation-config />

    <!-- DispatcherServlet上下文, 只管理@Controller类型的bean, 忽略其他型的bean, 如@Service -->
    <context:component-scan base-package="com.imooc.mvcdemo">
        <context:include-filter type="annotation"
            expression="org.springframework.stereotype.Controller" />
    </context:component-scan>

    <!-- HandlerMapping, 无需配置, Spring MVC可以默认启动。 DefaultAnnotationHandlerMapping 
        annotation-driven HandlerMapping -->

    <!-- 扩充了注解驱动,可以将请求参数绑定到控制器参数 -->
    <mvc:annotation-driven />

    <!-- 静态资源处理, css, js, imgs -->
    <mvc:resources mapping="/resources/**" location="/resources/" />


    <!-- 配置ViewResolver。 可以用多个ViewResolver。 使用order属性排序。 InternalResourceViewResolver放在最后。 -->
    <bean
        class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="mediaTypes">
            <map>
                <entry key="json" value="application/json" />
                <entry key="xml" value="application/xml" />
                <entry key="htm" value="text/html" />
            </map>
        </property>

        <property name="defaultViews">
            <list>
                <!-- JSON View -->
                <bean
                    class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                </bean>
            </list>
        </property>
        <property name="ignoreAcceptHeader" value="true" />
    </bean>

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsps/" />
        <property name="suffix" value=".jsp" />
    </bean>


    <!--200*1024*1024即200M resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="209715200" />
        <property name="defaultEncoding" value="UTF-8" />
        <property name="resolveLazily" value="true" />
    </bean>

</beans>

在java目录下创建类

这里写图片描述

HelloMvcController类代码示例:

package com.imooc.mvcdemo.controller;

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

@Controller

@RequestMapping("/hello")
public class HelloMvcController {
    @RequestMapping("/mvc")
    public String helloMvc() {
        return "home";
    }

}

这里写图片描述

创建home.jsp文件。

这里写图片描述

这里写图片描述

这里写图片描述

home.jsp文件

<%@ 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>Insert title here</title>
</head>
<body>
Hello Spring MVC!
Here is iMooc!
</body>
</html>

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring MVC 起步 的相关文章

  • Mysql 解析

    目录 1 索引 为什么需要索引 索引的类型有哪些 mysql使用的是哪种索引数据结构

随机推荐

  • 自定义flume拦截器-实现了多种功能

    1 自定义拦截器实现说明 1 实现interceptor接口 并实现其方法 接口完全限定名为 org apache flume interceptor Interceptor 2 自定义拦截器内部添加静态内部类 实现Builder接口 并实
  • 使用Jfreechart实现带热点的饼状图

    JFreeChart是JAVA平台上的一个开放的图表绘制类库 它完全使用JAVA语言编写 是为applications applets servlets 以及JSP等使用所设计 JFreeChart可生成饼图 pie charts 柱状图
  • 【优化求解】基于粒子群算法集合生物地理算法CPSOBBO求解MLP问题matlab代码

    1 简介 Biogeography Based Optimizer BBO is employed as a trainer for Multi Layer Perceptron MLP The current source codes a
  • 卷积网络训练太慢?Yann LeCun:已解决CIFAR-10,目标 ImageNet

    摘要 CIFAR 10竞赛之后 卷积网络之父Yann LeCun接受相关采访 他认为 卷积网络需要大数据和高性能计算机的支持 深层卷积网络的训练时间不是问题 运行时间才是关键 Yann LeCun还分享了他正在做的一些最新研究 Kaggle
  • Centos7.6 源码编译部署percona mysql 5.7.39-42

    Centos7 6 源码编译部署percona mysql 5 7 39 42 参考链接 mysql5 7 35源码编译安装部署 CentOS7 编译安装 Percona Server 5 7 percona Server for MySQ
  • 年薪100万和10万程序员的差距

    点击蓝字关注 回复 职场进阶 获取职场进阶精品资料一份 我们看武侠大片 经常有那种本来可以练就绝世武功的大虾 阴差阳错练的走火入魔 一开始还可以硬撑 还能打败一些虾兵蟹将 遇见真正的高手 这些大虾们立马就败下阵来 其实程序员的职业生涯 如同
  • jquery获取上级、同级和下级元素

    1 JQuery parent expr 找父亲节点 可以传入expr进行过滤 比如 parent parent 或者 parent parent child 2 JQuery parents expr 查找所有祖先元素 不限于父元素 3
  • SQL Server安装教程(2022年更新)

    很多朋友在安装SQL Server的过程中会碰到一些小状况 今天就以Microsoft SQL Server2019为例来聊聊SQL Server安装的相关问题 提示 若之前安装过SQL Server 务必保证在重装前将其卸载干净 目录 1
  • ODrive踩坑(一)windows下使用环境的搭建,odrivetool及USB驱动的安装

    最近有空玩玩无刷电机 早就听说ODrive的控制效果不凡 淘宝400买来玩玩 电机使用我以前囤的几个拆机DJI 3512 别看拆机 但悟的电机是针不戳 编码器使用TLE5012B E1000磁编码器 干回老本行画了张PCB 一方面连接编码器
  • JS异常: Uncaught RangeError: Maximum call stack size exceeded

    今天被一个bug弄得头大 找了无数资料 网上说是递归函数的原因 https blog csdn net qq 30100043 article details 72642205 还是未能解决问题 继续找 最后在 https blog csd
  • 【故障集合】综合架构rsync服务与nfs服务错误集合(持续补充中)

    一 rsync服务 1 1 not a regular file 不是普通文件 scp跟cp类型 默认只能复制普通文件 复制目录 加上 r参数即可 root backup scp etc 172 16 1 31 tmp root 172 1
  • 软件设计七大原则

    在软件开发中 为了提高软件系统的可维护性和可复用性 增加软件的可扩展性和灵活性 程序员要尽量根据 7 条原则来开发程序 从而提高软件开发效率 节约软件开发成本和维护成本 我来依次来总结这 7 条原则 这 7 种设计原则是软件设计模式必须尽量
  • uni-app 框架超详细新手入门

    什么是uni app 介绍 uni app 是一个使用 Vue js 开发跨平台应用的前端框架 开发者通过编写 Vue js 代码 uni app 将其编译到iOS Android 微信小程序等多个平台 保证其正确运行并达到优秀体验 uni
  • 公网远程访问宝塔面板和网页【内网穿透】

    1 ngrok 限制带宽 不限制流量 进入ngrok官网 Sunny Ngrok内网转发内网穿透 国内内网映射服务器 1 注册 2 开通隧道 3 穿透网页 1 配置ngrok 输入网页本地地址和端口号 2 运行ngrok sunny cli
  • IntelliJ IDEA下载安装教程(超详细图解)

    1 IDEA的下载 官网链接 https www jetbrains com idea l 1 点击上面链接进入官网 点击Developer Tools 再点击 Intellij IDEA 2 点击Download 进入IDEA下载界面 3
  • Vue:数据双向绑定和v-系列指令

    Vue js是当下最火的一款前端框架了 学习的时候要多动手实践以帮助理解 我是通过例子来学习的 这样记的快一些 目录 Vue js介绍 如何引入Vue 何为声明式渲染 如何实现 文本插值 message v html v bind 绑定元素
  • 数组的添加和删除过滤方法总结es6 filter()

    es6 filter 数组过滤方法总结 Array every x gt x 是每一个都要满足 Array some x gt x 是有一个满足 Array find findIndex 返回符合条件的第一个值 Array filter 过
  • C语言,文件定位问题详解

    最近在完成上机题碰到文件操作 要求能够修改某一行的数据 关于这个问题 我们自然就会想到用fseek来定位然后修改这一行的内容 可是问题就来了 具体啥问题请往下看 比如说text txt的内容为 这时我想把第二内容改为24 很明显用fseek
  • union关键字,理解-应用场景-优点

    C语言共用体 C语言union用法 详解 biancheng net 理解为 需求场景 某变量可具有多重身份 然而在使用某变量时 它只能确定为其中一种身份 union关键字 这种好处是 既可以满足需求 又可以不浪费内存 union关键字创建
  • Spring MVC 起步

    一 MVC 首先http的请求到达前端控制器 前端知道具体的请求 将代理给到控制器 控制器了解具体的业务细节 因此调用业务逻辑 生成业务数据 并将业务数据返回给前端控制器 然后前端控制器将数据分发给我们的业务视图 由业务视图来呈现业务页面返