iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >SpringMVC 的学习冒险之旅
  • 293
分享到

SpringMVC 的学习冒险之旅

springspringMvcjava服务器 2023-09-22 08:09:41 293人浏览 八月长安
摘要

       哈喽~大家好呀,前段时间将 spring 框架篇结束,从这篇开始,开始了我们 springMVC 的学习之旅了,这篇来看看Springmvc 项目起步讲解吧。  🥇个人主页:个人主页​​​​​

       哈喽~大家好呀,前段时间将 spring 框架篇结束,从这篇开始,开始了我们 springMVC学习之旅了,这篇来看看Springmvc 项目起步讲解吧。

 🥇个人主页:个人主页​​​​​             

🥈 系列专栏:【Java框架】   

🥉与这篇相关的文章:            

  

【JAVAEE框架】mybatis与Spring的整合(上)【JAVAEE框架】MyBatis与Spring的整合(上)_程序猿追的博客-CSDN博客
【JAVAEE框架】浅谈 aop 及代码实现【JAVAEE框架】浅谈 AOP 及代码实现_程序猿追的博客-CSDN博客
【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 ioP【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP_程序猿追的博客-CSDN博客

目录

一、前言

二、入门程序

三、有参数的传递


一、前言

As everyone knows,在JavaEE 体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层SpringMVC 是 Web 层的框架,Spring 是业务层的框架,MyBatis 是持久层的框架

经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。

MVC流程如图所示

​​

💡SpringMVC架构流程如图所示

💡SpringMVC 的核心架构

💡 SpringMVC 体系结构

❓​SpringMVC 体系结构流程是怎样的呢?

✅具体流程:

用户在页面进行操作,浏览器发送请求,发送到 DispatcherServlet(前端控制器),前端控制器收到后自己不处理,去交给其他解析器去解析

DispatcherServlet 将请求发给 HandlerMapping(处理器映射器),处理器映射器将请求映射为 HandlerExecutionChain 对象

DispatcherServlet 到 HandlerAdapter(处理器适配器),处理器适配器将会把处理器包装为适配器,从而就有了支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

HandlerAdapter 到 Handler,调用处理器相应功能处理方法,经过数据的一些处理,并返回一个 ModelAndView(模型数据、逻辑视图名)

ModelAndView 对象(Model 部分是业务对象返回的模型数据,View 部分为逻辑视图名)到 ViewResolver(视图解析器), 视图解析器将把逻辑视图名解析为具体的 View;

View ——> 渲染,View会根据传进来的 Model 模型数据进行渲染,此处的 Model 实际是一个Map 数据结构

View 渲染之后,由 View 返回响应给用户,相应的页面展现给用户看,到此一个流程结束。

二、练手程序

pom 文件写入依赖

                            org.springframework            spring-WEB            5.2.22.RELEASE                            org.springframework            spring-webmvc            5.2.22.RELEASE        

web.xml 文件

            dispatcherServlet        org.springframework.web.servlet.DispatcherServlet                    contextConfigLocation            classpath:springMVC.xml                        dispatcherServlet        /                userText.html    

DispatcherServlet

DispatcherServlet是前置控制器,配置在 web.xml 文件当中的,拦截匹配的请求,Servlet 拦截匹配规则要自己定义,将拦截下来的请求按照相应的规则分发到目标 Controller 来处理,是配置spring MVC的第一步。

/

看官方文档可知,如果我们的项目中配置了"/",会覆盖掉 Tomcat 中的默认 servlet,当其他的 url-pattern 匹配不上时都会走这个 servlet。意思就是说,页面来的所有请求都会走这个 servlet,也就是 DispatcherServlet。

springMVC.xml 文件

                                                            

context:component-scan

作用:扫描包内及其子包内的所有“类”(不包含接口),并为添加了@Service、@Component、@Controller、@Repository修饰的类创建对象并存入ioc容器,@Service、@Component、@Controller、@Repository修饰的类中含有@Autowired修饰的成员变量,则创建对象时会从IOC容器中取值为该成员变量赋值

context:include-filter

排除类,排除不需要扫描的类

InternalResourceViewResolver

视图解析器,他的作用是在Controller返回的时候进行解析视图

mvc:annotation-driven

主要用于 spring mvc 中的 annotation 注解功能,作用是帮我们注入一些内置 bean,例如RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter 等,这些类是 Aware 的子类,能完成特定的供能,例如:RequestMappingHandlerMapping 负责解析@RequestMapping("/helloworld")注解。主要是解析spring mvc的一些标签和语法。

我们在配置 dispatchServlet 时配置/拦截所有请求,这时候dispatchServlet完全取代了default servlet,将不会再访问容器中原始默认的servlet,而对静态资源的访问就是通过容器默认servlet处理的,故而这时候静态资源将不可访问。
换句话说我们用了 这个 /, html就文件访问不了了,如果想要解决访问静态资源问题,就要加上

自定义处理器

