总结
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。
面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!
@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);
}
SpringMVC提供了过滤器来设置编码
在web.xml中配置
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
encodingFilter
/*
在进行参数绑定时,会自动完成完成基本类型(如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());
}
页面
======================================================================
在JSP页面中可以通过EL表达式来绑定后台的数据,后台数据可以保存到:
-
将数据保存到HttpServletRequest、HttpSession、ServletContext中
-
在参数中定义Model参数保存数据
-
在参数中定义Map参数保存数据
页面跳转的两种方式:
- 请求转发
forward:url
- 重定向
redirect:url
首页
<%@ page contentType=“text/html;charset=UTF-8” language=“java” isELIgnored=“false” %>
Hello ${user.username}你好
模拟登录,使用User来获得参数,保存User对象到HttpSession,重定向到首页后,可以从首页读取用户名;
保存错误信息到Model对象中,请求转发到登录页面后,可以读取Model中的数据
@PostMapping(“/login”)
public String login(User user,HttpSession session,Model model){
if(“admin”.equals(user.getUsername()) && “123”.equals(user.getPassword())){
//保存用户数据到Session中
session.setAttribute(“user”,user);
//重定向到首页
return “redirect:/index”;
}
//保存错误提示数据到Model
model.addAttribute(“msg”,“账号或密码错误”);
//请求转发到当前页
return “forward:/login”;
}
SpringMVC还支持以原生ServletAPI作为形参,包括:
-
HttpServletRequest
-
HttpServletResponse
-
HttpSession
-
java.security.Principal
-
Local
-
InputStream
-
OutputStream
-
Reader
-
Writer
使用HttpServletRequest获得参数,将用户名保存到Session中
@PostMapping(“/login”)
public String login(HttpServletRequest req,HttpSession session){
String username = req.getParameter(“username”);
String password = req.getParameter(“password”);
session.setAttribute(“username”,username);
return “redirect:/test”;
}
@SessionAttribute
通过@SessionAttribute注解,可以读取Session中的用户名
@PostMapping(“/test”)
public String test(@SessionAttribute(“username”)String username){
System.out.println(username);
return “/index”;
}
@ModelAttribute
@ModelAttribute可以将模型数据注入到方法参数中
定义方法,在方法上加@ModelAttribute,将返回的User对象作为模型
@ModelAttribute(“user”)
public User getUser(){
User user = new User();
user.setUsername(“admin”);
user.setPassword(“123”);
return user;
}
在方法的参数上加入@ModelAttribute,注入模型对象
@RequestMapping(“/test2”)
public void test2(@ModelAttribute(“user”)User user){
System.out.println(user);
}
==============================================================
================================================================================
目前后台和前端进行通信主要的数据格式是:JSON
JSON是JavaScript的对象,代码简洁,可读性很高
格式有两种:
- 单个对象
{“name”:“张三”,“age”:“20”}
- 对象数组
[{“name”:“张三”,“age”:“20”},{“name”:“李四”,“age”:“20”}]
Java后台和前端Ajax通信时,经常需要接受JSON参数,也可能需要返回JSON给Ajax
SpringMVC和Ajax通信的相关注解
- @RequestBody
定义在参数前面,用于接收JSON格式的对象
- @ResponseBody
定义在方法前面,用于将数据返回给Ajax
下面案例演示如何接收Ajax的JSON参数,以及如何返回JSON给Ajax
1) 导入依赖
SpringMVC需要JSON解析的相关依赖
com.fasterxml.jackson.core
jackson-databind
2.9.5
2)用户对象
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return “User{” +
“username='” + username + ‘’’ +
“, password='” + password + ‘’’ +
‘}’;
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public User() {
}
}
3) 控制器,在参数中添加了@RequestBody,方法前添加@ResponseBody
将会接收一个User对象参数,然后返回一个User集合给Ajax
/**
- 自定义控制器
*/
@Controller
public class MyController {
@ResponseBody
@RequestMapping(“/ajax”)
《MySql面试专题》
《MySql性能优化的21个最佳实践》
《MySQL高级知识笔记》
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
关注我,点赞本文给更多有需要的人
MySql性能优化的21个最佳实践》
[外链图片转存中…(img-1sRgu7l9-1715584331920)]
[外链图片转存中…(img-7KmPuVLQ-1715584331921)]
[外链图片转存中…(img-djKHHqLk-1715584331921)]
[外链图片转存中…(img-3xb9Q7t0-1715584331921)]
《MySQL高级知识笔记》
[外链图片转存中…(img-Pr5SispX-1715584331922)]
[外链图片转存中…(img-3EgLLpXt-1715584331922)]
[外链图片转存中…(img-noxemIJn-1715584331922)]
[外链图片转存中…(img-oR7Yyh8I-1715584331923)]
[外链图片转存中…(img-FBn5xBvT-1715584331923)]
[外链图片转存中…(img-NXSVCnUa-1715584331923)]
[外链图片转存中…(img-zV3cDNDp-1715584331924)]
[外链图片转存中…(img-zccLirYl-1715584331924)]
[外链图片转存中…(img-5UFHklFn-1715584331924)]
[外链图片转存中…(img-YUZLtdUo-1715584331924)]
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
[外链图片转存中…(img-XmBoxvnF-1715584331925)]
关注我,点赞本文给更多有需要的人