处理器方法的参数

处理器方法的参数:

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

  • 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 : 表示请求中必须包含此参数。
位置:
在处理器方法的形参定义的前面

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 系统源码快速入门

Android源码快速入门 今天分享的内容是Android源码快速入门&#xff0c;主要分为以下几个步骤&#xff1a; * 硬件要求 * 虚拟机安装 * 开发环境搭建 * 下载编译源码 * 从一个简单的实际开发需求体验 Framework 开发硬件要求 用于 Android Framework 开发的电脑需要较强的 C…

黑平台避雷!3月上半月FX110曝光68家,无监管成常态

黑平台层出不穷&#xff0c;反诈骗是一场长期的斗争。以半个月为周期&#xff0c;FX110网对虚假交易商进行常态化曝光&#xff0c;极力压缩黑平台的生存空间&#xff0c;减少骗局的发生。 3月上半月&#xff0c;FX110网再曝光黑平台68家&#xff0c;此次曝光的黑平台大都对监管…

深入探究process.env.NODE_ENV如何区分环境

公众号&#xff1a;程序员白特&#xff0c;欢迎一起学习交流~ 通常我们在开发中需要区分当前代码的运行环境是dev、test、prod环境&#xff0c;以便我们进行相对应的项目配置&#xff0c;比如是否开启sourceMap&#xff0c;api地址切换等。 而我们区分环境一般都是通过process.…

02_设计模式

文章目录 设计模式设计模式分类UML类图设计模式的原则 常用设计模式创建型设计模式单例设计模式饿汉模式懒汉模式&#xff08;线程不安全&#xff09;懒汉模式&#xff08;线程安全&#xff09;- Synchronized懒汉模式&#xff08;线程安全&#xff09;- Double Check懒汉模式&…

mysql不等于<>取特定值反向条件的时候字段有null值或空值读取不到数据

#小李子9479# 有如下的数据结构 &#xff0c;st_dl tinyint(4)&#xff0c;想从中读取不等于1的数据 于是写了一个sql语句 select * from tbname where st_dl<>1 返回数据为0。 修改一下 select * from tbname where IFNULL(st_dl,0)<>1 正确返回数据 IFNUL…

【深度学习与神经网络】MNIST手写数字识别1

简单的全连接层 导入相应库 import torch import numpy as np from torch import nn,optim from torch.autograd import Variable import matplotlib.pyplot as plt from torchvision import datasets, transforms from torch.utils.data import DataLoader读入数据并转为ten…

深度学习之本地部署大模型ChatGLM3-6B【大模型】【报错】

文章目录 0.前言1.模型下载2.配置环境2.1 下载项目文件2.2 配置环境 3.开始推理4.总结 0.前言 本博客将介绍ChatGLM3-6B大模型在Ubuntu上的本地部署教程 1.模型下载 由于毛毛张的服务器服务无法科学上网&#xff0c;所以模型的相关文件必须现在本地下载好&#xff0c;再上传到…

【ai技术】(1):发现一个大模型可视化项目,使用nodejs编写的,llm-viz,可以本地运行展示大模型结构。

1&#xff0c;关于项目 https://www.bilibili.com/video/BV1eF4m1c7NC/ 【ai技术】&#xff08;1&#xff09;&#xff1a;发现一个大模型可视化项目&#xff0c;使用nodejs编写的&#xff0c;llm-viz&#xff0c;可以本地运行展示大模型结构。 https://github.com/bbycroft/l…

k8s集群架构维护k8s集群以及搭建k8s集群以及k8s集群的常见问题

一、k8s架构 Kubernetes&#xff08;K8s&#xff09;是一个由Google主导开发的开源容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它的设计目标是简化容器化应用程序在生产环境中的部署和运营。Kubernetes的架构设计复杂且高效&#xff0c;主要包括以下几…

再谈EMC Unity存储系统内存DIMM问题

