SpringMVC学习1

news2024/10/4 23:20:08

一、SpringMVC的概述

  • SpringMVC是由Spring官方提供的基于MVC设计理念的Web框架
  • MVC是模型、视图、控制器的简写,是软件的一种设计规范
  • MVC将业务逻辑、数据,显示分离的方式来组织代码
  • MVC降低了视图和业务逻辑之间的双向耦合
  • MVC是一种架构模式

模型(Model):完成具体的业务,进行数据的查询

视图(View):用来做展示的,比如我们学过的JSP技术,用来展示模型中的数据

控制器(Controller):控制器的作用就是搜集页面传来的原始数据,或者调用模型获得数据交给视图层处理

二、SpringMVC的特点

  • 结构松散,几乎可以在 Spring MVC 中使用各类视图,不仅仅是jsp。
  • 低耦合,各个模块分离
  • 与 Spring 无缝集成

三、SpringMVC优点

  • 分离角色-Spring MVC分离每个角色,其中可以由专门的对象来实现模型对象,控制器,命令对象,视图解析器,DispatcherServlet,验证器等。
  • 轻量-它使用轻巧的servlet容器来开发和部署您的应用程序。
  • 强大的配置-它为框架和应用程序类提供了可靠的配置,其中包括跨上下文的轻松引用,例如从Web控制器到业务对象和验证器。
  • 快速开发-SpringMVC促进了快速并行的开发。
  • 可重复使用的业务代码-无需创建新对象,它使我们可以使用现有业务对象。
  • 易于测试-在Spring中,通常我们创建JavaBeans类,使您可以使用setter方法注入测试数据。
  • 灵活的映射-它提供了可轻松重定向页面的特定注释。

 四、SpringMVC执行原理

1.DispatcherServlet表示前置控制器,是SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。 

2.HandlerMapping是处理器映射。由DispatcherServlet调用HandlerMapping,HandlerMapping会根据请求url查找控制器Handler。

3.HandlerExecution表示具体的Handler,其主作用是根据url查找控制器。

4.HandlerExecution将解析后的信息传给DispatcherServlet,如解析控制器映射等等。

5.HandlerAdapter表示处理器适配器,它会按照特定的规则去执行Handler。

6.Handler让具体的Controller执行。

7.Controller将具体的执行信息返回给HandlerAdapter,ViewAndModel等。

8.HandlerAdapter将试图逻辑名或模型传递给DispatcherServlet。

9.DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

10.视图解析器将解析的逻辑视图名传给DispatcherServlet。

11.DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

12.最后将试图呈现给用户。

五、第一个SpringMVC项目

导入依赖

    <!--    导入依赖-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.9</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

配置web.xml

<!--    配置DispatcherServlet:这个是springmvc的核心,请求转发器,前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--    DispatcherServlet要绑定的Spring的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
<!--        设置启动级别-->
        <load-on-startup>1</load-on-startup>
    </servlet>