// @Controller 是Spring框架提供的注解。// @Controller标识的类,该类代表控制器类(控制层/表现层)。// 这里控制层里面的每个方法,都可以去调用@Service标识的类(业务逻辑层),@Controller// 在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置@RequestMapping("/user")public class UserAction {    @RequestMapping("/userText")    public String userText(){        return "userText";    }}

@Controller

是Spring框架提供的注解。@Controller标识的类,该类代表控制器类(控制层/表现层)。 这里控制层里面的每个方法,都可以去调用@Service标识的类(业务逻辑层)。

@RequestMapping

在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置。可以理解为访问路径。

userText.html 前端页面

        <a href="https://www.lsjlt.com/tag/测试/" target="_blank"><strong class="keylink">测试</strong></a>

我是测试1

我是测试2

项目名

day09_SpringMvc01

测试地址

Http://localhost:8080/day09_SpringMvc01/user/userText

三、有参数的传递

自定义处理器

    @RequestMapping(value = "/test02")    public String test02(User user){        System.out.println(user);        return "userList";    }

User 实体类

@Data@AllArgsConstructor@NoArgsConstructor@ToStringpublic class User {    private String username;    private String passWord;    private int age;    private String gender;    private String[] hobby;}

index.jsp 请求页面

姓名:
密码:
产品名称:
爱好:唱 rap 篮球

测试

效果

如果想让结果显示在另外一个页面上呢?

✅index.jsp 前端页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
姓名:
密码:
产品名称:
爱好:唱 rap 篮球

自定义处理器

    @RequestMapping("/test03")    public ModelAndView test03(User user){        ModelAndView mv = new ModelAndView();        mv.addObject("user",user);        mv.setViewName("userDetail");        return mv;    }

userDetail.jsp 接收页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    Title    

用户详情页

姓名:${user.username}

密码:${user.password}

爱好:${user.hobby}

测试

访问路径

http://localhost:8080/day09_SpringMvc01/index.jsp

效果

 扩:@GetMapping 与 @PostMapping

首先要了解一下@RequestMapping注解。

@RequestMapping用于映射url到控制器类的一个特定处理程序方法。可用于方法或者类上面。也就是可以通过url找到对应的方法。

@RequestMapping有8个属性。

value:指定请求的实际地址。

method:指定请求的method类型(GET,POST,PUT,DELETE)等。

consumes:指定处理请求的提交内容类型(Context-Type)。

produces:指定返回的内容类型,还可以设置返回值的字符编码。

params:指定request中必须包含某些参数值,才让该方法处理。

headers:指定request中必须包含某些指定的header值,才让该方法处理请求。

@getMapping与@postMapping是组合注解。

@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写

@postMapping 是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写

@RequestParam

主要用于将请求参数区域的数据映射到控制层方法的参数上。

什么意思?

举个例子,user实体类有两个成员变量(username 与 password),正常情况下我传一个username,不传password,username 就有值,password就是默认的值,如果加了@RequestParam 就必须要传值,如果加了,则默认一定要传参,如果不想传值,可以@RequestParam(required = false)

    @RequestMapping("/test03")    public String test03(@RequestParam(name = "id",required = false) String ids ){        System.out.println(ids);        return "userList";    }

不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!

来源地址:https://blog.csdn.net/aasd23/article/details/127361316

--结束END--

本文标题: SpringMVC 的学习冒险之旅

