Spring-MVC

1、快速入门(使用maven)

  • 导入SpringMVC相关坐标(Spring、Spring-MVC)

    org.springframework
    spring-context
    5.3.4


    org.springframework
    spring-webmvc
    5.3.4

  • 创建spring-mvc.xml配置文件



    
    

  • 配置SpringMVC核心控制器DispatcherServlet



    
    
        DispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:spring-mvc.xml
        
        
        1
    
    
        DispatcherServlet
        /
    

  • 创建Controller类并配置方法映射地址注解
@Controller
public class UserController {

    @RequestMapping("/say")
    public String say() {
        System.out.println("UserController Running...");
        return "say.jsp";
    }
}
  • 操作流程
    1、导入SpringMVC坐标
    2、配置核心控制器DispatcherServlet
    3、创建Controller及试图并添加注解
    4、配置SpringMVC配置文件spring-mvc.xml
    5、客户端发起请求测试

  • @RequestMapping注解
    1、可以作用在类或方法上
    2、常用属性包括value、method、param
    3、value属性值代表访问地址映射
    4、method属性值表示请求方式,是一个枚举类型
    5、param属性值代表请求参数

@Controller
@RequestMapping("/user") //添加该注解后,请求say方法变为/user/say
public class UserController {

    // 访问地址映射为/user/say,当类使用地址映射注解后,value="/say"可以写为value="say"
    // 请求方式必须为POST
    // 请求参数必须携带id
    @RequestMapping(value = "/say", method = RequestMethod.POST, params = {"id"})
    public String say() {
        System.out.println("UserController Running...");
        // 类使用RequestMapping注解设置地址映射后,如/user
        // say.jsp将会在webapp/user文件夹查找
        // 前面加/斜线,/say.jsp将会在webapp文件夹查找
        return "/say.jsp";
    }
}
  • SpringMVC核心控制器DespatcherServlet配置文件
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping,\
    org.springframework.web.servlet.function.support.RouterFunctionMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter,\
    org.springframework.web.servlet.function.support.HandlerFunctionAdapter


org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver,\
    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
  • 可通过自定义配置视图控制器来设置访问地址前后缀
public class UrlBasedViewResolver extends AbstractCachingViewResolver implements Ordered {
    public static final String REDIRECT_URL_PREFIX = "redirect:";
    public static final String FORWARD_URL_PREFIX = "forward:";
    @Nullable
    private Class viewClass;
    private String prefix = "";
    private String suffix = "";

    
    


2、数据响应

  • 转发、重定向

1、返回的路径地址默认为f orward:转发模式

// 默认为转发
@RequestMapping(value = "/say")
    public String say() {
        return "hello";
    }

2、使用redirect:关键字,进行重定向跳转

@RequestMapping(value = "/say")
    public String say(RedirectAttributes attr) {
        attr.addAttribute("id", 123);
        attr.addAttribute("name", "tom");
        return "redirect:hello";
    }

3、使用ModelAndView进行重定向

@RequestMapping("/hi")
    public ModelAndView hi() {
        ModelAndView modelAndView = new ModelAndView("redirect:hello");
        modelAndView.addObject("id", 10000);
        return modelAndView;
    }
  • 数据回写

1、使用HttpSerlvetResponse

    @RequestMapping("/hi")
    public void hi(HttpServletResponse response) throws IOException {
        response.getWriter().print("hello");
    }

2、使用@ResponseBody注解

@ResponseBody注解的作用是告诉适配器以相应消息体的形式返回数据,不加载视图就必须添加该注解

    @RequestMapping("/hi")
    @ResponseBody
    public String hi() {
        return "hello world";
    }

3、返回对象或集合



    com.fasterxml.jackson.core
    jackson-databind
    2.12.0


    com.fasterxml.jackson.core
    jackson-annotations
    2.12.0


    com.fasterxml.jackson.core
    jackson-core
    2.12.0




    
    
    
    

    @RequestMapping("/hi")
    @ResponseBody
    public User hi() {
        User user = new User(10000, "小红");
        return user;
    }

    @RequestMapping("/hello")
    @ResponseBody
    public List hello() {
        List list = new ArrayList<>();

        User user1 = new User(10000, "小红");
        User user2 = new User(10001, "小补丁");

        list.add(user1);
        list.add(user2);
        return list;
    }

3、获取请求参数

  • 请求参数名与方法形参名相同
// 请求地址 http://localhost:8080/springmvc/user/hi?username=hello&password=23423
@RequestMapping("/hi")
@ResponseBody
public void hi(String username, String password) {
    System.out.println("username:" + username + " password:" + password);
}
  • 获取普通对象

请求参数与类属性一致,可以将参数直接赋予对象属性

// 请求地址 http://localhost:8080/springmvc/user/hi?id=10000&name=abcd
@RequestMapping(value = "/hi", method = RequestMethod.POST)
    @ResponseBody
    public void hi(User user) {
        System.out.println(user.getId() + "/" + user.getName());
    }
class User {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  • 获取数组
// 请求地址 http://localhost:8080/springmvc/user/hi?arr=tom&arr=jerry
@RequestMapping(value = "/hi")
    @ResponseBody
    public void hi(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
  • 获取集合

客户端传递json数据,以键值对的形式;访问方法形参需要使用@RequestBody注解,可以直接获取请求消息体的数据

@RequestMapping(value = "/hi")
    @ResponseBody
    public void hi(@RequestBody Map map) {
        Integer id = (Integer) map.get("id");
        String name = (String) map.get("name");
        String gender = (String) map.get("gender");
        System.out.println(id + "/" + name + "/" + gender);
    }
  • web.xml配置解决中文乱码

    encoding
    org.springframework.web.filter.CharacterEncodingFilter
    
        encoding
        UTF-8
    


    encoding
    /*

  • @RequestParam注解
    1、value:请求参数名称
    2、required:是否必须传值,默认true
    3、defaultValue:默认值
@RequestMapping(value = "/hi")
    @ResponseBody
    public void hi(@RequestParam(value = "uname", required = false, defaultValue = "tom") String username) {
        System.out.println(username);
    }

你可能感兴趣的:(Spring-MVC)