以前写过一篇关于EMC Unity 存储系统的DIMM的介绍文章&#xff0c;但是最近还是遇到很多关于内存的问题&#xff0c;还有一些退货&#xff0c;所以有必要再写一篇关于EMC Unity 内存方面的问题&#xff0c;供朋友们参考。如果还有疑问&#xff0c;可以加vx&#xff1a;StorageE…

v-bind 绑定 class 与 style 基础用法

使用 v-bind 指令绑定 class 和 style 时语法相对复杂一些&#xff0c;这两者是可以互相替代的&#xff0c;均用于响应更新HTML元素的属性&#xff0c; v-bind 绑定 class 属性可以改写成绑定 style 属性&#xff0c;只是 css 属性位置变了而已。 1. 绑定 class 属性 1.1 数组…

MySQL 数据库设计范式

第一范式&#xff08;1NF&#xff09; 每一列都是不可分割的原子数据项第二范式&#xff08;2NF&#xff09; 在1NF的基础上&#xff0c;非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖) 1.函数依赖A->B&#xff0c;如果通过A属性(属性组)的值…

蓝桥杯 2023 省B 飞机降落

首先&#xff0c;这题要求的数据量比较少&#xff0c;我们可以考虑考虑暴力解法。 这题可能难在很多情况的考虑&#xff0c;比如说&#xff1a; 现在时间是10&#xff0c;有个飞机20才到&#xff0c;我们是可以干等10分钟。 #include <iostream> #include <…

编织效率之梦:Visual Studio与Windows快捷键指南

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 前言&#xff1a; 常用快捷键整理 (用加粗标注的是我个人使用时常用的&#xff0c;其实这个…

2024-03-19 作业

作业要求&#xff1a; 1> 将白天课堂代码重新实现一遍&#xff1a; select实现的TCP并发服务器 poll实现的TCP客户端 2> 君子作业 select实现的TCP客户端 poll实现的TCP并发服务器 作业1&#xff1a; 运行代码&#xff1a; select实现的TCP并发服务器 #include<myh…

[项目设计]基于websocket实现网络对战五子棋

项目介绍 该项目旨在实现一个网页端的在线五子棋&#xff0c;将实现登陆、好友、房间、对战、观战、聊天等功能 完成该项目需要了解C、数据库MySQL、基础前端HTML/CSS/JS/Ajax、网络协议WebSocket 项目源码&#xff1a;azhe1/online_gobang - 码云 - 开源中国 (gitee.com) …

国产-高精度、可编程数字温度传感芯片-MY18E20

由工采代理的MY18E20是一款国产高精度可编程的数字模拟混合信号温度传感芯片&#xff1b;感温原理基于CMOS半导体PN节温度与带隙电压的特性关系&#xff0c;经过小信号放大、模数转换、数字校准补偿后&#xff0c;数字总线输出&#xff0c;具有精度高、一致性好、测温快、功耗低…

vue前端解析jwt

vue前端解析jwt 我们可以用在线解析看解析的结果&#xff1a;https://www.lddgo.net/encrypt/jwt-decrypt 但是如果在前端需要解析token&#xff0c;拿到其中的权限信息&#xff0c;可以这样解决。 在线的&#xff1a; 完美解决&#xff1a; 代码&#xff1a; function par…

MySQL下载和安装部署

4.1 简介 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公 司开发&#xff0c;现在已经属于 Oracle 旗下产品。MySQL 是最流行的关系型数据 库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS(Relational Database Management System&…

AI系统性学习—LangChain入门

文章目录 1、LangChain入门1.1 简介1.2 架构1.3 核心概念1.2 快速入门1.3 安装 2、LangChain Prompt Template2.1 什么是提示词模版2.1 创建一个提示词模版2.2 聊天消息提示词模版2.3 模版追加示例 3、语言模型3.1 LLM基础模型3.2 LangChain聊天模型3.3 自定义模型3.4 输出解析…