【springMVC篇1】初识springMVC

这篇具有很好参考价值的文章主要介绍了【springMVC篇1】初识springMVC。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、什么是springMVC

1.1springMVC定义:

模型(Model)

视图(View) 

第一大类:服务器端的视图

第二大类:客户端的视图

springMVC的工作流程 

1.2 MVC和springMVC之间的关系

二、学习SpringMVC的目标

2.1实现用户和程序之间的映射

     使用@RequestMapping注解

关于方法的返回值

@RequestMapping注解的参数

2.2获取用户请求的参数

第一种:用户只传递一个参数的情况

第二种:传递多个参数的情况(本质上和单个一样的)

第三种方式:获取一个对象

第四种方式:JSON格式传递对象

第五种方式:后端参数的重命名@RequestParam

@RequestParam的required属性

第六种方式:从URL地址栏当中获取参数(不是URL的查询字符串)

第七种方式:文件上传

实际开发当中的文件上传

 第一步:新建一个配置文件:application-dev.yml(开发环境的配置)和

   (application-prod.yml)运行环境的配置

第二步:分别配置本地的文件路径(开发环境)和Linux的文件的路径(运行环境)

第四步:在方法当中传递一个参数:MultipartFile file,并且采用@RequestPart修饰

2.2获取request和response对象

2.3通过注解的方式来获取cookie和header

2.4获取session的方式

2.5关于响应(方法的返回值)


一、什么是springMVC

SpringMVC是一个web框架,这个框架是基于MVC思想Servlet的API实现的一个Web框架。


1.1springMVC定义:

MVC是Model View Controller的缩写,它是软件工程中的一种软件架构模式,它把软件系统分为:

模型(Model)视图(View)控制器(Controller)三个部分。


模型(Model)

       是应用程序当中用于处理应用数据逻辑的部分。通常情况下,模型对象用于负责在数据库当中存储数据。


视图(View) 

是应用程序当中处理数据显示的部分,通常视图是依据模型数据创建的。

视图分为两大类:

第一大类:服务器端的视图

运行在服务器端的视图:负责解析数据和模板


第二大类:客户端的视图

运行在客户端的视图:负责展示实际的前端页面


springMVC的工作流程 

【springMVC篇1】初识springMVC


1.2 MVC和springMVC之间的关系

     MVC是一种软件设计的思想,而springMVC是MVC思想的具体实现

     同时SpringMVC又是Spring框架当中的一个Web模块,它是随着Spring的诞生而存在的一个框架。

【springMVC篇1】初识springMVC


二、学习SpringMVC的目标

有下面的三个步骤:

步骤1:实现用户和程序的映射(在浏览器输入URL地址之后,能够在程序当中匹配到相应的方法);

步骤2:服务器端要得到用户请求的参数

步骤3:服务器端要把结果返回给用户

下面,将分别介绍这三个步骤的具体实现: 


2.1实现用户和程序之间的映射

     使用@RequestMapping注解

      这个注解可以作用于类上面,也可以作用于方法上面,但是一定要作用在方法上面。

       当这个注解作用在类(Controller)上面的时候,意味着:当访问这一个类下面的所有方法的时候,请求的一级路径就是@RequestMappping(路径)。

       二级路径:就是作用在方法上面的路径。

【springMVC篇1】初识springMVC


关于方法的返回值

  当这一个方法

  没有被@ResponseBody注解作用的时候:那么返回值将会是一个待跳转的页面。

  如果被@ResponseBody注解作用的时候:那么返回值就是往页面回写的数据(相当于response.getWriter().write())

@RequestMapping注解的参数

@RequestMapping(method = RequestMethod.POST,value = "/get2")

 method参数:可以指定是get,还是post,还是delete等等方法。

 value参数:指的是访问的路径。

但是这个方法是一个枚举类型。 

【springMVC篇1】初识springMVC

        除了@RequestMapping以外,还可以使用@GetMapping@PostMapping@DeleteMapping等等的注解来处理请求。分别是:Get请求Post请求delete请求等等。


2.2获取用户请求的参数

第一种:用户只传递一个参数的情况

    /**
     * 用户提交的时候,只需要提交一个参数,也就是?后面跟着这一个参数
     * 用户的id@param id
     * user对象@return
     */
    @RequestMapping("/getUserById")
    @ResponseBody
    public User getUserById(Integer id){
       User user=new User();
       user.setAge(18);
       user.setId(id);
       user.setPassword("123");
       return user;
    }

测试: 

       需要注意的是:括号内的参数一定要和前端传递的参数名称一致。如上图:"?"后面的id需要和方法当中的参数名称保持一致

