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

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";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值