Redis高频面试笔记,Spring框架,java中高级面试经验

4.2 参数绑定


登录页面

登录

${msg}



实现参数绑定有多种方式。

4.2.1 参数直接绑定

直接定义和表单元素name相同的参数

@Controller

@RequestMapping(“user”)

public class UserController {

@PostMapping(“/login”)

public void login(String username, String password){…}

}

4.2.2 @RequestParam注解绑定参数

如果名称不一样,可以通过@RequestParam注解配置参数

@PostMapping(“/login”)

public void login(@RequestParam(“username”)String uname,

@RequestParam(“password”)String pwd){

}

4.2.3 对象绑定参数

通过对象也可以进行参数绑定

实体类

public class User {

private String username;

private String password;

}

方法定义

@PostMapping(“/login”)

public void login(User user){

}

4.2.4 @PathVariable绑定参数

通过URL的路径也可以实现参数绑定,需要给参数添加@PathVariable注解

在URL中可以使用{name}来定位参数的位置,name是@PathVariable注解中配置的名称

@GetMapping(“/login/{username}/{password}”)

public void login(@PathVariable(“username”)String username,

@PathVariable(“password”)String password){

System.out.println(username);

System.out.println(password);

}

在浏览器输入:http://localhost:8080/user/login/admin/123456

可以看到账号和密码的输出,当然登录不适合将账号和密码添加到URL中,这里只是测试

4.2.5 通过Map集合进行参数绑定

在实体类中添加Map集合

public class UserVO {

private Map<String,String> user = new HashMap<>();

//get、set

}

修改表单name为: 集合名[‘属性名’]



修改方法

@PostMapping(“/login”)

public void login(UserVO userVO){

String username = userVO.getUser().get(“username”);

String password = userVO.getUser().get(“password”);

}

4.2.6 通过List集合进行参数绑定

修改集合为List

public class UserVO {

private List user = new ArrayList<>();

//get、set

}

修改表单name为: 集合名[下标]



修改方法

@PostMapping(“/login”)

public void login(UserVO userVO){

String username = userVO.getUser().get(0);

String password = userVO.getUser().get(1);

}

4.3 参数绑定的中文乱码问题


SpringMVC提供了过滤器来设置编码

在web.xml中配置

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceEncoding

true

encodingFilter

/*

4.4 自定义类型转换器


在进行参数绑定时,会自动完成完成基本类型(如byte、short、 int、long、float、double、boolean 、char )以及String类型的数据转换。

因为SpringMVC提供了大量内置的类型转换器Converter,来帮助进行参数在类型转换,如果我们需要完成某些特殊的数据格式的处理,就需要自定义类型转换器。

案例:表单输入id-name-age-subject格式的字符串,绑定到Student类型的参数。

实体类

public class Student {

private Long id;

private String name;

private Integer age;

private String subject;

…get/set

}

自定义转换器

/**

  • 学生类型转换器,将id-name-age-subject格式字符串转换为Student对象

*/

public class StudentConverter implements Converter<String, Student> {

@Override

public Student convert(String s) {

//按-分割字符串

String[] strings = s.split(“\-”);

if(strings.length != 4){

throw new IllegalArgumentException(“字符串不符合学生信息格式要求”);

}

//返回Student对象

Student student = new Student();

student.setId(Long.valueOf(strings[0]));

student.setName(strings[1]);

student.setAge(Integer.valueOf(strings[2]));

student.setSubject(strings[3]);

return student;

}

}

注册转换器,修改springmvc的annotation-driver配置

<mvc:annotation-driven conversion-service=“conversionService”/>

控制器

@PostMapping(“/saveStudent”)

public void saveStudent(Student student){

System.out.println(student.getId());

System.out.println(student.getName());

System.out.println(student.getAge());

System.out.println(student.getSubject());

}

页面


5、页面数据绑定

======================================================================

5.1 EL实现后台数据绑定


在JSP页面中可以通过EL表达式来绑定后台的数据,后台数据可以保存到:

  1. 将数据保存到HttpServletRequest、HttpSession、ServletContext中

  2. 在参数中定义Model参数保存数据

  3. 在参数中定义Map参数保存数据

5.2 页面跳转


页面跳转的两种方式:

  1. 请求转发

forward:url

  1. 重定向

redirect:url

5.3 登录案例


首页

<%@ page contentType=“text/html;charset=UTF-8” language=“java” isELIgnored=“false” %>

首页

Hello ${user.username}你好

模拟登录,使用User来获得参数,保存User对象到HttpSession,重定向到首页后,可以从首页读取用户名;

保存错误信息到Model对象中,请求转发到登录页面后,可以读取Model中的数据

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

美团二面惜败,我的凉经复盘(附学习笔记+面试整理+进阶书籍)

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-TE0GyRMN-1712453674714)]

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

[外链图片转存中…(img-XjazHBfi-1712453674715)]

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值