【springMVC篇1】初识springMVC


第二种:传递多个参数的情况(本质上和单个一样的)

 /**
     * 用户提交的时候,只需要提交一个参数,也就是?后面跟着这一个参数
     * 用户的id@param id
     * user对象@return
     */
    @RequestMapping("/getUserById")
    @ResponseBody
    public User getUserById(Integer id,String password){
       User user=new User();
       user.setAge(18);
       user.setId(id);
       user.setPassword(password);
       return user;
    }

       前端传递参数的时候,需要使用queryString的方式进行传参。 因此获取1个参数和多个参数的格式是一致的。

【springMVC篇1】初识springMVC


第三种方式:获取一个对象

       当queryString特别多的时候,那么这样代码的可读性、可维护性就变得非常差。因此,可以考虑使用对象来接受。

/**
     * 用户注册
     * 用户实体@param user
     * 注册成功的提示@return
     */
    @RequestMapping("/register")
    @ResponseBody
    public String register(User user){
        return "用户注册成功:"+user;
    }

 然后,前端提交信息的时候,只需要指定user的各个属性即可。

【springMVC篇1】初识springMVC

以上的几种方式,支持使用URL进行传递,也支持使用form表单进行实体提交。


第四种方式:JSON格式传递对象

       在上面,我们演示了以queryString的格式来传递一个对象,下面,将演示以json的格式传递user对象。

       需要在参数User前面加一个注解:@RequestBody

       当使用这一个注解修饰参数的时候,那么这个参数将会被以json的格式进行提交。

/**
     * 用户注册
     * 用户实体@param user
     * 注册成功的提示@return
     */
    @RequestMapping("/register")
    @ResponseBody
    public String register(@RequestBody User user){
        System.out.println(user);
        return "用户注册成功:"+user;
    }

【springMVC篇1】初识springMVC

 运行结果:【springMVC篇1】初识springMVC

       @RequestBody当中也有一个参数是required,默认是true,前端必须要提交user对象,否则报400

       如果把这个参数设置为false,那么前端就不一定需要提交user对象 


第五种方式:后端参数的重命名@RequestParam

使用@RequestParam注解,当中指定的名称就是前端传递的参数

    /**
     * 用户提交的时候,只需要提交一个参数,也就是?后面跟着这一个参数
     * 用户的id@param id
     * user对象@return
     */
    @RequestMapping("/getUserById")
    @ResponseBody
    public User getUserById(@RequestParam("userId")Integer id, String password){
       User user=new User();
       user.setAge(18);
       user.setId(id);
       user.setPassword(password);
       return user;
    }

这种情况,用于前后端出现了差异的时候,后端为了改变参数列表的名称,改用的一种方式:

【springMVC篇1】初识springMVC


@RequestParam的required属性

@RequestMapping("/getUserById")
    @ResponseBody
    public User getUserById(@RequestParam(value = "userId",required = false)Integer id, String password){
       User user=new User();
       user.setAge(18);
       user.setId(id);
       user.setPassword(password);
       return user;
    }

       如果使用@RequestParam注解的时候,不指定required参数,那么默认就是true,也就意味着前端一定要传递一个名称为"userId"的参数,否则就会报错。

       只有改成了false,才不会令userId这个参数设置为"必传"的。


第六种方式:从URL地址栏当中获取参数(不是URL的查询字符串)

第一步:需要在@RequestMapping当中使用{}来指定参数;

第二步:需要在方法当中使用@PathVariable来修饰参数。

代码实现:

    @RequestMapping("/url/{username}/{password}")
    @ResponseBody
    public User getFromUrl(@PathVariable String username,@PathVariable String password){
        User user=new User();
        user.setUserName(username);
        user.setPassword(password);
        return user;
    }

运行结果: 

【springMVC篇1】初识springMVC


第七种方式:文件上传

       第一步:需要在方法当中传入一个参数,这个参数是:Multipart file,需要被注解@RequestPart修饰,其中@RequestPart的参数为前端传递的参数名字

       第二步:调用file的transferTo方法指定需要上传的路径+文件名称

代码实现:

@RequestMapping("/upImg")
    @ResponseBody
    public boolean upImg(Integer id, @RequestPart("img")MultipartFile file){
        boolean flag=true;
        try {
            file.transferTo(new File("E://SpringLearning/img.png"));
        } catch (IOException e) {
           log.error("出问题了:"+e.getMessage());
           flag=false;
        }
        return flag;
    }

使用postMan的测试方式:

【springMVC篇1】初识springMVC

 运行结果:

【springMVC篇1】初识springMVC


