处理器方法的参数

news2024/11/26 14:40:08
处理器方法的参数:

        处理器方法可以包含以下四类参数,这些参数会在系统调用时由系统自动赋值,即程序员可在方法内直接使用:

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • 请求中所携带的请求参数
控制器方法:

前面三个参数怎么用呢,在控制器方法的形参列表中定义就可以了,springmvc框架会自动赋值:

@Controller
@RequestMapping("/test")
public class MyController2 {
    @RequestMapping("/first.do")
    public ModelAndView doFirst(HttpServletRequest request,
                                HttpServletResponse response,
                                HttpSession session){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","=====欢迎使用springmvc做web开发======" + request.getParameter("name")+request.getParameter("age"));
        mv.addObject("fun","执行的是doFirst方法");
        mv.setViewName("other");
        return mv;

    }
}
 index.jsp:
   <form action = "test/first.do" method = "POST">
        姓名:<input type = "text" name = "name"/>
        年龄:<input type = "text" name = "age"/>
        <input type = "submit" value = "注册"/>
    </form>
测试结果: 

                   

用户提交的数据: 
逐个接收:

1、当处理器(控制器)方法的形参名和请求中参数名一致时,同名的请求参数值给同名的形参

 <form action = "test/first.do" method = "POST">
        姓名:<input type = "text" name = "name"/>
        年龄:<input type = "text" name = "age"/>
        <input type = "submit" value = "注册"/>
 </form>
@Controller
@RequestMapping("/test")
public class MyController2 {
    @RequestMapping("/first.do")
    public ModelAndView doFirst(String name, int age){
        ModelAndView mv = new ModelAndView();
        mv.addObject("myName",name );
        mv.addObject("myAge",age);
        mv.setViewName("show2");
        return mv;

    }
}

show2.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <h3>当处理器(控制器)方法的形参名和请求中参数名一致时,同名的请求参数值给同名的形参</h3>
    <h3>myName数据:${myName}</h3>
    <h3>myAge数据:${myAge}</h3>
</head>
<body>

</body>
</html>

                 

1、使用request对象接收请求参数:
        String strName = request.getParameter("name");
        String strAge = request.getParameter( "age");
2、springmvc框架通过 Dispatcherservlet 调用 MyController的doFirst ()方法,调用方法时,按名称对应,把接收的参数赋值给形参 
        框架会提供类型转换的功能,能把string转为 int ,long ,float , double等类型:

                     doFirst (strName , Integer. valueOf(strAge) )

3、现在有个问题,如果age不赋值呢:

        400状态码是客户端错误,表示提交请求参数过程中,发生了问题,无法正常接收,出现400的情况一般是你发请求的过程中提交的这些数据和控制器方法的形参对应不上 

        因为age不写的话就是一个空字符串,框架在进行转换的时候会报错:

                String strAge = request.getParameter( "age"); 

                doFirst (strName , Integer. valueOf(strAge) )

        年龄乱填,例如abc,也会报错,无法转换成Integer类型! 

        你可以改为Integer类型,这样就可以接受空字符串,当然,字符串和浮点型仍然接受不了,可以在前端用正则表达式做筛选:


如果你觉得这种限制很麻烦,你可以改为String,因为所有参数在接收的时候原值都是字符串: 

            String strName = request.getParameter("name");
            String strAge = request.getParameter( "age"); //使用request对象接收请求参数:

中文乱码:
 <form action = "test/first.do" method = "POST">
        姓名:<input type = "text" name = "name"/>
        年龄:<input type = "text" name = "age"/>
        <input type = "submit" value = "注册"/>
    </form>

         POST请求方式提交请求参数时会出现中文乱码问题:

                

        但是GET请求方式提交请求参数时不会出现:

   <form action = "test/first.do" method = "get">
        姓名:<input type = "text" name = "name"/>
        年龄:<input type = "text" name = "age"/>
        <input type = "submit" value = "注册"/>
    </form>

                

        POST请求方式提交请求参数时会出现中文乱码问题,需要使用过滤器处理乱码问题,过滤器可以自定义,也可使用框架中提供的过滤器 CharacterEncodingFilter 

设置字符集过滤器:

