首页 > 其他分享 >Springmvc入门

Springmvc入门

时间:2023-04-12 21:46:31浏览次数:47  
标签:上下文 入门 Springmvc spring springmvc Handler DispatcherServlet 请求

 

 

 

 

 

 

 

 

 

1. 什么是springmvc

Spring Web MVC是一种基于Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架。

ssm:即springmvc, spring, mybatis

 

 

2.项目中加入springmvc支持

2.1 导入依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>

<!--  JSTL依赖 原因:org.springframework.web.servlet.view.JstlView在视图解析时需要这二个jar包-->
<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>
<dependency>
  <groupId>taglibs</groupId>
  <artifactId>standard</artifactId>
  <version>1.1.2</version>
</dependency>

2.2 springMVC配置文件

将课件中的spring-mvc.xml放入WEB-INF目录下,详细信息见配置文件中的注释。

注:关于注解扫描的优化:
在使用spring+springmvc时会存在两个上下文,一个父上下文spring上下文,一个子上下文springmvc上下文,springmvc上下文可以访问父上下文(即spring上下文),但spring上下文不能访问到子上下文(即springmvc上下文)。
优化思路:spring中配置的注解扫描排除掉controller,而springmvc配置文件中的注解扫描则只需要扫描controller即可。具体配置详见课件中的配置文件。

 

 

2.3 web.xml配置

将web.xml放入WEB-INF目录,替换原来的配置文件

2.4 中文编码处理

将EncodingFiter.java导入项目并在web.xml中配置,以便于处理中文编码。

3. 编写一个简单的controller

 

 

注: 示例中用到的注解:

  • @Controller:该注解在springmvc中用于标记一个控制器,类似的注解还有@RestController,不同的是@RestController专门用于标记一个rest风格的接口,相当于@ResponseBody + @Controller合在一起的作用。
  • @RequestMapping:该用于标记请求路径,在有些参考资料中也称之为服务端点。该注释可以用在方法上也可以用在类上。

使用浏览器测试,如果服务后台输出了提示字符串,则说明配置成功,现在页面上会显示错误,因为目前还没有配置页面。

4. 视图层配置

4.1 视图解析器配置

 

  如果是前后端分离的开发方式则不需要配置。

4.2 静态资源配置

示例:

 

 为了方便配置可以将所有的静态资源放置在static目录中,具体配置如图所示:

 

 如果加该配置,则不能正常显示图片, 可以注释掉测试看看。

4.2 编写页面

1)编写一个测试页面

 

 2)修改controller的配置

4.3 页面跳转方式

1)转发: "forward:path"

 

 2)重定向: "redirect:path"

 

 因为页面文件放置在了WEB-INF目录下,所以不能直接重定向到页面。注意看示例。

5. SpringMVC处理请求的流程

主要组件
1 首先用户发送请求-->DispatherServlet
2 DispatcherServlet-->HandlerMapping
3 DispatcherServlet-->HandlerAdapter
4 HandlerAdapter-->处理器功能处理方法的调用
5 ModelAndView的逻辑视图名-->ViewRecolver
6 View-->渲染
7 返回控制权给DispatcherServlet,由DispatcherServlet返回呼应给用户,流程结束

处理流程示意图:

 

 Spring工作流程描述
      1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
      2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
      3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
       4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
      5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
      6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
      7. ViewResolver 结合Model和View,来渲染视图
      8. 将渲染结果返回给客户端。

6. 常用注解

    • @Controller:用于标识处理器类
    • @RestController注解相当于@ResponseBody + @Controller合在一起的作用
    • @RequestMapping:请求到处理器功能方法的映射规则,可定义到类和方法,常用参数:value、method
    • @RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定,常用参数:value、required、defaultValue, (required设置成false的参数类型必须是引用类型,因为基本数据类型是不能为null的)
    • @ModelAttribute:请求参数到命令对象的绑定。
      可用@ModelAttribute标注方法参数,方法参数会被添加到Model对象中(作用:向视图层传数据)
      可用@ModelAttribute标注一个非请求处理方法,此方法会在每次调用请求处理方法前被调用(作用:数据初始化)
      可用@ModelAttribute标注方法,方法返回值会被添加到Model对象中(作用:向视图层传数据)
    • @RequestBody:用于目前比较流行的ajax开发的数据绑定(即提交数据的类型为json格式)

