JavaWeb框架:Spring MVC介绍

news2024/11/23 15:18:45

Spring MVC

  • 概述

在这里插入图片描述

概述

MVC(Model View Controller,模型-视图-控制器),作为一种设计模式,用于应用程序的分层开发。

Spring MVC,由 Spring 框架提供的基于 MVC 设计模式的一个轻量级 Web 开发框架。Spring MVC 提供了一个前端控制器 DispatcherServlet 来分派请求,然后通过配置处理程序映射、视图解析等,使 MVC 模式开发更高效。

Spring MVC 五大组件:前端控制器 DispatcherServlet处理器映射 HandlerMapping处理器 Controller模型视图 ModelAndView视图解析器 ViewResolver

基本原理

  • 前端控制器 DispatcherServlet 接收客户端请求,依据处理器映射 HandlerMapping 配置调用相应的处理器 Controller
  • 处理器 Controller 将处理请求,把结果封装成模型视图 ModelAndView 对象返回给前端控制器 DispatcherServlet
  • 前端控制器 DispatcherServlet 依据视图解析器 ViewResolver 的解析,得到真实视图对象(JSP等)对处理结果的展现
    在这里插入图片描述

简单示例:
首先,创建一个 Maven 的 Web 项目
在这里插入图片描述

然后,在 pom.xml 添加依赖

<dependencies>
  <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.25</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.3.25</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.25</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
  </dependency>

  <!-- https://mvnrepository.com/artifact/log4j/log4j -->
  <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
  <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
  </dependency>
</dependencies>

接着,对 webapp/WEB-INF 目录下的 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_4_0.xsd"
         version="4.0">

  <!-- 配置前端控制器 dispatcherServlet -->
  <servlet>
    <servlet-name>dispatcherServlet</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 对象 -->
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- 配置url地址 -->
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!-- 根目录下所有地址,其他 servlet 除外 -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

再在 resources 文件下创建 springmvc.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 https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="cn.edu.springmvcdemo" />
    
    <!-- 配置 springmvc 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 配置视图页面 -->
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

随之,在 webapp/WEB-INF 目录下创建 views 文件,再在其文件下创建 index.jsp

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

最后,测试结果

package cn.edu.springmvcdemo.controller;

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

@Controller
public class IndexDemo {
    @RequestMapping("/index")
    public String index(){
        return "index"; //返回对应页面文件名
    }
}

结果如图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/892747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio连接逍遥模拟器

1、启动Android Studio&#xff0c;打开和同步好项目。 2、启动逍遥模拟器&#xff0c;会自动连接Android Studio。 3、运行app到模拟器中即可。 4、如果第二步启动后没有自动连接&#xff0c;就需要我们手动连接&#xff0c;进入安装目录&#xff0c;我的是D:\Xiaoyao moniqi\…

【Java】Java如何生成随机数?

文章目录 前言一、Random类介绍二、Random类生成随机数1.生成随机数2.nextInt()方法 三、使用场景四、官方提示总结 前言 我们在学习 Java 基础时就知道可以生成随机数&#xff0c;可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。 一、Random类介绍 …

在CentOS7.9上安装最新版本Docker安装步骤

1、查看系统版本&#xff1a; cat /etc/redhat-release 2、卸载原有版本&#xff08;如有的话&#xff09; sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ d…

linux学习(文件描述符)[11]

一切皆文件 用代码创建的文件&#xff0c;默认路径在可执行文件同级目录下&#xff08;本质是进程通过系统接口创建的&#xff09; 文件宏 在Linux下&#xff0c;有一些与文件操作相关的宏可以用于处理文件描述符和文件权限。以下是一些常用的文件宏&#xff1a; STDIN_FIL…

算法通关村第4关【白银】| 栈的经典算法问题

1.括号匹配问题 思路&#xff1a;将左括号压入栈中&#xff0c;遍历字符串&#xff0c;当遇到右括号就出栈&#xff0c;判断是否是匹配的一对&#xff0c;不是就返回false&#xff08;因为按照顺序所以当遇到右括号出栈一定要是匹配的&#xff09;。使用Map来简化ifelse clas…

单片机中绝对地址转换为函数指针

一、相关概念 函数指针和指针函数是两个不同的概念。 函数指针是指可以指向函数的指针&#xff0c;它的类型与函数的返回值类型和参数类型相对应。通过函数指针&#xff0c;可以实现函数的回调和动态调用等功。 指针函数则是指返回指针类型的函数&#xff0c;它的返回值是一个指…

关于CDN加速和负载均衡技术的讨论

一&#xff1a;前言 相信学习到信息收集模块的小伙伴在学习Web信息收集中查找真实IP相关知识点时&#xff0c;必定接触到一个概念&#xff1a;CDN加速。那么什么是CDN&#xff1f;企业为什么要用CDN&#xff1f;就是为了隐藏自己的真实IP&#xff1f;显然不是。经济学中有一个概…

linux17 线程安全 线程同步

