SpringMVC学习笔记【part2】请求参数的绑定

Ansys workbench几何建模- DesignModeler (2) DesignModeler建模:多体部件体 1 多体部件体的优势 多个零部件在多体部件体中能够共享拓扑,这个功能是DM的亮点,也是却别于其他CAD软件的特点之一。 2 多个零部件之间划分网格的比较 以两个接触的零部件为例 (1)单独划分 每个实体独立地划分网格,在接触面处的节点位置既不同也不共享 (2)布尔合并 通过布尔操作将两个零部件合成一个,划分网格,结果两个实体完全作为一个实体划分网格的... 阅读详情

SpringMVC 学习笔记 Part2

1. 请求参数的绑定

绑定机制:表单提交的数据都是key-value格式的,如username=root&password=123。 SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的,要求提交表单的name和参数的名称是相同的。

支持的数据类型:① 基本数据类型和字符 ② 实体类型(JavaBean)③ 集合数据类型(List、map集合等)。

语法格式:我们表单中参数名称必须和控制器中方法的形参名称保持一致。

基本数据类型和字符串类型:提交表单的name和方法参数的名称是相同的,区分大小写。

<form action="account/form">
    账户名:<input type="text" name="name"/>
    金额:<input type="text" name="money"/>
    <input type="submit" value="提交"/>
</form>
@RequestMapping("form")
public String getForm(String name,Integer money){
    System.out.println(name+"---"+money);
    return "success";
}

实体类型(JavaBean):提交表单的name和JavaBean中的属性名称需要一致,如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写为 对象.属性 例如:user.uname。

<form action="account/form">
    账户名:<input type="text" name="name"/>
    金额:<input type="text" name="money"/>
    户主姓名:<input type="text" name="user.uname"/>
    年龄:<input type="text" name="user.age"/>
    <input type="submit" value="提交"/>
</form>
@RequestMapping("form")
public String getForm(Account account){
    System.out.println(account);
    System.out.println(account.getUser());
    return "success";
}
public class Account implements Serializable {
    private String name;
    private Integer money;
    private User user;
    
    public void setter/getter/toString(){};
}

集合属性数据封装 JSP页面编写格式为 list[0].属性 、map[0].属性。

<form action="account/form">
    List第1个元素名字:<input type="text" name="users[0].uname"/>
    List第1个元素金额:<input type="text" name="users[0].age"/><br>
    List第2个元素名字:<input type="text" name="users[1].uname"/>
    List第2个元素金额:<input type="text" name="users[1].age"/><br>
    Map第1个元素名字:<input type="text" name="userMap['one'].uname"/>
    Map第1个元素金额:<input type="text" name="userMap['one'].age"/><br>
    Map第2个元素名字:<input type="text" name="userMap['two'].uname"/>
    Map第2个元素金额:<input type="text" name="userMap['two'].age"/><br>
    <input type="submit"/>
</form>
@RequestMapping("form")
    public String getForm(Account account){
        System.out.println(account);
        List<User> users = account.getUsers();
        System.out.println(users);
        Map<String, User> userMap = account.getUserMap();
        Set<String> set = userMap.keySet();
        for (String s : set) {
            System.out.println(s+"---"+userMap.get(s));
        }
        return "success";
    }
public class Account implements Serializable {
    private String name;
    private Integer money;
    private User user;
    private List<User> users;
    private Map<String,User> userMap;
    
    public void setter/getter/toString(){};
}

2. 请求参数中文乱码的解决

POST 请求方式会在表单提交时出现中文乱码,这时需要在 web.xml 中配置一个过滤器。

<!-- 配置 springMVC 编码过滤器 -->
<filter>
        <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>
    	<!-- 用来设置是否理会request.getCharacterEncoding()方法,设置为true则强制覆盖之前的编码格式 -->
        <init-param> 
            <param-name>forceEncoding</param-name> 
            <param-value>true</param-value> 
    	</init-param>
    </filter>
	<!-- 过滤所有请求 -->
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

在 springmvc 的配置文件中可以配置,使静态资源不进行过滤。