本文链接: https://www.lsjlt.com/news/414960.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringMVC 的学习冒险之旅
           哈喽~大家好呀,前段时间将 Spring 框架篇结束,从这篇开始,开始了我们 SpringMVC 的学习之旅了,这篇来看看SpringMVC 项目起步讲解吧。  🥇个人主页:个人主页​​​​​...
    99+
    2023-09-22
    spring springMvc java 服务器
  • SpringMvc学习之旅与Thymeleaf的常用用法
     哈喽~大家好呀,这篇继续上篇的SpringMvc讲解与Thymeleaf的常用用法。  🥇个人主页:个人主页​​​​​              🥈 系列专栏:【Java框架】    &#...
    99+
    2023-10-09
    spring springMvc java springboot 学习
  • python的学习之旅
        首先先介绍下本人,本人名叫杜邱,别名也叫故都的秋,网络工程专业毕业,现就职一家电子商务公司,已经三年了,起初从一个小小的网管做起,一台路由器,一台交换机,下面连着50几台电脑,三年过去了,慢慢的也在成长,装过监控,管过服务器,弄过网...
    99+
    2023-01-31
    之旅 python
  • Python学习之旅(十)
    字符串格式化有2种方法:一是用“%”,二是用format。 转换标志:,默认右对齐,%后面加上“-”表示左对齐;“+”表示在转换值之前要加上正负号;“ ”(空白符)表示在正数前面保留空格;“0”表示转换值若位数不够用0填充。 最小字段宽...
    99+
    2023-01-30
    之旅 Python
  • Python3.5学习之旅——day1
    本节内容: 1、Python介绍 2、Hello World程序    3、变量\字符编码 4、用户输入 5、if-else语句 6、循环语句   一、Python介绍 Python是一种动态解释性的强类型定义语言,主要应用在云计算,WE...
    99+
    2023-01-30
    之旅
  • 探秘 Java 控制流:踏上编程冒险之旅
    引言: 控制流是 Java 编程中至关重要的一环,允许程序根据条件和输入动态改变执行路径。掌握控制流对于编写健壮、灵活和可维护的代码至关重要。 条件语句: 条件语句用于根据一个或多个条件决定执行的代码路径。 if 语句:如果条件为真,则...
    99+
    2024-04-02
  • python学习之旅(二)
    Python基础知识(1) 一、变量 变量名可以由字母、数字、下划线任意组合而成。 注意:1.变量名不能以数字开头;            2.变量名不能为关键字;            3.变量名尽量起有意义的,能够通过变量名知道代表的...
    99+
    2023-01-30
    之旅 python
  • python学习之旅(十五)
    一、装饰器 decorator:本质上就是函数,可以增强函数的功能。 定义起来虽然有点复杂,但使用起来非常灵活和方便 1、不修改被装饰函数的源代码 2、不修改被装饰函数的调用方式 3、装饰函数对被装饰函数透明 import funct...
    99+
    2023-01-30
    之旅 python 十五
  • python学习之旅(十六)
    1、可以把模块想象成导入Python以增强其功能的扩展 2、任何程序都可以作为模块导入 3、导入模块并不意味着在导入的时候执行某些操作,它们主要用于定义变量、函数和类等   #hello1.py def hello(): pr...
    99+
    2023-01-30
    之旅 python 十六
  • Python学习之旅(十一)
    一、全局变量和局部变量 局部变量:在函数内定义的变量,在函数内使用 全局变量:在函数外定义的变量,在程序任何地方都可以使用 1、全局变量与局部变量同名 这时函数内部只调用局部变量,如果要调用全局变量需要在函数内加一句“global 同名...
    99+
    2023-01-30
    之旅 Python
  • Python学习之旅(十四)
    Python内置函数 1、abs:取绝对值 abs(-1) 1 2、all:把序列中的每一个元素拿出来做布尔运算,都为真则返回True,如果序列中有None、0、“”、[]、{}、()则返回False all([1,23,0]) ...
    99+
    2023-01-30
    之旅 Python 十四
  • Python学习之旅(二十九)
    一、Pillow PIL(Python Imaging Library):提供了强大的图像操作功能,可以通过简单的代码完成复杂的图像处理,是Python平台事实上的图像处理库,支持Python 2.7以及更低的版本 Pillow:在PI...
    99+
    2023-01-30
    之旅 二十九 Python
  • Python学习之旅(三十二)
    Python内置了turtle库,可以在计算机上绘图 运动控制: 1、画笔定位到坐标(x,y):turtle.goto(x,y) 2、向正方向运动 distance 长的距离:turtle.forward(distance) 3、向负方...
    99+
    2023-01-30
    之旅 Python 三十二
  • Python学习之旅(三十四)
    UDP编程 相对TCP,UDP则是面向无连接的协议 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包 虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用...
    99+
    2023-01-30
    之旅 Python 三十四
  • Python学习之旅(三十八)
    二、MySQL MySQL是Web世界中使用最广泛的数据库服务器。SQLite的特点是轻量级、可嵌入,但不能承受高并发访问,适合桌面和移动应用。而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于SQLite...
    99+
    2023-01-30
    之旅 Python 三十八
  • Python学习之旅(二十四)
    一、threadlocal 在多线程环境下,每个线程都有自己的数据 一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁 在函数间一层层调用的时候,使用局部变量很麻烦,使...
    99+
    2023-01-30
    之旅 二十四 Python
  • Python学习之旅(三十三)
    网络通信是两台计算机上的两个进程之间的通信,而网络编程就是如何在程序中实现两台计算机的通信 P协议负责把数据从一台计算机通过网络发送到另一台计算机 TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据...
    99+
    2023-01-30
    之旅 Python 三十三
  • Python学习之旅(三十七)
    程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。 而如何定义数据的存储格式就是一个大问题。 为了便于程序保存和读取数据,而...
    99+
    2023-01-30
    之旅 Python 三十七
  • Python学习之旅(二十五)
    正则表达式:检查一个字符串是否与某个模式匹配 \d :匹配数字 \w :匹配字母或数字 . :匹配任意字符 {n} :匹配n个字符 {m,n} :匹配m到n个字符 \s :匹配空格 a|b :匹配a或b ^ :匹配字符串开头 $ :匹配...
    99+
    2023-01-30
    之旅 二十五 Python
  • 学习Python旅程之一Python的基
    环境变量配置     程序和可执行文件可以在许多目录,而这些路径很可能不在操作系统提供可执行文件的搜索路径中。path(路径)存储在环境变量中,这是由操作系统维护的一个命名的字符串。这些变量包含可用的命令行解释器和其他程序的信息。Unix或...
    99+
    2023-01-31
    旅程 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作