在web.xml文件中:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">


    <!--
        声明、注册spring MVC的核心对象:DispatcherServlet,在tomcat服务启动后,
        创建DispatcherServlet对象的实例。
        为什么要创建DispatcherServlet对象的实例呢?
        因为在创建DispatcherServlet对象过程中,同时会创建SpringMVC容器对象,
        读取SpringMVC的配置文件,把这个配置文件中的对象都创建好,当用户发起请求时就可以直接适用对象了
    -->
    <servlet>
        <servlet-name>myweb</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--自定义springmvc配置文件的位置-->
        <init-param>
            <!--springmvc的配置文件的位置属性-->
            <param-name>contextConfigLocation</param-name>
            <!--指定自定义文件的位置: 类路径下,名字叫做springmvc.xml-->
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <!--在tomcat启动后,创建servlet对象,load-on-startup表示tomcat启动后创建对象的顺序,
            它的值是整数,数值越小,tomcat创建对象的时间越早,大于等于0的整数-->

    </servlet>

    <!--使用框架的时候 , url-pattern可以使用两种值
        1.使用扩展名方式,语法 *.xxxx ,xxxx是自定义的扩展名。 常用的方式 *,do,*,action,*.mvc等等
                    http://localhost;8080/myweb/some.do
                    http://localhost:8080/myweb/other.do
        2.使用斜杠“/"
    -->
    <servlet-mapping>
        <servlet-name>myweb</servlet-name>
        <url-pattern>*.do</url-pattern>
        <!--*.do:凡是.do结尾的请求都交给名字叫做myweb的中央调度器处理-->
    </servlet-mapping>
    
    <filter>
        <!--注册、声明过滤器,解决post请求乱码的问题-->
        <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>
        <!--强制请求对象 ( HttpServletRequest ) 使用encoding编码的值-->
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <!--强制应答对象 ( HttpServletResponse ) 使用encoding编码的值-->
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern> <!--强制所有的请求先通过过滤器处理-->
    </filter-mapping>
</web-app>
 @RequestParam:

        请求中参数名和处理器方法的形参名不一致的问题
@RequestParam
还个接收请求参数中解决请求中参数名形参名不一样的问题
属性 : 1.value 请求中的参数名称
2.required 是-boolean,默认是true
true : 表示请求中必须包含此参数。
位置:
在处理器方法的形参定义的前面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1530891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode: 173. 二叉搜索树迭代器 + dfs + 二叉搜索树】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

常用小知识点总结

1. pc可以跑通&#xff0c;但是安卓编译死循环&#xff0c;可能是函数声明了返回类型&#xff0c;但是没有真正返回 2. ubuntu下根据关键词杀死所有相关进程。ps -ef | grep code | grep -v grep | cut -c 10-16 | xargs kill -s 9 top和ps基本作用都是显示系统进程状况&…

由浅到深认识Java语言(2):Java语言概述

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

《UE5_C++多人TPS完整教程》学习笔记28 ——《P29 Mixamo 动画(Mixamo Animations)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P29 Mixamo动画&#xff08;Mixamo Animations&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者…

【机器学习-05】模型的评估与选择

在前面【机器学习-01】机器学习基本概念与建模流程的文章中我们已经知道了机器学习的一些基本概念和模型构建的流程&#xff0c;本章我们将介绍模型训练出来后如何对模型进行评估和选择等 1、 误差与过拟合 学习器对样本的实际预测结果与真实值之间的差异&#xff0c;我们称之…

蓝桥刷题--四元组问题和肖恩的投球游戏加强版

1.四元组问题 我的这个代码有点问题&#xff0c;我也找不出来&#xff0c;哪位大佬指正一下 // 四元组问题 //思路 // 是否存在 a < b < c < d, 使得nums[d] < nums[c] < nums[a] < nums[b] //分别维护二元组 (a, b) 和 (c, d), 对合法 b 维护前缀 max 的 n…

安卓Android入门

安卓作为日常生活中不可缺少的移动操作系统&#xff0c;在5G的发展和应用过程中发挥着其重要的作用。 5G是第五代移动通信技术&#xff0c;拥有更快的速度、更高的带宽、更低的延迟和更大的连接密度。这一技术的快速发展为移动设备和应用提供了更多的可能性。 安卓和5G的关系…

低代码 + 大模型,让业务系统智能化,加速想法落地

1 AI 时代下的应用 大模型来了&#xff0c;每个行业/领域都在融合大模型。作为低代码开发的探索者&#xff0c;今天我们来聊聊业务系统是如何融合大模型实现智能化的。 我们用百度内部实际应用场景来举例。比如请假&#xff0c;智能业务助手可以帮你&#xff1a; 了解…

卸载torch并更新版本,torch-gpu的下载安装--亲测有效!!

