SpringMVC学习(三)

转发

无视图解析器

    @RequestMapping("/t2")
    public String test2(){
        return "/WEB-INF/views/test.jsp";
    }
    @RequestMapping("/t2")
    public String test2(){
        return "forward:/WEB-INF/views/test.jsp";
    }

有视图解析器

return:默认转发

    @RequestMapping("/t2")
    public String test2(){
        return "test";
    }

重定向

重定向不需要视图解析器,本质就是重新请求一个新东方,所以只需要注意路径问题!

可以重定向到另外一个请求实现;

    @RequestMapping("/t4")
    public String test4(){
        return "redirect:/index.jsp";
    }

数据处理

处理提交数据

1、提交的域名称和处理方法的参数名一致

提交数据: http://localhost:8080/hello?name=zhangsan

处理方法:

@RequestMapping("/param")
public String test(String name){
    System.out.println(name);
    return "hello";
}

2、提交的域名称和处理方法的参数不一致

提交数据: http://localhost:8080/hello?username=zhangsan

处理方法:

//@RequestParam("username") : username:提交的域的名称 .
@RequestMapping("/hello")
public String hello(@RequestParam("username") String name){
    System.out.println(name);
    return "hello";
}

3、提交一个对象

实体类User

package com.star.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String username;
    private int age;
    private String sex;
}

处理方法:

@RequestMapping("/user")
public String test(User user){
    System.out.println(user);
    return "hello";
}

注意:如果使用对象的话,前端传递的参数名和对象名必须一致,否则就是null。

数据显示到前端

1、ModelAndView

public class ControllerTest1 implements Controller {

    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //返回一个模型视图对象
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","ControllerTest1");
        mv.setViewName("hello");
        return mv;
    }
}

2、ModelMap

    @RequestMapping("/param")
    public String test(@RequestParam() String name, ModelMap model){
        System.out.println(name);
        model.addAttribute("username",name);
        return "hello";
    }

3、Model

    @RequestMapping("/param")
    public String test(@RequestParam() String name, Model model){
        System.out.println(name);
        model.addAttribute("username",name);
        return "hello";
    }

对比

Model:只有几个方法只适用于储存数据,简化了新手对于Model对象的操作和理解;

ModelMap:继承了LinkedMap,除了实现自身的一些方法,同样的继承LinkedMao的方法和特性;

ModelAndView:可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。

乱码问题

测试乱码

1、在首页编写一个提交表单

<form action="encode" method="post">
    <input type="text" name="name">
    <input type="submit">
</form>

2、后台编写对应的处理类

    @PostMapping("/encode")
    public String test(String name,Model model){
        model.addAttribute("name",name);//将数据传到前端
        return "hello";
    }

3、前端页面

<h1>${name}</h1>

测试结果:

可以看到出现乱码,SpringMVC为我们提供了一个过滤器,可以在web.xml中配置。

    <filter>
        <filter-name>encoding</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>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
posted @ 2020-03-16 17:26  陌星灬  阅读(147)  评论(0编辑  收藏  举报