• SpringMVC 02: SpringMVC响应get和post请求 + 5种获取前端数据的方式


    响应get和post请求

    • SpringMVC中使用@RequestMapping注解完成对get请求和post请求的响应

    • 项目结构和配置文件与SpringMVC博客集中的"SpringMVC 01"保持一致

    • 在webapp/admin目录下新建2个jsp文件,这两个jsp文件分别作为相应请求的响应页面

    • mainGet.jsp

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

    main......page.....get......

    • mainPost.jsp
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        mainPost.jsp
    
    
    

    main......page.....post......

    • 新增控制器:ReqAction,在@RequestMapping注解后可以跟两个参数
    • value参数负责对应请求路径,只有正确请求路径下的目标action方法,才可能被调用
    • method参数负责指定该action方法负责响应的请求类型
    • 仅是请求路径对应上并不可以调用action方法,必须请求路径和请求方式都对上,相应的action方法才会被调用
    package com.example.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @Controller
    public class ReqAction {
        @RequestMapping(value = "/req", method = RequestMethod.GET)
        public String reqGet(){
            System.out.println("获取到get请求,服务器被访问......");
            return "mainGet";
        }
    
        @RequestMapping(value = "/req", method = RequestMethod.POST)
        public String reqPost(){
            System.out.println("获取到post请求,服务器被访问......");
            return "mainPost";
        }
    }
    
    • webapp/index.jsp如下,以form表单的形式,分别发送get和post请求
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        index.jsp
    
    
    

    分别用get和post方式访问服务器

    "${pageContext.request.contextPath}/req.action" method="get/post"> "submit" value="get/post方式提交">
    • 部署并启动tomcat测试,第一次用表单发送get请求,第二次用表单发送post请求

    • 表单发送get请求时,网站首页(left),请求到的页面(mild),控制台输出(right)如下

    image

    • 表单发送post请求时,网站首页(left),请求到的页面(mild),控制台输出(right)如下

    image

    5种获取前端数据的方式

    • 1.直接注入获取
    • 2.实体类封装获取
    • 3.动态占位符获取
    • 4.@RequestParam注解方式获取
    • 5.手工获取数据
    • 在webapp/admin目录下新建dataSubmit.jsp,作为5种请求方式的响应结果页面
    • dataSubmit.jsp
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        dataSubmit.jsp
    
    
    

    dataSubmit.........page

    • webapp/index.jsp如下,是网站的首页,包含5种请求方式的前端显示
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        index.jsp
    
    
        
    

    SpringMVC中获取前端提交数据的5种方式


    方式1:单个数据的获取方式

    "${pageContext.request.contextPath}/dataSubmit/submit01.action" method="get"> 姓名:"text" name="name">
    年龄:"text" name="age">
    "submit" value="提交">

    方式2:封装成实体类进行获取

    "${pageContext.request.contextPath}/dataSubmit/submit02.action" method="get"> 姓名:"text" name="name">
    年龄:"text" name="age">
    "submit" value="提交">

    方式3:动态占位符获取提交的数据(只可以用在超链接或地址栏)

    "${pageContext.request.contextPath}/dataSubmit/submit03/xun/22.action">动态占位符获取提交数据

    方式4:参数名称不一致时接收数据

    "${pageContext.request.contextPath}/dataSubmit/submit04.action" method="get"> 姓名:"text" name="name">
    年龄:"text" name="age">
    "submit" value="提交">

    方式5:手工获取前端提交的数据

    "${pageContext.request.contextPath}/dataSubmit/submit05.action" method="get"> 姓名:"text" name="name">
    年龄:"text" name="age">
    "submit" value="提交">
    • 新增SpringMVC控制器:DataSubmit,含有对前端5种请求方式的5种响应处理
    package com.example.controller;
    
    import com.example.pojo.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import javax.servlet.http.HttpServletRequest;
    
    @Controller
    @RequestMapping("/dataSubmit")
    public class DataSubmit {
    
        //直接注入获取
        @RequestMapping("/submit01")
        public String dataSubmit01(String name, int age){//前端提交的数据,通过SpringMVC框架依次分别注入到目标方法的参数中,且自动完成了类型转换
            System.out.println("姓名: " + name + " 年龄: " + age);
            return "dataSubmit";
        }
    
        //封装成实体类来获取
        @RequestMapping("/submit02")
        public String dataSubmit02(User user){//SpringMVC自动创建实体类对象,并将前端提交的数据,注入到User实体类中的对应属性中
            System.out.println(user);
            return "dataSubmit";
        }
    
        //动态占位符获取数据
        @RequestMapping("/submit03/{name}/{age}")//目标路径后用大括号接住前端随着地址携带来的数据,括号用斜杠分割开,括号内名称和@PathVariable后面的注解名一致,将携带的数据注入给目标方法中的对应变量
        public String dataSubmit03(
                @PathVariable("name")
                String name,
                @PathVariable("age")
                int age){
            System.out.println("姓名: " + name + " 年龄: " + age);
            return "dataSubmit";
        }
    
        //参数名称不一致时获取数据
        @RequestMapping("/submit04")
        public String dataSubmit04(
                @RequestParam("name")//若前端数据名和后端变量名不一致,则可以将@RequestParam注解名和前端传来的数据名称保持一致,这样将前端数据传给注解标识的变量
                String uname,
                @RequestParam("age")
                int uage){
            System.out.println("姓名: " + uname + " 年龄: " + uage);
            return "dataSubmit";
        }
    
        //手工获取前端提交的数据
        @RequestMapping("/submit05")
        public String dataSubmit05(HttpServletRequest request){//就是传统servlet开发时获取前端数据的方式,只不过这里HttpServletRequest实例对象由SpringMVC框架自动创建
            String name = request.getParameter("name");
            int age = Integer.parseInt(request.getParameter("age"));
            System.out.println("姓名: " + name + " 年龄: " + age);
            return "dataSubmit";
        }
    }
    
    • 部署tomcat,并启动测试
    • 前端页面,一次输入数据,提交测试即可

    image

    • 测试结果不再赘述
  • 相关阅读:
    Aspose.Email 22.7 for Java Crack
    《Relation of the Relations A New Paradigm of the Relation Extraction Problem》论文阅读笔记
    字符串相关算法操作
    [图像处理] 计算n条线段的交点个数
    计算机毕业设计Java校园面包超市系统(源码+系统+mysql数据库+Lw文档)
    小知识(5) el-table行样式失效问题
    ivew button 使用自定义图标
    【如何学习CAN总线测试】——CAN数据链路层测试
    猿人学第16题js逆向-window蜜罐
    shell-流程控制case语句
  • 原文地址:https://www.cnblogs.com/nefu-wangxun/p/16644632.html