SpringMVC

本文详细介绍了SpringMVC框架在JavaWeb开发中的应用,包括其与Servlet的关系、参数处理、域对象使用、视图渲染、RESTful开发、过滤器和拦截器,以及DispatcherServlet的作用。同时提到了相关技术如jQuery在JavaScript中的应用和Spring、SpringMVC与SpringBoot的区别与集成。
摘要由CSDN通过智能技术生成


0. 前置知识概述

Servlet、JSP、JavaScript和Tomcat都是与Java Web开发相关的技术或工具,它们之间存在一定的关系。下面是对它们的简要说明:

  1. Servlet:Servlet是Java编写的服务器端程序,它运行在Web服务器中,用于处理客户端发起的HTTP请求并生成响应。Servlet通常用于实现动态的Web应用程序,可以处理表单提交、用户认证、数据库操作等任务。

  2. JSP:JSP(JavaServer Pages)是一种在Java Web应用程序中生成动态网页的技术。它是一个基于Java的模板引擎,允许在HTML文件中嵌入Java代码来动态生成内容。JSP文件最终会被转换成Servlet并在服务器端执行。

  3. JavaScript:JavaScript是一种客户端脚本语言,用于为网页增加交互性和动态性。与服务器端的Servlet和JSP不同,JavaScript运行在用户的浏览器中,可以对网页进行各种操作,如表单验证、DOM操作、事件处理等。

  4. Tomcat:Tomcat是一个开源的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)的规范,并提供了一个运行环境。Tomcat可以作为Web服务器,用于部署和运行Servlet和JSP应用程序。它接收并处理客户端发来的HTTP请求,将请求传递给相应的Servlet或JSP进行处理,并将生成的响应返回给客户端。

关系说明:

  • Servlet和JSP通常一起使用,用于构建Java Web应用程序。Servlet负责处理客户端的请求和生成响应,而JSP负责将动态内容嵌入到静态HTML页面中。
  • JavaScript通常在浏览器端执行,用于增强网页的交互性和动态性。它可以与Servlet和JSP通过Ajax技术进行通信,实现动态数据的加载和更新。
  • Tomcat是一个Web服务器,也是一个Servlet容器,用于部署和运行Servlet和JSP应用程序。它可以将Servlet和JSP编译成可执行的代码,并管理Servlet的生命周期,接收和处理客户端的请求。

综上所述,Servlet、JSP、JavaScript和Tomcat是Java Web开发中的关键技术和工具,它们共同参与实现Web应用程序的开发、部署和执行。Servlet和JSP负责服务器端的处理和页面生成,JavaScript负责客户端的交互和动态效果,而Tomcat提供了Servlet容器和Web服务器的功能。

关于tomcat:

在这里插入图片描述


jQuery是一个广泛使用的JavaScript库,它简化了JavaScript在网页开发中的使用。jQuery提供了一系列的功能和方法,使得处理HTML文档、处理事件、执行动画和进行Ajax通信等任务更加简单和高效。

以下是jQuery的一些特性和用途:

  1. DOM操作:jQuery提供了简单而强大的DOM操作方法,可以轻松选择和修改HTML元素,改变样式、属性和内容等。

  2. 事件处理:使用jQuery可以轻松地绑定和处理事件,例如点击、鼠标移入移出等事件。它提供了简洁的语法来注册事件处理程序,减少了在不同浏览器上处理事件的兼容性问题。

  3. 动画效果:jQuery提供了多种内置的动画效果,如淡入淡出、滑动、缓动等,可以方便地实现页面元素的动态效果,提升用户体验。

  4. Ajax通信:通过jQuery的Ajax方法,可以发送异步请求并处理服务器端的响应。它提供了简单的接口来执行GET或POST请求,以及处理JSON、XML等不同数据格式。

  5. 插件扩展:jQuery拥有庞大的插件生态系统,许多开发者编写了各种强大的插件来扩展jQuery的功能。这些插件可以实现各种任务,如图像轮播、日期选择、表单验证等。

总体而言,jQuery简化了JavaScript编程,并提供了跨浏览器兼容性的解决方案。它在网页开发中非常流行,使得开发者可以更高效地操作DOM、处理事件、创建动画效果和进行异步通信。然而,随着现代Web开发的发展,前端技术和框架的选择变得更加多样化,因此,根据具体的项目需求和技术要求,你可能还需要考虑其他的前端技术和框架。