location 表示路径,mapping 表示文件,**表示该目录下的文件以及子目录的文件。

<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/images/" mapping="/images/**"/>
<mvc:resources location="/scripts/" mapping="/javascript/**"/>

GET 请求方式若出现编码问题,由于tomcat对 GET 和 POST 请求处理方式是不同的,则需要改 tomcat 的 server.xml配置文件。

在tomcat的server.xml中找到Connector标签。

<Connector connectionTimeout="20000" port="8080"
           protocol="HTTP/1.1" redirectPort="8443"/>

更改为如下代码:

<Connector connectionTimeout="20000" port="8080"
           protocol="HTTP/1.1" redirectPort="8443" 
           useBodyEncodingForURI="true"/>

如果遇到 ajax 请求仍然乱码,则改成如下:

<Connector connectionTimeout="20000" port="8080"
           protocol="HTTP/1.1" redirectPort="8443" 
           URIEncoding="UTF-8"/>

3. 自定义类型转换器

表单提交的任何数据类型全部都是字符串类型,但是后台定义Integer类型,数据也可以封装上,说明Spring框架内部会默认进行数据类型转换。

当你输入的日期格式为"2022/1/18"时,框架提供的默认转换器会自动帮你转换成Date类型,但是"2022-1-18"格式时,就会报错,这时候需要我们自己用 Convertor 接口编写一个自定义类型转换器。

在这里插入图片描述

切记我们要选择导入第二个带有两个泛型的Converter包,选第一个的话将使用不了。

public class MyConverter implements Converter<String,Date> {

    @Override
    public Date convert(String source) {
        if(source==null){
            throw new RuntimeException("空的。。。");
        }
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
            return df.parse(source);
        } catch (ParseException e) {
            throw new RuntimeException("类型转换出错。。。");
        }
    }
}

下一步我们要在springmvc.xml中编写配置,来注册这个自定义类型转换器。

spring 配置类型转换器的机制是,将自定义的转换器注册到类型转换服务中去,所以我们要先创建一个转换服务conversionService进容器,再把我们的自定义转换器注入到这个工厂里去。

	<!-- 注册自定义类型转换器 -->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean id="myConverter" class="swz.MyConverter"/>
            </set>
        </property>
    </bean>

	<!-- 在 annotation-driven 标签中引用配置的类型转换服务 -->
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

在上节基础配置中我们可以知道,annotation-driven 标签自动为我们配置了注解处理器和适配器,但其他一些服务,我们需要手动在这个标签中添加,比如上面的类型转换服务。这表明了annotation-driven 标签除了开启注解开发外,还有许多重要的功能。

4. 在控制器中使用原生的ServletAPI对象

想使用 Java Web 中的 老ServletAPI?很简单,只需要在控制器的方法参数定义HttpServletRequest和HttpServletResponse对象就可以用了。

@RequestMapping("test")
    public String testServlet(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        ServletContext servletContext = session.getServletContext();
        System.out.println(request);
        System.out.println(response);
        System.out.println(session);
        System.out.println(servletContext);
        
        return "success";
    }

在这里插入图片描述

Java Web 知识回顾

request.getSession().getServletContext() :获取的是page的上下文。

request.getSession().getServletContext().getRealPath(""):获取的的tamcat的路径,部署项目后相当于项目的路径。

SpringMVC框架核心原理与实战应用解析 SpringMVC作为Java EE领域主流的MVC框架,基于Servlet API实现了高度可配置的请求处理流程。其核心采用前端控制器模式,通过DispatcherServlet统一调度HandlerMapping、HandlerAdapter等组件,支持注解驱动开发与RESTful接口设计。在微服务架构中,SpringMVC常作为基础Web层技术,与Spring Boot深度整合后可快速构建生产级应用。本文通过解析请求处理全流程、核心注解矩阵及性能优化策略,帮助开发者掌握拦截器扩展、异步处理等关键技术, 阅读详情

相关推荐

遗传算法参数调优实战:种群规模、交叉变异与收敛诊断

遗传算法是一种不依赖梯度、鲁棒性强的元启发式优化方法,广泛应用于超参搜索、调度优化和智能控制等领域。其核心原理在于模拟自然选择中的选择、交叉与变异机制,通过种群演化在复杂解空间中平衡探索与开发。技术价值体现在对非凸、非连续、含噪声问题的强适应性,以及工程实现的低门槛与高可定制性。典型应用场景包括工业路径规划、神经网络架构搜索、PID参数整定等。本文聚焦GA落地中最关键的参数黑箱——种群规模设定依据、交叉/变异概率的协同逻辑、精英保留策略及三重收敛判据,结合信息熵自适应、按位变异率、软精英保留等硬核实践,帮助

weixin_34187862的博客 448

SpringMVC:最详细笔记partⅠ

SpringMVC最详细笔记partⅠ 一、springMVC-quickStar 解决maven加载项目过慢 archetypeCatalog internal 导入依赖 <!-- 版本锁定 --> <properties> <spring.version>5.0.2.RELEASE</spring.version> &lt...

Oooops_的博客 498

生产级机器学习模型服务落地实战指南

机器学习模型部署不是简单启动API,而是构建可运维、可观测、可弹性伸缩的生产系统。其核心在于工程化思维转型:从Notebook中的静态验证,转向真实场景下的数据漂移监控、特征服务治理与GPU推理优化。技术价值体现在稳定性保障(如Triton动态批处理提升GPU利用率)、故障快速定位(Kubernetes事件+结构化日志)和成本可控性(VPA+Spot实例)。典型应用场景包括实时风控、推荐系统与智能客服等高并发低延迟业务。本文聚焦MLOps落地中最易被忽视的‘上线后’环节,覆盖Docker确定性打包、Redi

dianchaozong3657的博客 477

SpringMVC 文件上传 消息 Required request part ‘file‘ is not present描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者

Required request part 'file' is not present

qq_43615820的博客 3691

死区补偿---学习笔记

最近调试中发现,死区补偿对电流谐波和电流带宽影响挺大,于是对死区补偿产生浓厚兴趣,找来几篇文章粗读并做一下笔记。 传统做法 无非就是根据电流方向补偿,假如svpwm计算出的A相理论导通实践为T1,死区时间是Td,则实际导通时间T = T1-Td(when ia >0 ),于是在svpwm计算出的导通时间T1的基础上加上Td。这样经过PWM模块后,实际的导通时间即为T1. 但存在两个难点(个人总结): 1,受电流检测精度影响,尤其是在过零点检测困难。 2,真实的二极管导通需要一定电压,并非..

圆桌骑士的博客 2万+

Python连接StarRocks全流程实践: SQL文件调用与Pandas混合优化

通过这种分阶段混合计算, 既能发挥StarRocks处理海量数据的性能优势, 又能保留Pandas在内存计算中的灵活性, 实现效率与功能的完美平衡.结合SQL的高效聚合与Pandas的灵活计算, 实现查询和数据处理的深度融合.该库基于SQLAlchemy 2.x开发, 仅支持Python 3.x环境.对大批量数据的写入, 建议进行分块. 分块写入较单条插入速度会有显著提升.这样可以避免python代码的查询与SQL耦合, 支持版本化管理.将DDL, DML分离为独立文件, 例如。: 调整连接复用参数。

t.y.Tang的博客 2780

SpringMVC学习系列(4) 之 数据绑定-1

Spring MVC绑定数据1

紫陌520的博客 365

BERT之提取特征向量 及 bert-as-server的使用

本文内容列表提取句向量1、句向量简介1-1传统句向量1-2、BERT句向量2、 extract_features.py源码分析2-1 main函数 前一篇文章 BERT介绍及中文文本相似度任务实践 简单介绍了使用BERT进行中文文本相似度计算的方法,这篇文章着重对特征提取方法进行讲述。 提取句向量 1、句向量简介 1-1传统句向量 更多采用word embedding的方式取加权平均,该方法的一大...

ling620的专栏 1万+

黑马就业班——SpringMVC框架:part1(包含将Maven的web项目部属到Tomcat的2种方式)

1、SpringMVC的基本概念   参考文档第一章——第1章 SpringMVC 的基本概念,以及视频1的解析。 2 、SpringMVC 的入门案例(重要!)   参考视频:视频3—,参考项目:springmvc_day01_01_start。必须将SpringMVC的开发步骤记住!   首先,搭建SpringMVC的开发环境:见视频4解析,见项目 springmvc_day01_01_...

LKJgdut的博客 359

YOLOv11 模型剪枝实战:深入解析通道剪枝与层剪枝的策略与实现(含环境配置、微调技巧与部署测试)

YOLOv11模型剪枝技术通过移除冗余参数和结构来压缩模型,主要包括通道剪枝和层剪枝两种方法。通道剪枝通过评估批量归一化层的缩放因子γ确定通道重要性,移除不重要的特征通道;层剪枝则直接删除整个网络层或模块。剪枝流程包括评估重要性、移除冗余成分、微调模型和评估性能四个步骤。该技术可显著降低模型计算量和参数量,适合在资源受限设备上部署高性能目标检测模型。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1961

粒子群算法Particle Swarm Optimization超详细解析+代码实例讲解

粒子群算法,也称粒子群优化算法或鸟群觅食算法(Particle Swarm Optimization),缩写为 PSO, 是近年来由J. Kennedy和R. C. Eberhart等开发的一种新的进化算法(Evolutionary Algorithm - EA)。

猫敷雪 893

springboot学习12——springmvc(下)

五、数据模型 Spring MVC允许控制器自定义模型和视图(ModelAndView),其中模型是存放数据的地方,视图则是展示给用户。先来讨论数据模型的问题。 数据模型的作用是绑定数据,为后面的视图渲染做准备。首先看下Spring MVC使用的模型接口和类: 在类ModelAndView中存在一个ModelMap类型的属性,ModelMap继承了LinkedHashMap类,所以它具备Map接口的一切特性,除此之外它还可以增加数据属性。 在Spring MVC的应用中,如果在控制器方法的参数中使用Mod

qq_39172525的博客 346

什么是 Agent 的 Context Window?为什么它是 Agent 工程中最核心的约束之一?

什么是 Agent 的 Context Window?为什么它是 Agent 工程中最核心的约束之一?

我哎GIS博客 819

SpringBoot专题学习Part14:SpringBoot下的SpringMVC自动配置的内容

Spring Boot已经在内部自动配置好了SpringMVC 那么 具体是自动配置了哪些内容 让我们来了解: 注:英文内容是直接从官网扒的 Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans. 自动配置了ViewResolver(视图解析器) 根据方法的返回值得到视图对象View 然后视图对象决...

"✧treasure mountain✧" 7878

Python遥感图像处理应用篇(二十三):Python+GDAL 批量拼接图像

遥感影像拼接分多种不同的情况,比如比较常用的是两幅影像拼接或者多个图像合并为一个图像。GDAL中实现影像拼接的方式也有多种,比如常用可以通过numpy读取影像数组,并计算各个图像的numpy数组范围,合并多个numpy数组为一个最终的结果,并将其重新输出为一幅新的图像,即可实现图像的拼接。另外比较方便的一种方法便是使用GDAL.warp()函数方法。这个函数的功能很多,可以实现多种不同的目的,比如用于坐标系转换、投影变换、图像合并与镶嵌、地理范围裁剪、更改分辨率、矢量裁剪等多种功能。这些功能可以通过设置Op

soderayer的博客 4643

PCL Trimmed ICP实现点云精配准【2025最新版】

博客长期更新,本文最新更新时间为:2025年6月25日。抄袭狗记得来抄最新代码哦,抄都抄成错的,不够丢人钱。

点云侠的博客 37万+

Spring入门学习之Spring MVC(part 2)

Spring MVC MVC设计模式        SpringMVC框架当然也是基于MVC设计模式的框架。MVC设计模式包含模型、视图、控制器三个模块。视图负责应用的显示(例如JSP/html),模型封装了应用的数据和业务逻辑,控制器负责接受用户的输入,改变模型,以及调整视图的显示。        其中servlet或者filter都可以充当控制器。Spring MVC 和 Struts1

java_hxc_sz的博客 485

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SpringMVC全局异常处理

在SpringMVC.xml中引入相应的类 <!--配置全局异常处理器--> <bean class="net.xxx.xxx.common.exception.SpringHandlerExceptionResolver"/> 定义异常枚举类 public enum HttpExceptionEnum { NOT_FOUND_EXCEPTION { ...

u011429743的博客 696

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【JAVA】part4-Java注解

Java注解,简单来说就是放在Java源码的类、方法、字段、参数前的一种特殊“注释”,发挥着其功能。 注解使得Java Web开发变得更加模块化和可配置,同时减少了XML配置的需要,对于简化开发流程和提高开发效率有着重要的作用。

KX_52517的博客 750

SpringBoot学习笔记【part08】Web开发——静态资源配置原理

SpringBoot 学习笔记 Part08 1. WebMvcAutoConfiguration SpringBoot启动默认加载 xxxAutoConfiguration 类(自动配置类),WebMvcAutoConfiguration 是 SpringMVC 功能的自动配置类。 根据我们之前的学习,打开libs里的spring的自动配置类包, 找到 WebMvcAutoConfiguration , 观察它的按需加载条件,我们可以发现这个配置类是生效的。 @Configuration(

Parker_cpp的博客 827

spring+springMVC+mybatis的整合 part3

配置自定义的404页面,替换Tomcat不友好的404页面 有时候我们想替换掉tomcat自带的404页面 如图: Paste_Image.png 404也就是说找不到当前资源或者资源不存在 The origin server did not find a current representat...

weixin_34388207的博客 92

SPRING复习之旅———part1 简介

Spring 框架 Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。 图 1. Spring 框架的 7 个模块 组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: 核心容器:核心容器提供 Sp

heiyu1026的专栏 204

【Spring Security】- part1

功能强大、可高度定制的身份验证和访问控制框架。他是保护基于Spring的应用程序的事实标准Authenticationmanager、ProviderManager以及AuthenticationProvider的关系默认配置在类路径中没有WebSecurityConfigurerAdapter.class时生效,可以自定义WebSecurityConfigurerAdapter的示例去扩展SpringSecurity的默认配置。

laufungjeoi的博客 95

【学习日记】(SSM-part 3)SSM项目-批量删除、拦截和用户权限功能开发

用户管理模块 — 批量删除、拦截和用户权限功能开发1 批量删除2 Filter拦截器3 用户权限功能 1 批量删除 效果预览 在之前开发的基础上可以在jsp界面中看到有多选框和是删除按钮,批量删除的功能就是在多选框下选择好待处理的用户信息,进行批量删除实现。 功能实现: (1) 在userDao下声明一个批量删除的接口,并传入一个List集合 //批量删除 void deleteAll(@Param("ids")List<Integer> ids); (2) 在UserMapper中声明一个

qq_42756396的博客 467

毕业设计管理系统Part5:教师端查看学生选题,并进行删除管理,完成上传任务书功能

38.创建关系表(student):表示学生和所选课题的关系 39.创建对应实体类Student 40.创建StudentDao,提供的方法:查询出选择该老师的学生(与TeacherId绑定)一个老师带领的学生,返回集合。 41.创建StudentMapper.xml,查询标签 42.创建一个类(StudentVO),记录学生选择的课题,使用VO类,学生视图信息(学生基本信息和所选课题信息),显示在页面上。查询两张表才可以查询到这些信息 43.创建一张表(keti_record):id,keti_id,st

weixin_50052135的博客 1167

JavaWeb 学习路径指南(从零到入门就业)

适用人群:掌握 Java 基础语法、想进入 Web 开发方向的初学者目标:掌握 JavaWeb 核心技术栈,能独立完成前后端交互的 Web 项目,并顺利衔接 SpringBoot 主流企业开发。

2601_96885139的博客 341
上一篇: SpringMVC学习笔记【part1】基础配置
下一篇: SpringMVC学习笔记【part3】常用注解
Parker7
博客等级 码龄7年 18粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Parker7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值