Spring MVC——Spring MVC(2)

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

1.参数接收

Springmvc中,接收页面提交的数据是通过方法形参来接收:

  • 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参

  • springmvc接收的参数都是String类型,所以spirngmvc提供了很多converter(转换器)在特殊情况下需要自定义converter,如对日期数据

1.1.基本数据类型

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    
        @RequestMapping("/findAccount5")
        public String findAccount5(String username,Model model){
            model.addAttribute("msg", username);
            return "success";
        }
        
        @RequestMapping("/findAccount6")
        public String findAccount6(String username,Integer age,Model model){
            model.addAttribute("msg", username+" "+age);
            return "success";
        }
    }
    
  • 在index.jsp里面定义超链接

    <a href="/account/findAccount5?username=eric">参数接收-基本数据类型</a>
    <a href="/account/findAccount6?username=eric&age=22">参数接收-多个基本数据类型</a>
    

1.2.POJO类型参数绑定

  • 编写pojo

    public class Account implements Serializable {
        private Integer id;
        private String name;
        private Float money;
        private Address address;
       //省略get set toString方法
     }
    
    public class Address implements Serializable {
        private String provinceName;
        private String cityName;
         //省略get set toString方法
     }
    
  • 编写controller

    package com.wt.controller;
    
    import com.wt.pojo.Account;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    @RequestMapping("/account")
    public class AccountController {
    
        @RequestMapping("/saveAccount")
        public String saveAccount(Account account, Model model){
            model.addAttribute("msg", account);
            return "success";
        }
    }
    
  • 在index.jsp里面添加表单

    <form action="account/saveAccount" method="post">
        账户名称:<input type="text" name="name"><br/>
        账户金额:<input type="text" name="money"><br/>
        账户省份:<input type="text" name="address.provinceName"><br/>
        账户城市:<input type="text" name="address.cityName"><br/>
        <input type="submit" value="保存">
    </form>
    

1.3.restful风格

  • restful概述:

(Representational State Transfer,表现层状态转移):URL定位资源时,用HTTP动词(GET,POST,DELETE,PUT)描述操作

1.3.1.restful风格URL

  • 在Restful之前的操作:
    http://127.0.0.1/user/query?id=1 根据用户id查询用户数据
    http://127.0.0.1/user/save 新增用户
    http://127.0.0.1/user/update?id=1 修改用户信息
    http://127.0.0.1/user/delete?id=1 删除用户信息

  • RESTful用法:
    http://127.0.0.1/user/1 GET 根据用户id查询用户数据
    http://127.0.0.1/user POST 新增用户
    http://127.0.0.1/user PUT 修改用户信息
    http://127.0.0.1/user/1 DELETE 删除用户信息

  • RESTful总结:

    Restful风格就是请求url统一,根据不同的请求方式,请求不同的后台方法。如果需要携带参数,在url上使用/{}占位符。

1.3.2.@PathVariable

  • 作用

    用于绑定url中的占位符。例如:/account/{id},这个{id}就是url占位符

    url支持占位符是spring3.0之后加入的,是springmvc支持rest风格url的重要标志。

  • 描述需要使用指定的请求方式来请求该方法

    @Controller
    @RequestMapping("/account")
    public class AccountController {
        
    	@RequestMapping(value="/findAccount7/{id}")
        public String findAccount11(@PathVariable Integer id, Model model){
            model.addAttribute("msg", id);
            return "success";
        }
    }
    
  • 测试:在index.jsp里面定义超链接

    <a href="/account/findAccount7/123">restful传参</a><br>
    

1.4.请求参数乱码问题

1.4.1.POST请求方式解决乱码问题

  • 在web.xml里面设置编码过滤器

    <filter>
      <filter-name>CharacterEncodingFilter</filter-name>
      <filter-class>
        org.springframework.web.filter.CharacterEncodingFilter
      </filter-class>
      <!-- 设置过滤器中的属性值 -->
      <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
    </filter>
    <!-- 过滤所有请求 -->
    <filter-mapping>
      <filter-name>CharacterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  • 测试

    Spring MVC——Spring MVC(2),Spring MVC,spring,mvc,java

