猿蜕变系列5——一文搞懂Controller的花式编写

2023-11-11

看过之前的执行流程,相信你对springMVC有了一定的认识。今天我们继续来学习springMVC相关的核心知识,帮助你快速起飞,完成蜕变。

     猿蜕变同样是一个原创系列文章,帮助你从一个普通的小白,开始掌握一些行业内通用的框架技术知识以及锻炼你对系统设计能力的提升,完成属于你的蜕变,更多精彩内容,敬请大家关注公主号猿人工厂,点击猿人养成获取

 

       RequestMapping是用于指定程序访问入口的annotation,代表了程序被访问的URI,掌握好它的使用,你就掌握了springMVC的程序入口。你甚至可以使用通配符的方式来指定url,比如:

@RequestMapping("/*mapping.do")

      这样就表示url中只要是以mapping.do结尾的就可以被当前方法处理。实际的开发中,这种方式不算常见,大家了解就好。

在@RequestMapping中有一个method属性,可以指定这个方法只处理get或者是post请求:

@RequestMapping(value="/handlePost.do", method = RequestMethod.POST)       public ModelAndView handlePost(HttpServletRequestreq, HttpServletResponse res) throws Exception{
                              ModelAndView mv = new ModelAndView();           mv.addObject("hello", "hello spring web mvc by handlePost");           mv.setViewName("helloByAnnotation");           return mv;}

 

我们看上面这个例子,只有使用post方法提交请求,handlePost才会被执行,因为method属性指定了方法只能被以post的方式访问。如果不使用method属性,那么无论是get还是post的方式都可以访问。

例子:只能get方式访问

@RequestMapping(value="/handleGet.do", method = RequestMethod.GET)       public ModelAndView handleGet(HttpServletRequestreq, HttpServletResponse res) throws Exception{
                              ModelAndView mv = new ModelAndView();           mv.addObject("hello", "hello spring web mvc by handleGet");           mv.setViewName("helloByAnnotation");           return mv;        }

 

           RequestMapping还提供了params属性来限制请求中的参数。

 

@RequestMapping(value="/requireParama.do", params={"hello" , "name"})       public ModelAndViewrequireParama(HttpServletRequest req, HttpServletResponse res) throws Exception {
                              ModelAndView mv = new ModelAndView();           mv.addObject("hello", "hello spring web mvc by helloAnnotation");           mv.setViewName("helloByAnnotation");           return mv;        }

 

要求请求中必须有参数名为hello和name的参数。

@RequestMapping(value="/requireParama2.do", params={"!hello" , "name=pz"})       public ModelAndView requireParama2(HttpServletRequestreq, HttpServletResponse res) throws Exception{
                              ModelAndView mv = new ModelAndView();           mv.addObject("hello", "hello spring web mvc by helloAnnotation" + req.getParameter("name"));           mv.setViewName("helloByAnnotation");           return mv;        }

 

要求请求中不能出现参数名为hello,但是必须出现参数名为name,并且参数name的值还必须为”pz”.

使用基本类型接收表单参数

我们在开发中会遇到很多表单提交的请求,最常见的就是用户注册页面,我们通过下面这个例子,学习下怎样在Spring MVC中获取表单提交的参数。

示例:

我们首先编写一个jsp页面:form.jsp(注意:直接放在webapp目录下,因为我们需要直接访问,这样处理比较简单)

 

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"isELIgnored="false"%><html><head><title>spring form表单样例</title></head><body>   <form action="/submitForm.do"method=post>    <lable>姓名:</lable>      <input type="text"name="name" id="name"/><br />    <lable>电话:</lable>     <input type="text"name="phone" id="phone"/><br />      <lable>年龄:</lable>     <input type="text"name="age" id="age"/><br />      <input type="submit"value="提交"id="submit" /><br />   </form></body></html>

 

然后,编写一个controller来接收表单提交的参数:

package com.pz.web.study.springmvc.controller; import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;  @Controllerpublicclass FormControllerDemo {
               @RequestMapping("/submitForm.do")       public ModelAndView submitForm(String name, Stringphone) throws Exception {
                              ModelAndView mv = new ModelAndView();           mv.addObject("name", name);           mv.addObject("phone", phone);           mv.setViewName("showForm");           return mv;        } }

 

再编写一个jsp页面(showForm.jsp)用于展示从表单获取的数据:

<%@ page language="java" contentType="text/html;charset=utf-8"    pageEncoding="utf-8"isELIgnored="false"%><html><head><title>spring form表单样例</title></head><body>    <lable>姓名:</lable>      ${name} <br />    <lable>电话:</lable>      ${phone}<br /></
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