Spring、Spring MVC和Spring Boot是Java开发中的三个关键框架,它们之间存在一定的关系。下面是它们之间的简要说明:

  1. Spring:Spring是一个全面的、模块化的Java应用程序开发框架。它提供了大量的功能和组件,用于开发各种类型的应用程序,包括Web应用程序。Spring框架的核心特点是依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming),它们使应用程序的开发更加模块化、可测试和扩展。

  2. Spring MVC:Spring MVC是Spring框架中的一个模块,用于开发基于MVC(Model-View-Controller)模式的Web应用程序。它提供了一套基于注解的方式来定义Web请求的处理器、视图解析器和模型对象等,极大地简化了Web应用程序的开发过程。Spring MVC包含一个前端控制器(Front Controller),负责调度请求,并将其分发给适当的处理器进行处理。

  3. Spring Boot:Spring Boot是一个用于快速构建Java应用程序的框架。它基于Spring框架,提供了自动配置和约定优于配置的方式,从而简化了Spring应用程序的搭建和部署。Spring Boot通过减少样板代码和默认配置,使开发者能够快速启动和运行一个独立的、可执行的Spring应用程序,并集成了许多常用的第三方库和组件,如数据库连接池、Web服务器等。

综上所述,Spring是一个全面的Java应用程序开发框架,Spring MVC是Spring框架中的Web开发模块,而Spring Boot是基于Spring框架的快速构建Java应用程序的框架。你可以使用Spring框架来构建各种类型的应用程序,包括Web应用程序,而Spring MVC和Spring Boot可以帮助你更高效地进行Web应用程序的开发。


在这里插入图片描述

1. SpringMVC简介

在这里插入图片描述

在这里插入图片描述

关于springmvc尚硅谷的笔记可参考 这里

2. Servlet

Servlet主要用于在服务器端处理请求,SpringMVC本质上就是对servlet的创建和配置进行了封装与隐藏

2.1 servlet在javaweb中的使用

在这里插入图片描述

servlet在Java web中是如何实际应用的:

在这里插入图片描述
在这里插入图片描述

2.2 springmvc中如何使用封装后的servlet

在这里插入图片描述

在这里插入图片描述

3. SpringMVC获取前端请求参数

3.1 如何获取请求头(header)和cookie的部分参数值

分别通过@RequestHeader

在这里插入图片描述

和@CookieValue

先创建session
在这里插入图片描述
再从请求报文中抽取值
在这里插入图片描述
此处“JSESSIONID”为@CookieValue注解的value属性

补充:session与cookie

在这里插入图片描述
每当创建一个session,就会生成一个键为JSESSIONID的cookie
session生命周期:浏览器开启到浏览器关闭

用户第一次访问服务器时,第一次创建session,存储了JSESSIONID的cookie存在于响应报文中,之后就存在于请求报文中

3.2 POJO

在这里插入图片描述

3.3 ModelAndView(重点)

spring MVC推荐以这种方式进行请求参数接收与返回

4. 域对象共享数据

4.1 三种域对象

(1)request域,生存范围是一次请求【查询实时变化的数据】

(2)session域,一次会话,浏览器开启到关闭的过程。基于session的钝化和活化功能

(3)servlet context(application域),整个应用的范围,服务器开启到服务器关闭(少)

创建的都是同一个,从而实现共享

在这里插入图片描述

4.2 session与application

在这里插入图片描述

可以通过session获取application域(web应用程序的上下文),进而实现 4.3

4.3 向application域共享数据


@RequestMapping("/testApplication")
public String testApplication(HttpSession session){
	ServletContext application = session.getServletContext();//!!获取上下文
    application.setAttribute("testApplicationScope", "hello,application");
    return "success";
}

在这里插入图片描述

4.4 三种域对比

(1)request域:列表/修改/回写/错误信息提示

(2)session域:保存用户登录状态/

(3)servlet context(application域):很少用,范围太大了

5. springmvc视图view

搞前端的,处理请求地址与视图之间的跳转

5.1 三种方法

ModelAndView view名称没有前后缀表示被Thymeleaf解析

  • forward:/ 前缀,表示转发视图,创建的是InternalResourceView
    在这里插入图片描述

  • redirect:/ 前缀,表示重定向视图,创建的是RedirectView

在上面俩controller基础上加上:

在这里插入图片描述

5.2 转发与重定向