1.4.2.GET请求方式解决乱码问题

  • tomcat对GET和POST请求处理方式是不同的,GET请求的编码问题,要改tomcat的 配置信息,如下:

    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <port>8080</port>
            <path>/</path>
            <!--按UTF-8进行编码-->
            <uriEncoding>UTF-8</uriEncoding>
        </configuration>
    </plugin>
    

1.5.自定义类型转换器

1.5.1.使用场景

  • 在index.jsp里面添加日期类型

        <form action="account/saveAccount" method="post">
          账户名称:<input type="text" name="name"><br/>
          账户金额:<input type="text" name="money"><br/>
          账户省份:<input type="text" name="address.provinceName"><br/>
          账户城市:<input type="text" name="address.cityName"><br/>
          开户日期:<input type="text" name="date"><br/>
          <input type="submit" value="保存">
        </form>
    
  • 在pojo里面添加日期类型

    public class Account implements Serializable {
        private Integer id;
        private String name;
        private Float money;
        private Address address;
        //添加日期类型
        private Date date;
        //省略get set toString方法
    }    
    
  • 测试

    Spring MVC——Spring MVC(2),Spring MVC,spring,mvc,java

    Spring MVC——Spring MVC(2),Spring MVC,spring,mvc,java

  • 原因

    我们前台传递的是字符串类型的参数,但是后台使用的是Date类型接收的。我们期望springmvc可以帮我们做数据类型的自动转换,显然没有做,所以我们需要自己自定义类型转换器。

1.5.2.自定义类型转换器

  1. Converter接口说明:

    Spring MVC——Spring MVC(2),Spring MVC,spring,mvc,java

  2. 定义一个类,实现Converter接口

    public class DateConverter implements Converter<String, Date> {
        @Override
        public Date convert(String source) {
            try {
                DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                return format.parse(source);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
  3. 在 springmvc.xml配置文件中配置类型转换器

    	<!--开启springmvc注解支持-->
        <mvc:annotation-driven conversion-service="cs"></mvc:annotation-driven>
        <!-- 配置类型转换器工厂 -->
        <bean id="cs"
              class="org.springframework.context.support.ConversionServiceFactoryBean">
            <!-- 给工厂注入一个新的类型转换器 -->
            <property name="converters">
                <set>
                    <!-- 配置自定义类型转换器 -->
                    <bean class="com.wt.converter.DateConverter"></bean>
                </set>
            </property>
        </bean>
    

1.6.使用ServletAPI接收参数

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    
        @RequestMapping("/findAccount8")
        public String findAccount8(HttpServletRequest request, 
                                   HttpServletResponse response){
            String username = request.getParameter("name");
            String age = request.getParameter("age");
            request.setAttribute("msg",username+" "+age);
            return "success";
        }
    }
    
  • 在index.jsp里面定义超链接

    <a href="/account/findAccount8?username=eric&age=19">Servlet接收参数</a>
    

2.数据传递

2.1.ModelAndView传递

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    
        //也可以不创建ModelAndView,直接在参数中指定
        @RequestMapping(value = "/findAccount9")
        public ModelAndView findAccount9(ModelAndView mv) {
            mv.addObject("msg", "欢迎你 springmvc");
            mv.setViewName("success");
            return mv;
        }
    }
    
  • 在index.jsp里面定义超链接

    <a href="/account/findAccount9">ModelAndView参数传递</a>
    

2.2.Model传递

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    
        @RequestMapping(value = "/findAccount10")
        public String findAccount10(Model model) {
            model.addAttribute("msg", "欢迎你 springmvc");
            return "success";
        }
    }
    
  • 在index.jsp里面定义超链接

    <a href="/account/findAccount10">Model参数传递</a>
    

2.3.ServletAPI传递

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    
        @RequestMapping("/findAccount11")
        public String findAccount11(HttpServletRequest request, 
                                    HttpServletResponse response){
            request.setAttribute("msg","欢迎你 springmvc");
            return "success";
        }
    }
    
  • 在index.jsp里面定义超链接

    <a href="/account/findAccount11">ServletAPI传递</a>
    

3.JSON数据处理

3.1.添加json依赖

springmvc 默认使用jackson作为json类库,不需要修改applicationContext-servlet.xml任何配置,只需引入以下类库springmvc就可以处理json数据:

<!--spring-json依赖-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>