标签:上下文,入门,Springmvc,spring,springmvc,Handler,DispatcherServlet,请求
From: https://www.cnblogs.com/wujingyu123/p/17311381.html

相关文章

  • Netty入门
    一、Netty概述1、Netty是什么?>Netty是由JBOSS提供的一个Java开源框架。Netty提供异步的、基于事件驱动的网络应用程序架构,用以快速开发高性能、高可靠性的网络IO程序。Netty可以帮助你快速、简单的开发出一个网络应用,相当于简化和流程化了NIO的开发过程Netty是目前最流行的NI......
  • Docker快速入门 第一篇
    目录Docker容器一、前言1、什么时虚拟化2、cocker是什么3、容器与虚拟化的区别4、Docker的概念二、安装dockerDocker容器一、前言1、什么时虚拟化在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转......
  • Docker快速入门 第二篇
    目录Docker一、Iass-Paas和Saas1、简介二、Docker常用命令1、镜像站设置2、启动/停止常用命令三、镜像命令相关四、容器相关命令Docker一、Iass-Paas和Saas1、简介什么是lass-Pass和Saas:#Iaas:Infrastructure-as-a-Service(基础设施即服务) IaaS公司会提供场外服务器,存储......
  • js入门
    js的基础JavaScript(简称JS”)是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。javascript又名ECMAscriptECMA是什么?1、全称:Europeancomputermanufacturersassociation欧洲计算机制造联合会;2、它的标准名单中的:ECMA—262脚本语言的规范:规范化脚本语言,......
  • Nvidia Tensor Core-WMMA API编程入门
    1WMMA(Warp-levelMatrixMultiplyAccumulate)API对于计算能力在7.0及以上的CUDA设备,可以使用CUDAC++API调用TensorCore,支持形如D=AB+C的混合精度的矩阵乘运算。template<typenameUse,intm,intn,intk,typenameT,typenameLayout=void>classfragment;......
  • Go语言入门6(struct 结构体)
    结构体​ 结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员结构体声明type+结构体名+struct+{成员列表}​ ⭐如果结构体成员名字是以大写字母开头的,那么该成员就是导出的。这是Go语言导出规则决定的。一个结构体可能同时包......
  • WSL 2 上的 Docker 远程容器入门
    [WSL上的Docker容器入门|MicrosoftLearn](https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers)本分步指南将通过使用WSL2(适用于Linux的Windows子系统,版本2)设置DockerDesktopforWindows,帮助开始使用远程容器进行开发。DockerDesktopfor......
  • 大模型入门(一)—— LLaMa/Alpaca/Vicuna
    LLaMa模型是Meta开源的大模型,模型参数从7B到65B不等,LLaMa-7B在大多数基准测试上超过了GPT3-173B,而LLaMa-65B和Chinchilla-70B、PaLM-540B相比也极具竞争力。相比于ChatGPT或者GPT4来说,LLaMa可能效果上还有差距,但相比ClosedAI,至少LLaMa论文和模型都开源出来了,目前huggingface......
  • SpringMVC 长轮询
    修改web.xml让其支持异步请求<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param>&l......
  • 【基础知识】PCB布局设计入门步骤
    准备是成功的基石,在PCB设计中也是如此。改进和增长将伴随经验,首先做好准备能够充分利用经验获得成功。为了帮助你做好准备,下面分享一些基本的PCB布局设计步骤。从良好的原材料入手是您PCB布局设计的第一步无论打算执行什么任务,要想成功,就需要从优质的材料入手。就像高级木匠不会用......