1、线程安全&#xff1a; 多线程程序无论调度顺序如何&#xff0c;都能保证程序 的正确性&#xff0c;就说该程序处于线程安全的状态 1&#xff09;、同步 2&#xff09;、线程安全函数//有的函数不适合多线程使用&#xff0c;是函数自身的原因。 2、线程安全函数 1&#…

java-垃圾回收与算法

垃圾回收与算法 1. 如何确定垃圾 1. 引用计数法 在 Java 中&#xff0c;引用和对象是有关联的。如果要操作对象则必须用引用进行。因此&#xff0c;很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说&#xff0c;即一个对象如果没有任何与之关联的引用&…

【Freertos基础入门】任务调度

文章目录 前言对于前面博客的总结一、任务调度算法是什么&#xff1f;1.调度算法是什么以及freertos的调度算法2.抢占式优先级调度3.时间片轮转调度 二、配置调度算法总结 前言 本系列基于stm32系列单片机来使用freerots 任务管理是实时操作系统&#xff08;RTOS&#xff09;…

VS2015+mysql5.7升级到VS2019+mysql-8.0.34

本来一开始是安装的vs2022社区版&#xff0c;结果没找到mysql-for-visualstudio对应的2022的版本。 原来&#xff1a;VS2015mysql5.7 安装的插件&#xff1a; mysql-for-visualstudio-2.0.5.msi mysql-connector-net-6.10.8.msi 升级后&#xff1a;VS2019mysql-8.0.34 安…

深入理解linux内核--块设备驱动程序

块设备的处理 块设备驱动程序上的每个操作都涉及很多内核组件&#xff1b;其中最重要的一些如图14-1所示。 例如&#xff0c;我们假设一个进程在某个磁盘文件上发出一个read()系统调用 ——我们将会看到处理write请求本质上采用同样的方式。 下面是内核对进程请求给予回应的一…

FPGA芯片IO口上下拉电阻的使用

FPGA芯片IO口上下拉电阻的使用 为什么要设置上下拉电阻一、如何设置下拉电阻二、如何设置上拉电阻为什么要设置上下拉电阻 这里以高云FPGA的GW1N-UV2QN48C6/I5来举例,这个芯片的上电默认初始化阶段,引脚是弱上来模式,且模式固定不能通过软件的配置来改变。如下图所示: 上…

Openwrt指定延迟脚本

在某些情况下&#xff0c;我们需要对指定网络接口指定延迟&#xff0c;以达到我们想要实验的效果延迟。 脚本如下&#xff1a; #!/bin/bash # #初始化 tc qdisc del dev br-lan root echo "1. 添加延迟规则 2. 删除延迟规则" read -p "请选择操作&#xff1a;&q…

素数线性筛法 → 欧拉筛

【题目来源】https://www.acwing.com/problem/content/870/【题目描述】 给定一个正整数 n&#xff0c;请你求出 1∼n 中质数的个数。【输入格式】 共一行&#xff0c;包含整数 n。【输出格式】 共一行&#xff0c;包含一个整数&#xff0c;表示 1∼n 中质数的个数。【数据范围…

【数字实验室】时钟切换

大部分开发者使用 BUFGCTRL 或 BUFGMUX进行时钟切换&#xff0c;它们在时钟切换上可以提供无毛刺输出。然而&#xff0c;了解所涉及的原理是有好处的。 当然&#xff0c;无论我们在同步逻辑中使用哪种技术&#xff0c;重要的是要确保在进行时钟切换时输出上没有毛刺。任何故障都…

无涯教程-Perl - times函数

描述 此函数返回一个四元素列表,为当前进程及其子进程提供用户,系统,子进程和子系统时间。 语法 以下是此函数的简单语法- times返回值 此函数返回ARRAY,($usertime,$systemtime,$childsystem,$childuser) 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -w($use…

一、ls 标准输出时出现乱码符号及解决办法

问题描述&#xff1a;采用 QSSh 登录远程主机时&#xff0c;执行 ls 指令&#xff0c;标准输出中出现乱码符号 如下&#xff0c;在成功 SSH 到远程主机后&#xff0c;执行 ls 指令&#xff0c;标准输出中出现一堆不认识的符号。 从标准输出来看&#xff0c;英文和中文并没有乱…

安科瑞无线测温产品在浙江某半导体项目的应用-安科瑞黄安南

摘 要&#xff1a;半导体被誉为“制造业的大脑”&#xff0c;在关系国家安全和国民经济命脉的主要行业和关键领域占据支配地位&#xff0c;是国民经济的重要支柱。随着数字技术的发展和数字经济在国民经济中所占比重越来越高&#xff0c;半导体产业的重要性还会进一步提升。安全…

文心一言 VS 讯飞星火 VS chatgpt (77)-- 算法导论7.3 2题

二、如果用go语言&#xff0c;在 RANDOMIZED-QUICKSORT 的运行过程中&#xff0c;在最坏情况下&#xff0c;随机数生成器 RANDOM 被调用了多少次?在最好情况下呢?以θ符号的形式给出你的答案? 文心一言&#xff1a; 在 RANDOMIZED-QUICKSORT 的运行过程中&#xff0c;最坏…