<!--    在springmvc中 / 和 /* 的区别:
             /:只匹配所有的请求,不包括jsp页面
             /*:匹配所有的请求,包括jsp页面
             -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

配置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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置处理器映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--配置处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--配置视图解析器,不管是使用那种开发都不能省略:模板引擎 Thymeleaf Freemarker-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
    <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp"/>
    <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--BeanNameUrlHandlerMapping:此处理器会根据一个bean去寻找-->
    <bean id="/hello" class="com.rxj.controller.HelloController"/>
</beans>

创建一个名为HelloController的类

public class HelloController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mav = new ModelAndView();
        //业务代码
        mav.addObject( "msg","HelloSpringMVC" );
        //视图跳转
        mav.setViewName( "test" );
        return mav;
    }
}

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

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

相关文章

SpringBoot整合接口管理工具Swagger

Swagger Swagger简介 Springboot整合swagger Swagger 常用注解 一、Swagger简介 ​ Swagger 是一系列 RESTful API 的工具&#xff0c;通过 Swagger 可以获得项目的⼀种交互式文档&#xff0c;客户端 SDK 的自动生成等功能。 ​ Swagger 的目标是为 REST APIs 定义一个标…

初识CSRF

概述跨站请求伪造&#xff08;Cross-site request forgery&#xff09;通常缩写为 CSRF 或者 XSRF&#xff0c; 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。CSRF并不是攻击网站服务器&#xff0c;而是冒充用户在站内的正常操作在CSRF的攻击场景中攻…

会话技术.

Cookie 在服务器中写一个Cookie键值对&#xff0c;然后把它扔进响应值中&#xff0c;于是在浏览器访问当前web项目时会得到响应值&#xff0c;并且把这个响应值中的Cookie数据存在浏览器中&#xff0c;下次&#xff0c;在服务器中就可以先获得刚才的Cookie数据&#xff0c;然后…

第六章_Redis管道

是什么 解决思路&#xff08;引出管道这个概念&#xff09; 管道(pipeline)可以一次性发送多条命令给服务端&#xff0c;服务端依次处理完完毕后&#xff0c;通过一条响应一次性将结果返回&#xff0c;通过减少客户端与redis的通信次数来实现降低往返延时时间。pipeline实现的…

【从零开始学Skynet】工具篇(二):虚拟机文件的复制粘贴

大家在Linux系统下开发的时候肯定会遇到虚拟机与主机间无法复制粘贴的问题&#xff0c;现在我们就来解决这样的问题&#xff0c;方便我们的开发。 1、打开设置 我们可以系统界面的菜单栏点击“控制”&#xff0c;然后打开“设置”&#xff1b; 也可以在VirtualBox界面打开“设…

建议企业采购团队学习的采购策略

随着全球市场的不断发展和竞争的日益激烈&#xff0c;企业采购团队必须制定出更加科学、合理的采购策略来适应市场的各种变化。合理的采购策略不仅可以保证企业的采购成本最优化&#xff0c;还可以提高采购效率和质量。因此&#xff0c;建议企业采购团队学会以下几种采购策略&a…

一文搞懂Plant Simulation中的Rotation设置

在处理3D动画或者展示时,常常需要在Plant Simulation调整数模的姿态,静态设置或动态设置Rotation是一个很重要的手段。 编辑3D属性,在Transformation选项卡中,我们可以看到Rotation的设置参数,如上图所示,只有一个角度和3个轴参数。如果对计算机图形学不了解的同学,估计…

【外设零基础通用教程】GPIO 下

【外设零基础通用教程】GPIO 下使用方法GPIO 值输入读取值输出设置值GPIO输入输出应用GPIO输入应用GPIO输出应用文档使用理论补充输出方式推挽输出开漏输出上篇连接&#xff1a;【外设零基础通用教程】GPIO 上&#xff0c;主要是在做视频的时候&#xff0c;发现上篇理论很多&am…

[composer-unused]扫描代码找出没有使用的依赖

composer-unused是一个使用PHP开发的命令行工具&#xff0c;就像composer一样&#xff0c;只不过它的作用是扫描出代码中&#xff0c;加载了依赖但没有实际使用的库。 使用分析 像我之前做过的一个项目&#xff0c;扫描结果如下图&#xff1a; 其中可以发现在composer.json中…

【网络】网络层协议——IP

目录网络层IP协议IP基础知识IP地址IP报头格式网段划分CIDR特殊的IP地址IP地址的数量限制私有IP地址和公有IP地址路由IP总结网络层 在复杂的网络环境中确定一个合法的路径。 IP协议 IP协议作为整个TCP/IP中至关重要的协议&#xff0c;主要负责将数据包发送给最终的目标计算机…

对USB协议的通俗理解

目录简介背景特点版本USB数据流模型总线拓扑结构USB通信流端点管道电气标准USB接口类型USB Type-AUSB Type-BUSB Type-CPIN脚定义4PIN9PIN5PIN24PIN16PIN6PINUSB数据传输相关概念通讯方式通讯方向同步方式帧和微帧USB数据格式域包令牌包数据包握手包特殊包事务IN事务OUT事务SET…

BM37-二叉搜索树的最近公共祖先

题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q&#xff0c;最近公共祖先LCA(T,p,q)表示一个节点x&#xff0c;满足x是p和q的祖先且x的深度尽可能大。在这里&#xff0c;一个节点也可以是它自己…

CSC国家公派项目网上申报今天启动/附应提交材料及说明

今天&#xff08;4月10日&#xff09;是2023年国家公派高级研究学者、访问学者、博士后项目开始申报的日期&#xff0c;知识人网小编提醒申请者关注&#xff0c;同时附上该项目的应提交材料及说明。 根据国家留学基金委&#xff08;CSC&#xff09;通知精神&#xff0c;2023年国…

typora和C51开发环境

经过查阅&#xff0c;可以用wiz和typora联动的方式记录笔记&#xff0c;这样一个文件夹里既可以用typora也可以用内置编辑器&#xff08;一种富文本编辑器&#xff09;&#xff0c;注意同一个文件不能用不同的编辑器&#xff0c;否则会错乱。以下&#xff0c;我列举了用typora的…

extern 关键字

参考https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 1 基本解释 extern可以置于变量或者函数前&#xff0c;以标示变量或者函数的定义在别的文件中&#xff0c;提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定…

k8s调度器扩展(Scheduler Framework)、源码编译及部署

因为研究的需要&#xff0c;需要对K8S的调度器进行扩展&#xff0c;本文主要讲解了k8s调度器扩展的一个流程&#xff0c;其中包含源码修改、源码编译、调度器配置以及部署和本人所踩的一些坑&#xff0c;使用的k8s的版本为1.23.1 1.下载源码&#xff0c;在此选择v1.23.1版本&a…

大数据之Spark部署模式

文章目录前言一、Spark的部署模式&#xff08;一&#xff09;Client模式1. Standalone集群下的Client模式2. Spark On Yarn集群下的Client模式&#xff08;二&#xff09;Cluster模式1. Standalone集群下的Cluster模式2. Spark On Yarn集群下的Cluster模式总结前言 #博学谷IT学…

c++头文件、namespace 的理解、#include、 编译模式

namespace C 命名空间 | 菜鸟教程 C命名空间&#xff08;名字空间&#xff09;详解 作用&#xff1a;多写在头文件中&#xff0c;用于多个头文件的变量函数出现重命名。 namespace中可以定义变量&#xff0c;函数&#xff0c;类等等&#xff0c;也可以写声明&#xff0c;来…

牛客网 HJ28 素数伴侣【二分图匹配,匈牙利算法】困难

描述 若两个正整数的和为素数&#xff0c;则这两个正整数称之为“素数伴侣”&#xff0c;如2和5、6和13&#xff0c;它们能应用于通信加密。现在密码学会请你设计一个程序&#xff0c;从已有的 N &#xff08; N 为偶数&#xff09;个正整数中挑选出若干对组成“素数伴侣”&am…

一种用于水位量测的浮子水位计

简介 浮子式水位传感器&#xff08;带水位显示&#xff09;是集机、电技术于一体的数字化传感器。通过输出轴的角度位移量转换成相应的数字量&#xff0c;可以高精度测量被测液位高度&#xff0c;能确认准确位置。具有断电记忆功能。 其工作原理就是&#xff1a;水位传感器测轮…