猿蜕变系列5——一文搞懂Controller的花式编写 的相关文章

  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 如何在 Antlr4 中为零参数函数编写语法

    我的函数具有参数语法 如下面的词法分析器和解析器 MyFunctionsLexer g4 lexer grammar MyFunctionsLexer FUNCTION FUNCTION NAME A Za z0 9 DOT COMMA L
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • Spring Boot自动装配存储库始终为空[重复]

    这个问题在这里已经有答案了 每次我进入我的服务类时 存储库似乎都没有自动连接 因为它不断抛出 NullPointerException 谁能帮我检查一下我缺少什么吗 这是我的代码 演示应用程序 java package com exampl
  • 身份验证在 Spring Boot 1.5.2 和 Oauth2 中不起作用

    我正在使用带有 spring boot 1 5 2 RELEASE 的 Oauth2 当我尝试重写 ResourceServerConfigurerAdapter 类的配置方法时 它给了我一个编译错误 但这在 Spring boot 1 2
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • java程序配置dns后超时_Android笔记之解决OkHttp解析dns超时时间无法设置的问题

    问题 使用OkHttp 设备切换路由后 访问网络出现长时间无响应 很久以后才抛出UnknownHostException 这明显不是我们想要的 我们设置的connectTimeout属性似乎对dns的解析不起作用 如何解决 我们先看看OkH
  • FreeRTOS软件定时器

    目录 说明 一 定时器简介 1 1 定时器 1 2 软件定时器 1 3 硬件定时器 1 4 FreeRTOS软件定时器 1 5 软件定时器服务任务作用 1 6 软件定时器的命令队列 1 7 软件定时器相关配置 1 8 单次定时器和周期定时器
  • 基础算法题——折线分割平面(规律)

    题目 测试平台 我们看到过很多直线分割平面的题目 今天的这个题目稍微有些变化 我们要求的是n条折线分割平面的最大数目 比如 一条折线可以将平面分成两部分 两条折线最多可以将平面分成7部分 具体如下所示 Input 输入数据的第一行是一个整数
  • C#泛型类的定义及使用

    C 语言中泛型类的定义与泛型方法类似 是在泛型类的名称后面加上
  • Android Studio怎么打包成APK

    1 确定软件版本 将项目切换到Project 打开app目录下的build gradle文件 versionCode是app的大版本好 为数值类型 默认为1 改成2 versionName是app的具体版本号 为际符串类型 默认为1 0 改
  • Qt--子线程访问主线程

    一 子线程访问主线程数据和方法 原文 Qt C 子线程访问主线程数据和方法 lccsuse 博客园 报错widgets must be creat in the GUI thread 子线程是不能访问GUI对象 主要 Widget cpp
  • 11.最小栈

    题目 思路 维护两个栈 一个栈正常push元素 另一个栈维护每个元素为栈顶元素时的最小栈元素值 stack1 push x val x lt minStack top x minStack top 题解 class MinStack sta
  • MySQL 中的时间戳和日期时间转换函数

    在平时开发中 经常会遇到一些时间范围的查询 比如查询近 7 天内注册的新用户 如果表中存储的是 timestamp 类型 那么开发时 查询数据可能看到的是一个整形的时间戳 不便于阅读 怎么能让查询的结果集中的时间显示正常可读的时间格式呢 答
  • 迭代器c++实现

    迭代器 Iterator 模式的定义 提供一个对象来顺序访问聚合对象中的一系列数据 而不暴露聚合对象的内部表示 class Iterator public Iterator Iterator virtual std string First
  • centos卸载MySQL8,吐血整理

    一 内存与线程 1 内存结构 内存是计算机的重要部件之一 它是外存与CPU进行沟通的桥梁 计算机中所有程序的运行都在内存中进行 内存性能的强弱影响计算机整体发挥的水平 JVM的内存结构规定Java程序在执行时内存的申请 划分 使用 回收的管
  • Java中wait和sleep方法的区别

    两者的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁 而wait方法释放了锁 使得其他线程可以使用同步控制块或者方法 锁代码块和方法锁 wait notify和notifyAll只能在同步控制
  • 探索Java8——用Optional取代null

    文章目录 为缺失值建模 采用防御式检查减少 NullPointerException Optional类入门 应用 Optional 的几种模式 为缺失值建模 假设你需要处理下面这样的嵌套对象 这是一个拥有汽车及汽车保险的客户 public
  • pyqt和ros结合使用接受相机和点云消息并展示(附代码)

    代码是 ROS 节点的 Python QT脚本 用于订阅 turtle1 cmd vel tracking image 和 test pointcloud 话题 脚本首先通过 ps 命令检查是否已启动 ROS 主节点 如果没有则启动一个新的
  • Kafka事务提交位点失败

    记一次kafka事务提交失败 线上业务报错 2019 10 29 20 27 48 621 l fin ycb sync server1 toc pre ali dm org springframework kafka KafkaListe
  • geopandas安装方法

    依次按顺序安装 在这下载依赖包 https www lfd uci edu gohlke pythonlibs 然后逐个安装 1 安装gdal pip install C Users lenovo Downloads GDAL 3 4 3
  • ajax调用echarts,ajax和echarts第一次相遇

    ajax和echarts渲染基础 对于动态数据的展示 数据库内容的实时展示 如何能快速高校的在前端图表中展示呢 今天 小柯君带你简单体会一下ajax的神奇可妙之处 要加油啊 各位君 一 echarts简单案例 1 先导入你下载好的echar
  • 报错类型提示:HEAP CORRUPTION DETECTED:after Nomal block

    上次做实验遇到了这个报错 足足调了好久 最后上网查了才知道为什么 注释处的代码就原本发生错误的代码 原因是你使用了你没有调用的空间 然后你用delete回收的时候回收了你未调用的空间 所以报错
  • 小规模票表比对不通过_增值税小规模纳税人申报比对异常怎么办?这里有最新处理流程...

    小规模纳税人的申报比对异常如何提示 应该到哪个科 所 进行处理 该科 所 在哪里 赶紧往下看吧 猴嗨森 发送报表后 提示 一窗式比对不通过 怎么办 根据异常事项提供相关证明材料到主管税务机关办理 牛给力 猴嗨森 需要预约号处理小规模纳税人申
  • Servlet 执行原理和API 详情

    目录 1 Serlvet 运行原理 1 1 Tomcat 执行流程 a Tomcat 初始化流程 b Tomcat处理请求流程 c Servlet 中 service 法的实现 2 Servlet API详解 2 1 HttpServlet
  • 猿蜕变系列5——一文搞懂Controller的花式编写

    看过之前的执行流程 相信你对springMVC有了一定的认识 今天我们继续来学习springMVC相关的核心知识 帮助你快速起飞 完成蜕变 猿蜕变同样是一个原创系列文章 帮助你从一个普通的小白 开始掌握一些行业内通用的框架技术知识以及锻炼你