SpringMVC乱码解决、前端传递普通类型参数或对象、return转发与重定向

文章目录

  • 1、springMVC回顾
  • 2、前端普通类型和对象传值
    • 1、普通字符串
    • 2、中文乱码问题
    • 3、传递对象

1、springMVC回顾

@RequestMapping()注解的位置区别

  • 只在方法上

    那就是@RequestMapping()括号内的URL请求地址

  • 类上+方法上

    将类上与方法上的@RequestMapping()注解的参数进行拼接,请求得到的URL地址

  • 所以视图是可以重用的

  • WEB-INF目录下的所有资源,只能够被servlet或Controller访问(被程序访问),保证安全

@Controller和@RestController区别

  • @Controller跳转视图,会经过视图解析器解析称一个前端页面
  • @RestController返回对应的文本内容

return返回

后台可以使用Model给前端传值

  • 默认为转发(URL不变化)

  • 变成重定向:redirect

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/spring")
public class HelloController {//实际请求的是/spring/hello,也就是类映射路径加上方法的映射路径// 当请求/hello这个URL的时候,返回/WEB-INF/jsp/hello.jsp页面@RequestMapping("/hello1")public String hello1(Model model) {model.addAttribute("msg", "hello1,springmvc");//请求转发到/WEB-INF/jsp/hello.jsp页面return "hello";}@RequestMapping("/hello2")public String hello2(Model model) {model.addAttribute("msg", "hello2,springmvc");//重定向到index界面return "redirect:/index.jsp";}
}

2、前端普通类型和对象传值

1、普通字符串

登录界面:index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录</title>
</head>
<body>
<
<form action="/login" method="post"><p>用户名<input type="text" name="name"></p><p><input type="password" name="password"></p><input type="submit">
</form>
</body>
</html>

保证请求的字段(form表单中的name属性)要和方法接收到的参数名一致

Controller类:LoginController

@Controller
public class LoginController {//@RequestParam("name")将前端的参数其别名为后端的参数//name是前端的变量名//username是后端的变量名@RequestMapping("/login")public String login(@RequestParam("name") String username, String password, Model model) {System.out.println("接收到了username:" + username + ",password:" + password);model.addAttribute("msg", username);return "hello";}
}

2、中文乱码问题

这个时候我们发现在页面上会有中文乱码问题,SpringMVC给我们提供了一个乱码过滤器

在web.xml中进行配置

<!--添加乱码过滤器-->
<filter><filter-name>CharacterEncodingFilter</filter-name><!--这里我们使用的是spring自带的过滤器,当然你也可以自己写一个过滤器类,将这个过滤器类设置到下面--><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><!--编码格式--><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param>
</filter>
<!--/   表示过滤所有的请求,不包括jsp/*  表示过滤所有的请求,包括jsp
-->
<filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

3、传递对象

添加Lombok依赖

实体类:User

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private int id;private String username;private String password;
}

如果参数比较多,就把这些参数封装成一个对象,保证前端传递的参数名和对象的属性名一致就可以

@RequestMapping("/login2")
//在这儿,参数是一个对象,那么我们只需要使用对象的属性就可以了
public String login2(User user, Model model) {System.out.println("接收到了username:" + user.getUsername() + ",password:" + user.getPassword());model.addAttribute("msg", user.getUsername());return "hello";
}

如果前端的参数与后台的参数名称不一致,那么可以使用注解@RequestParam(“前端参数名”),将前端传递的参数映射为后端的参数名,解决前端参数和后台参数名称不一致的问题

//@RequestParam("name")将前端的参数其别名为后端的参数
//name是前端的变量名
//username是后端的变量名
@RequestMapping("/login")
//将前端参数name映射到后台参数username
public String login(@RequestParam("name") String username, String password, Model model) {System.out.println("接收到了username:" + username + ",password:" + password);model.addAttribute("msg", username);return "hello";
}

SpringMVC乱码解决、前端传递普通类型参数或对象、return转发与重定向

文章目录

  • 1、springMVC回顾
  • 2、前端普通类型和对象传值
    • 1、普通字符串
    • 2、中文乱码问题
    • 3、传递对象

1、springMVC回顾

@RequestMapping()注解的位置区别

  • 只在方法上

    那就是@RequestMapping()括号内的URL请求地址

  • 类上+方法上

    将类上与方法上的@RequestMapping()注解的参数进行拼接,请求得到的URL地址

  • 所以视图是可以重用的

  • WEB-INF目录下的所有资源,只能够被servlet或Controller访问(被程序访问),保证安全

@Controller和@RestController区别

  • @Controller跳转视图,会经过视图解析器解析称一个前端页面
  • @RestController返回对应的文本内容

return返回

后台可以使用Model给前端传值

  • 默认为转发(URL不变化)

  • 变成重定向:redirect

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/spring")
public class HelloController {//实际请求的是/spring/hello,也就是类映射路径加上方法的映射路径// 当请求/hello这个URL的时候,返回/WEB-INF/jsp/hello.jsp页面@RequestMapping("/hello1")public String hello1(Model model) {model.addAttribute("msg", "hello1,springmvc");//请求转发到/WEB-INF/jsp/hello.jsp页面return "hello";}@RequestMapping("/hello2")public String hello2(Model model) {model.addAttribute("msg", "hello2,springmvc");//重定向到index界面return "redirect:/index.jsp";}
}

2、前端普通类型和对象传值

1、普通字符串

登录界面:index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录</title>
</head>
<body>
<
<form action="/login" method="post"><p>用户名<input type="text" name="name"></p><p><input type="password" name="password"></p><input type="submit">
</form>
</body>
</html>

保证请求的字段(form表单中的name属性)要和方法接收到的参数名一致

Controller类:LoginController

@Controller
public class LoginController {//@RequestParam("name")将前端的参数其别名为后端的参数//name是前端的变量名//username是后端的变量名@RequestMapping("/login")public String login(@RequestParam("name") String username, String password, Model model) {System.out.println("接收到了username:" + username + ",password:" + password);model.addAttribute("msg", username);return "hello";}
}

2、中文乱码问题

这个时候我们发现在页面上会有中文乱码问题,SpringMVC给我们提供了一个乱码过滤器

在web.xml中进行配置

<!--添加乱码过滤器-->
<filter><filter-name>CharacterEncodingFilter</filter-name><!--这里我们使用的是spring自带的过滤器,当然你也可以自己写一个过滤器类,将这个过滤器类设置到下面--><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><!--编码格式--><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param>
</filter>
<!--/   表示过滤所有的请求,不包括jsp/*  表示过滤所有的请求,包括jsp
-->
<filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

3、传递对象

添加Lombok依赖

实体类:User

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private int id;private String username;private String password;
}

如果参数比较多,就把这些参数封装成一个对象,保证前端传递的参数名和对象的属性名一致就可以

@RequestMapping("/login2")
//在这儿,参数是一个对象,那么我们只需要使用对象的属性就可以了
public String login2(User user, Model model) {System.out.println("接收到了username:" + user.getUsername() + ",password:" + user.getPassword());model.addAttribute("msg", user.getUsername());return "hello";
}

如果前端的参数与后台的参数名称不一致,那么可以使用注解@RequestParam(“前端参数名”),将前端传递的参数映射为后端的参数名,解决前端参数和后台参数名称不一致的问题

//@RequestParam("name")将前端的参数其别名为后端的参数
//name是前端的变量名
//username是后端的变量名
@RequestMapping("/login")
//将前端参数name映射到后台参数username
public String login(@RequestParam("name") String username, String password, Model model) {System.out.println("接收到了username:" + username + ",password:" + password);model.addAttribute("msg", username);return "hello";
}