(1)转发:第一次是浏览器发送,第二次发送发生在服务器内部(url不会变,一直都是第一次请求的地址)。可以获取请求域数据,因为是同义词请求,所以request是同一个。只能访问服务器内部资源

(2)重定向:浏览器发动两次请求,第一次访问servlet,第二次访问重定向地址(url变)。不可获取请求域数据,因为两次请求对应两个request。不能访问WEB-INF(各种HTML页面)下的内容(因为是服务器内部资源)。因此要重定向到另一个请求,而不是具体页面

在这里插入图片描述

5.3 spring MVC解析过程(函数调用)

以原始视图为例(不考虑转发及重定向)

(1)DispatcherServlet 的 doDispatch函数
在这里插入图片描述

1061行,handle函数获取ModelAndView (mv)

在这里插入图片描述

(2)往下翻,有一个处理mv的方法 processDispatchResult(执行转发结果)

在这里插入图片描述

(3)进入processDispatchResult,发现有一render方法

在这里插入图片描述

在render中,通过resolve View Name(解析视图名称)获取视图对象

在这里插入图片描述

6. RESTFul

在这里插入图片描述

浏览器只能发出get/post方法,如何调用put/delete?
使用过滤器

6.1 过滤器

过滤器生命周期中的三个过程:初始化,执行过滤,销毁

filterChain用于放行

restful通过过滤器实现调用put/delete

源码分析:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

把put/delete/patch三种浏览器不能发送的请求类型塞进list

在这里插入图片描述

注:前端中,超链接发送数据是get,form表单提交数据get/post

6.2 实际RESTFul开发中配置文件处理

在这里插入图片描述

post方法才有请求体,get方法直接拼在链接后面

6.3 springMVC处理ajax

页面不发生跳转且与服务器进行交互

Ajax 的核心思想是通过在后台与服务器进行数据交换,实现页面更新而无需重新加载整个页面。传统的网页请求是同步的,即当用户与页面交互时,浏览器需要重新加载整个页面才能更新内容。而使用 Ajax,可以通过发送异步请求(使用 XMLHttpRequest 或者更现代的 Fetch API)来与服务器通信,获取数据或发送数据,并使用 JavaScript 来动态更新页面的部分内容,而不需要重新加载整个页面。

@ResponseBody 当controller想返回给前端某个Java对象的时候,通过次注解回返回该对象的json格式数据(将方法的返回值直接返回回去)

微服务与微服务之间的交互靠的就是HTTP+json

@RestController=@ResponseBody+@Controller

文件上传功能前端提交方式一定是post

7. 拦截器

在这里插入图片描述

拦截器是对控制器方法(Controller,也叫handler)进行拦截, 有三个作用位置:

(1) preHandle 控制器方法执行之前
(2) postHandle 控制器方法执行之后
(3) afterCompletion 渲染视图(控制器返回ModelAndView中的View)完毕之后

在这里插入图片描述

8. 总结

8.1 DispatcherServlet初始化过程

DispatcherServlet:前端控制器,不需要工程师开发,由框架提供
作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求(解析前端请求的)

DispatcherServlet 本质上是一个 Servlet,所以天然的遵循 Servlet 的生命周期。所以宏观上是 Servlet 生命周期来进行调度。

(1)在org.springframework.web.servlet.FrameworkServlet中进行WebApplicationContext初始化,调用initWebApplicationContext()

(2)initWebApplicationContext()这个函数里面又createWebApplicationContext

(3)initWebApplicationContext()中:

在这里插入图片描述

8.2 DispatcherServlet调用组件处理请求

(1)FrameworkServlet重写HttpServlet中的service()和doXxx(),这些方法中调用了processRequest(request, response)

(2)processRequest调用doService(request, response);这里调用的doService()是一个抽象方法,在DispatcherServlet中进行了重写

(3)org.springframework.web.servlet.DispatcherServlet对doService()重写,调用doDispatch(request, response);处理请求和响应

(4)doDispatch(request, response);创建handler拦截器等,使用HandlerAdapter调用所对应的控制器方法等

9. 还是总结

原来接收前端请求的:servlet&filter

springmvc就是对servlet的封装

在这里插入图片描述

参数接收和返回数据都有框架帮你做了,专注业务就行。原生servlet啥都自己做

在这里插入图片描述
在这里插入图片描述

DispatcherServlet

HandlerMapping 找路径
HandlerAdapter 又调用Handler调用controller层具体方法
ViewResolver 返回指定视图

按红线执行顺序:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值