实际开发当中的文件上传

       考虑到:实际项目运行的环境是Linux环境,但是我们项目开发的环境是本地的windows环境,二者存在一些路径上面的差异,因此,需要设置两种环境(通过配置文件设定)

 第一步:新建一个配置文件:application-dev.yml(开发环境的配置)和

   (application-prod.yml)运行环境的配置

  【springMVC篇1】初识springMVC

  注意事项:

  开发的命名规则是:application-开发平台名称.yml; 

   运行的命名规则是:application-运行平台.yml

 黑色加粗的字体一定要内容一致


第二步:分别配置本地的文件路径(开发环境)和Linux的文件的路径(运行环境)

开发环境: 

【springMVC篇1】初识springMVC

 运行环境:

【springMVC篇1】初识springMVC

总的配置文件(application.properties)当中需要指定开发环境还是运行环境:

此处指定是开发环境(dev)

【springMVC篇1】初识springMVC


第四步:在方法当中传递一个参数:MultipartFile file,并且采用@RequestPart修饰

 需要在这个注解当中传递一个参数,这个参数为前端指定的file的名称。

并且获取文件的后缀名,在方法当中调用file.transferTo(new File("指定的文件路径"));

把文件上传到指定的路径

/**
     * 从配置文件当中读取图片的保存路径
     */
    @Value("${img.path}")
    private String imgPath;

    @RequestMapping("/upImg")
    @ResponseBody
    public boolean upImg(Integer id, @RequestPart("img")MultipartFile file){

        //获取到原始的文件名称
        String fileName=file.getOriginalFilename();
        //截取到文件名称的末尾,也就是.后面的内容
        fileName=fileName.substring(fileName.lastIndexOf("."));

        fileName= UUID.randomUUID() +fileName;
        System.out.println(imgPath+fileName);

        boolean flag=true;
        try {
            file.transferTo(new File(imgPath+fileName));
        } catch (IOException e) {
           log.error("出问题了:"+e.getMessage());
           flag=false;
        }
        return flag;
    }

2.2获取request和response对象

直接在controller的方法当中传递参数:HttpServletRequest和HttpServletResponse对象

然后就可以实现和servlet一样的功能。

/**
     * 测试request和response对象
     * 请求对象@param request
     * 响应对象 response
     * 回写的内容@return
     */
    @RequestMapping("/get")
    @ResponseBody
    public String get(HttpServletRequest request, HttpServletResponse response){
        String name=request.getParameter("name");
        String password=request.getParameter("password");
        return name+password;
    }

总结:servlet有的功能,springMVC都会有。


2.3通过注解的方式来获取cookie和header

如果想要获取cookie,那么就要在方法当中加上一个注解:@CookieValue("cookie的名称")

和@RequestHeader("header的键的名称")

代码实现:

 @RequestMapping("/getHeader")
    @ResponseBody
    public String getHeader(HttpServletRequest request,
                            @RequestHeader("User-Agent") String userAgent,
                            @CookieValue("Idea-8de7fbb3")String cookie){
        HttpSession session=request.getSession(true);
        session.setAttribute("123","123");
        return "header:"+userAgent+";"+"cookie:"+cookie;
    }

图解: (获取header信息)

【springMVC篇1】初识springMVC


2.4获取session的方式

有一种方式比较简单,直接调用request.getSession()方法获取session对象。

@RequestMapping("/getHeader")
    @ResponseBody
    public String getHeader(HttpServletRequest request){
        //直接通过request来获取session对象
        HttpSession session=request.getSession();
        return (String) session.getAttribute("hello");
    }

但是,也可以通过注解来获取session对象。

获取的方式就是:使用(@SessionAttribute("session对象的key")  String userInfo)

@RequestMapping("/getUserInfo")
    @ResponseBody
    public String getSession(@SessionAttribute("userInfo") String userInfo){
        return "value的值:"+userInfo;
    }

       这一步的含义就是:当前服务器当中只要存在一个session的对象为:(userInfo,Object),那么就会返回Object,否则就会抛出异常

       代码实现:

    @RequestMapping("/getUserInfo")

    @ResponseBody
    public String getSession(@SessionAttribute("userInfo") String userInfo){
        return "value的值:"+userInfo;
    }

       如果想避免以为不存在key而抛出异常,那么就需要把@SessionAttribute当中的required参数设置为false。

@RequestMapping("/getUserInfo")
    @ResponseBody
    public String getSession(@SessionAttribute(value = "userInfo",required = false) String userInfo){
        return "value的值:"+userInfo;
    }

2.5关于响应(方法的返回值)

默认情况下(也就是不添加@ResponseBody的情况下),方法的返回值是一个跳转的静态的页面