3.2.注解

  • @RequestBody:作用是接收前端ajax传递给后端的json字符串,并将json格式的数据转为java对象
  • @ResponseBody:作用是将java对象转为json格式的数据传递给前台ajax

3.3.案例

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    
        @RequestMapping("/saveAccount2")
        @ResponseBody
        public Map saveAccount2(@RequestBody Account account){
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("status",200);
            map.put("msg",account);
            return map;
        }
    }
    
  • 在index.jsp里面定义ajax请求

    • 添加按钮

      <input type="button" value="测试ajax请求json和响应json" id="testJson"/>
      
    • 引入js库文件

      <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
      
    • 编写ajax代码

        <script type="text/javascript">
          $(function(){
            $("#testJson").click(function(){
              $.ajax({
                type:"post",
                url:"/account/saveAccount2",
                contentType:"application/json;charset=UTF-8",
                data:'{"id":1,"name":"张二狗","money":999.0}',
                success:function(data){
                  if(data.status == 200){
                    alert(data.msg.name);
                    alert(data.msg.money);
                  }
                }
              })
            });
          })
        </script>
      
  • 测试

    Spring MVC——Spring MVC(2),Spring MVC,spring,mvc,java文章来源地址https://www.toymoban.com/news/detail-806578.html

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

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

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

相关文章

  • java spring MVC之RESTful快速开发

    我这里有个一springboot项目 我在启动类同目录下创建了一个目录 目录名叫 controller 里面有一个UserController diam结构是这样的 这是一个基础的REST风格风格开发 但其实 我们可以很大程度的简化 这里 我先启动项目 然后用Postman测试 这些都是可以正常访问 和 调用返回的 确认无误之

    2024年02月05日
    浏览(42)
  • 【Java EE】初识Spring Web MVC

    Spring Web MVC 是 基于 Servlet API 构建的原始 Web 框架 ,从⼀开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为)Spring MVC). Servlet是⼀种实现动态⻚⾯的技术.准确来讲Servlet是⼀套Java Web 开发的规范,或者说是⼀套Java Web 开发的

    2024年04月10日
    浏览(56)
  • 【Java 高阶】一文精通 Spring MVC - 基础概念(一)

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 高阶 🙉八股文专题:剑指大厂,手撕

    2024年02月11日
    浏览(45)
  • 【Java 高阶】一文精通 Spring MVC - 转发重定向(四)

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 高阶 🙉八股文专题:剑指大厂,手撕

    2024年02月11日
    浏览(49)
  • 网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(四)对战模块

    匹配成功返回数据 1. message消息类别 2. ok 3. reson 4. 房间id 5. 双方id 6.白色玩家 一个类记录房间中的信息(房间id,两个用户id,是否为白棋) 信息提示框 处理匹配API 初始化游戏(棋盘,下一个棋子,接受棋子处理响应,判断是否结束) 1. 客户端连接到游戏房间后, 服务器返回

    2024年02月13日
    浏览(52)
  • 探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty

    🎉欢迎来到Java面试技巧专栏~探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:Java面试技巧 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习

    2024年02月08日
    浏览(59)
  • Java EE 突击 11 - Spring MVC 程序开发 (2)

    这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领大家进行环境的配置 , 让大家真正用好

    2024年02月13日
    浏览(74)
  • Java EE 突击 10 - Spring MVC 程序开发 (1)

    这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领大家进行环境的配置 , 让大家真正用好

    2024年02月13日
    浏览(49)
  • Java 新手如何使用Spring MVC 中的查询字符串和查询参数

    目录 前言   什么是查询字符串和查询参数? Spring MVC中的查询参数  处理可选参数 处理多个值 处理查询参数的默认值 处理查询字符串 示例:创建一个RESTful服务  总结 作者简介:  懒大王敲代码,计算机专业应届生 今天给大家聊聊Java 新手如何使用Spring MVC 中的查询字符串

    2024年02月03日
    浏览(49)
  • Spring MVC——Spring MVC(2)

    Springmvc中,接收页面提交的数据是通过方法形参来接收: 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参 springmvc接收的参数都是String类型,所以spirngmvc提供了很多converter(转换器)在特殊情况下需要自定义converter,如对日期数据 编写controller 在

    2024年01月20日
    浏览(79)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包