以前一直抱怨实验室的cuda版本&#xff0c;以前是10.1&#xff0c;导致只能安装最低配版本的torch&#xff0c;也就是torch1.8.1&#xff0c;现在内核版本和驱动都更新了&#xff0c;变成了cuda11.4&#xff0c;以前的环境都没办法跑代码&#xff0c;只能重新进行卸载安装。 1…

计算机毕业设计-基于Python的“哔哩哔哩视频网”视频热度分析

概要 在21世纪的今天&#xff0c;网络发展越来越快&#xff0c;网上的娱乐方式也越来越多样化&#xff0c;而如今在网上观看视频消遣时间越来越受到大众的青睐。Bilibili视频网站是现当下年轻人最受欢迎的一个视频网站。有调查显示&#xff0c;直到2019年的10月份&#xff0c;B…

flowable-ui部署

版本 java: java8+tomcat: apache-tomcat-9.0.87flowable: flowable-6.8.1mysql驱动: mysql-connector-java-8.0.30.jar 注意:版本一定要对,否则启动报错执行数据库脚本 创建数据库flowable执行脚本,脚本位于解压flowable-6.8.1.zip后的flowable-6.8.1/database/create/all/…

机器学习——终身学习

终身学习 AI不断学习新的任务&#xff0c;最终进化成天网控制人类终身学习&#xff08;LLL&#xff09;&#xff0c;持续学习&#xff0c;永不停止的学习&#xff0c;增量学习 用线上收集的资料不断的训练模型 问题就是对之前的任务进行遗忘&#xff0c;在之前的任务上表现不好…

MySQL数据库的基本概念与安装

目录 引言 一、数据库的基本概念 &#xff08;一&#xff09;数据、表与数据库 1.数据(Data) 2.表 3.数据库 &#xff08;二&#xff09;数据库管理系统 &#xff08;三&#xff09;数据库系统 二、数据库的发展 三、主流数据库的介绍 &#xff08;一&#xff09;关…

基于BusyBox的imx6ull移植sqlite3到ARM板子上

1.官网下载源码 https://www.sqlite.org/download.html 下载源码解压到本地的linux环境下 2.解压并创建install文件夹 3.使用命令行配置 在解压的文件夹下打开终端&#xff0c;然后输入以下内容&#xff0c;其中arm-linux-gnueabihf是自己的交叉编译器【自己替换】 ./config…

杰发科技AC7801——读取Flash数据做CRC校验

查看Keil的编译结果发现总共6160个字节。计算结果如下&#xff0c; 代码如下 #include "ac780x_crc.h" #include "ac780x.h" #include "ac780x_debugout.h" #include "string.h" #include "ac780x_eflash.h"#define TestSi…

2024年第二届亚洲前沿图像处理会议(AAIP 2024)即将召开!

2024年第二届亚洲前沿图像处理会议(AAIP 2024)将于2024年7月26-28日在泰国曼谷召开。本次会议由温特沃斯理工学院、国立中山大学、泰国国立法政大学联合主办&#xff0c;JOIG期刊参与支持。会议旨在促进图像处理相关领域学术交流与合作&#xff0c;热忱欢迎从事相关技术研究的专…

【PyQt】17-日历控件

文章目录 前言一、代码二、运行结果总结 前言 固定格式的表述 日期的获取 一、代码 #Author &#xff1a;susocool #Creattime:2024/3/19 #FileName:40-日历控件 #Description: 日历控件的展示 import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQ…

麒麟 V10 一键安装 Oracle 11GR2(231017)单机版

Oracle 一键安装脚本&#xff0c;演示 麒麟 V10 一键安装 Oracle 11GR2 单机版过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;Shell脚本安装Oracle数据库 脚本第…

代码随想录算法训练营第十一天| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

题目&#xff1a;20. 有效的括号 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:20.有效的括号 题目链接&#xff1a;力扣题目链接 图释&#xff1a; class Solution { public:// 有效的括号 bool isValid(string s) {// 遇到左括号时就放入右括号&#xf…

【C语言】结构体类型名、变量名以及typedef

文章目录 分类判断结构体成员的使用typedef 分类判断 struct tag {char m;int i; }p;假设定义了上面这一个结构体&#xff0c;tag 就是类型名&#xff0c; p 就是变量名&#xff0c; m 和 i 就是结构体成员列表。 可以这么记&#xff0c;括号前面的是类型名&#xff0c;括号后…