百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

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

bigegpt 2024-09-03 10:58 3 浏览

响应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" %>
<html>
<head>
    <title>mainGet.jsp</title>
</head>
<body>
<h2>main......page.....get......</h2>
</body>
</html>
  • mainPost.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>mainPost.jsp</title>
</head>
<body>
<h2>main......page.....post......</h2>
</body>
</html>
  • 新增控制器: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" %>
<html>
<head>
    <title>index.jsp</title>
</head>
<body>
<h2>分别用get和post方式访问服务器</h2>
<form action="${pageContext.request.contextPath}/req.action" method="get/post">
    <input type="submit" value="get/post方式提交">
</form>
</body>
</html>
  • 部署并启动tomcat测试,第一次用表单发送get请求,第二次用表单发送post请求
  • 表单发送get请求时,网站首页(left),请求到的页面(mild),控制台输出(right)如下
  • 表单发送post请求时,网站首页(left),请求到的页面(mild),控制台输出(right)如下

5种获取前端数据的方式

  • 1.直接注入获取
  • 2.实体类封装获取
  • 3.动态占位符获取
  • 4.@RequestParam注解方式获取
  • 5.手工获取数据
  • 在webapp/admin目录下新建dataSubmit.jsp,作为5种请求方式的响应结果页面
  • dataSubmit.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>dataSubmit.jsp</title>
</head>
<body>
<h2>dataSubmit.........page</h2>
</body>
</html>
  • webapp/index.jsp如下,是网站的首页,包含5种请求方式的前端显示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>index.jsp</title>
</head>
<body>
    
<h2>SpringMVC中获取前端提交数据的5种方式</h2>
<hr>
    
<h2>方式1:单个数据的获取方式</h2>
<form action="${pageContext.request.contextPath}/dataSubmit/submit01.action" method="get">
    姓名:<input type="text" name="name"><br>
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="提交">
</form>
    
<h2>方式2:封装成实体类进行获取</h2>
<form action="${pageContext.request.contextPath}/dataSubmit/submit02.action" method="get">
    姓名:<input type="text" name="name"><br>
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="提交">
</form>
    
<h2>方式3:动态占位符获取提交的数据(只可以用在超链接或地址栏)</h2>
<!-- 携带的数据放在.action之前,用斜杠分隔开-->
<a href="${pageContext.request.contextPath}/dataSubmit/submit03/xun/22.action">动态占位符获取提交数据</a>
    
<h2>方式4:参数名称不一致时接收数据</h2>
<form action="${pageContext.request.contextPath}/dataSubmit/submit04.action" method="get">
    姓名:<input type="text" name="name"><br>
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="提交">
</form>
    
<h2>方式5:手工获取前端提交的数据</h2>
<form action="${pageContext.request.contextPath}/dataSubmit/submit05.action" method="get">
    姓名:<input type="text" name="name"><br>
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>
  • 新增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,并启动测试
  • 前端页面,一次输入数据,提交测试即可
  • 测试结果不再赘述

相关推荐

当Frida来“敲”门(frida是什么)

0x1渗透测试瓶颈目前,碰到越来越多的大客户都会将核心资产业务集中在统一的APP上,或者对自己比较重要的APP,如自己的主业务,办公APP进行加壳,流量加密,投入了很多精力在移动端的防护上。而现在挖...

服务端性能测试实战3-性能测试脚本开发

前言在前面的两篇文章中,我们分别介绍了性能测试的理论知识以及性能测试计划制定,本篇文章将重点介绍性能测试脚本开发。脚本开发将分为两个阶段:阶段一:了解各个接口的入参、出参,使用Python代码模拟前端...

Springboot整合Apache Ftpserver拓展功能及业务讲解(三)

今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。架构开源地址:https://gitee.com/msxyspringboot整合Ftpserver参...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:fromCrypto.SignatureimportPKCS1_v1_5如果导包报错:ImportError:Nomodulenamed'Crypt...

Python 3 加密简介(python des加密解密)

Python3的标准库中是没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto和cryptography上,我...

怎样从零开始编译一个魔兽世界开源服务端Windows

第二章:编译和安装我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看)编译服务端:在D盘新建一个文件夹...

附1-Conda部署安装及基本使用(conda安装教程)

Windows环境安装安装介质下载下载地址:https://www.anaconda.com/products/individual安装Anaconda安装时,选择自定义安装,选择自定义安装路径:配置...

如何配置全世界最小的 MySQL 服务器

配置全世界最小的MySQL服务器——如何在一块IntelEdison为控制板上安装一个MySQL服务器。介绍在我最近的一篇博文中,物联网,消息以及MySQL,我展示了如果Partic...

如何使用Github Action来自动化编译PolarDB-PG数据库

随着PolarDB在国产数据库领域荣膺桂冠并持续获得广泛认可,越来越多的学生和技术爱好者开始关注并涉足这款由阿里巴巴集团倾力打造且性能卓越的关系型云原生数据库。有很多同学想要上手尝试,却卡在了编译数据...

面向NDK开发者的Android 7.0变更(ndk android.mk)

订阅Google官方微信公众号:谷歌开发者。与谷歌一起创造未来!受Android平台其他改进的影响,为了方便加载本机代码,AndroidM和N中的动态链接器对编写整洁且跨平台兼容的本机...

信创改造--人大金仓(Kingbase)数据库安装、备份恢复的问题纪要

问题一:在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录,您可...

OpenSSH 安全漏洞,修补操作一手掌握

1.漏洞概述近日,国家信息安全漏洞库(CNNVD)收到关于OpenSSH安全漏洞(CNNVD-202407-017、CVE-2024-6387)情况的报送。攻击者可以利用该漏洞在无需认证的情况下,通...

Linux:lsof命令详解(linux lsof命令详解)

介绍欢迎来到这篇博客。在这篇博客中,我们将学习Unix/Linux系统上的lsof命令行工具。命令行工具是您使用CLI(命令行界面)而不是GUI(图形用户界面)运行的程序或工具。lsoflsof代表&...

幻隐说固态第一期:固态硬盘接口类别

前排声明所有信息来源于网络收集,如有错误请评论区指出更正。废话不多说,目前固态硬盘接口按速度由慢到快分有这几类:SATA、mSATA、SATAExpress、PCI-E、m.2、u.2。下面我们来...

新品轰炸 影驰SSD多款产品登Computex

分享泡泡网SSD固态硬盘频道6月6日台北电脑展作为全球第二、亚洲最大的3C/IT产业链专业展,吸引了众多IT厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...