【springMVC篇1】初识springMVC

 但是如果在类的上面加一个注解@RestController,那么就相当于令两个注解同时作用:

@Controller+@ResponseBody

【springMVC篇1】初识springMVC


三、请求转发和重定向的区别

3.1:关键字不一样

请求转发使用的关键字是forward,重定向的关键字是redirect文章来源地址https://www.toymoban.com/news/detail-408935.html

 /**
     * 请求重定向
     * 以重定向的方式跳转到这个页面@return
     */
    @RequestMapping("/redirect")
    public String redirect(){
        return "redirect:/index.html";
    }

    /**
     * 请求转发
     * 以请求转发的方式跳转到这个页面@return
     */
    @RequestMapping("/forward")
    public String forward(){
        return "forward:/index.html";
    }

到了这里,关于【springMVC篇1】初识springMVC的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Mvc:初识SpringMvc

    编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 SpringMvc版本:5.3.1 ①SpringMVC是Spring的一种 子框架 ,它是Spring为【 展现层 | 表示层 | 表述层 | 控制层 】提供的 基于MVC设计理念 的优秀的Web框架,是目前最主流的MVC框架。

    2024年02月13日
    浏览(52)
  • 1.1 什么是云计算

    云计算(Cloud Computing)是一种通过网络提供计算资源的模式,它将计算能力、存储资源和应用程序提供给用户,无需用户直接管理底层基础设施。在过去的几年中,云计算已经迅速发展,并成为现代科技领域的一个重要概念。本篇博客将介绍云计算的概念、优势以及相关术语

    2024年02月16日
    浏览(41)
  • 1.1 什么是eBPF?(上)

        大多数介绍eBPF的文章都是用“eBPF是一种革命性的内核技术”来描绘的。这样讲一点也不夸张。因为它允许在Linux的内核中执行沙盒程序,在不改变内核源码或加载内核模块的前提下直接地,安全地,快捷地扩展内核,并改变内核的行为。可以想像在运行时,将用户空间的

    2024年02月06日
    浏览(27)
  • 什么是HTTP/2?它与HTTP/1.1相比有什么改进?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月07日
    浏览(27)
  • HTTP协议演进:为什么说HTTP/1.1的时代已经过去了

    前言   欢迎来到今天的每日一题,每日一提。昨天聊到了,HTTP 是什么。有哪些组成部分。并且最后提到了 HTTP 的一些缺点,比如:性能较低,容易导致网络拥塞和延迟,不支持服务器推送等等。设计协议的大佬们,对这样的缺点肯定是不能容忍的,所以 HTTP2 它来了。 什

    2023年04月17日
    浏览(41)
  • javaee springMVC的简单使用 jsp页面在webapp和web-inf目录下的区别

    放在webapp目录下的jsp页面可以直接通过URL访问到,放在web-inf目录下的页面,只能通过程序的转发或者重定向访问。

    2024年02月09日
    浏览(41)
  • 什么是SpringMVC以及SpringMVC框架的优点

    它是基于MVC开发模式的框架,用来优化控制器.它是Spring家族的一员.它也具备IOC和AOP. 它是一种开发模式,它是模型视图控制器的简称.所有的web应用都是基于MVC开发. 模型 模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,

    2024年02月09日
    浏览(41)
  • SpringMVC 程序开发:为什么要学SpringMVC?如何学SpringMVC?

    学习 SpirngMVC 首先我们要先知道 SpringMVC 是什么。 SpirngMVC 的全名是 Spring Web MVC ,基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称 Spring Web MVC 来自其源模块的名称(Spring-webmvc),在平常我们称它为 Spring MVC 。 上述最重要的两个关键信息: Sprin

    2024年02月12日
    浏览(50)
  • (第十一天)初识SpringMVC SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

    今天我们要来学习一下SSM框架的最后一个框架SpringMVC 一、初认SpringMVC 基本概念: ​ Spring MVC(Model-View-Controller)是一个用于构建Java Web应用程序的开源框架,它提供了一种基于MVC架构的方式来开发Web应用 。 ​ SpringMVC是Spring Framework的一部分,它是一种基于模型-视图-控制器(

    2024年02月07日
    浏览(68)
  • 什么是springmvc(介绍)

    Spring Web MVC是一种基于Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架。 视图层 业务层 持久层 ssm springmvc spring mybatis ssh2 struts2 spring hibernate 将spring-mvc.xml放入WEB-INF目录下,详细信息见配置文件中的注释。 注:关于注解扫描的优化: 在使用spring+springmvc时会存在两

    2024年01月24日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包