SpringMVC

SpringMvc概述

Spring MVC就是一个MVC框架

Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。从这样一个角度来说,Spring MVC和Struts、Struts2非常类似。Spring MVC的设计是围绕DispatcherServlet展开的,DispatcherServlet负责将请求派发到特定的handler。通过可配置的handler mappings、view resolution、locale以及theme resolution来处理请求并且转到对应的视图。

pring3.x中定义一个控制器类,必须以@Controller注解标记。当控制器类接收到一个请求时,它会在自己内部寻找一个合适的处理方法来处理请求。使用@RequestMapping注解将方法映射到一些请求上,以便让该方法处理那些请求。这种方法就像一般的类中的方法,方法名参数列表和返回值并不像Struts2之类的框架有很强的限制。方法参数列表具体以及返回值具体都有哪些,这里先不细说。这篇博客的目的在于简单介绍如何快速上手使用Spring MVC框架。

控制器在选择好适合处理请求的方法时,传入收到的请求(根据方法参数类型,可能以不同的类型传入),并且调用该方法中的逻辑来进行处理(也可以是调用Service来真正处理)。方法逻辑可能也会在参数中添加或者删除数据。处理方法处理完之后,会委派给一个视图,由该视图来处理方法的返回值。处理程序的返回值并不代表视图的具体实现,可以只是String类型,代表视图名,甚至是void(这时候Spring MVC可以根据方法名或者控制器名找默认视图)。也不需要担心返回值只是视图名称的话,视图拿不到要显示的数据。因为方法参数对于视图来说也是可以拿到的。比如说,如果处理方法以Map为参数,那么这个Map对于视图也是可以拿到的。

返回的视图名称会返回给DispatcherServlet,它会根据一个视图解析器将视图名称解析为一个具体的视图实现。这里说到的视图解析器是一个实现了ViewResolver借口的Bean,它的任务就是返回一个视图的具体实现(HTML、JSP、PDF等等).

‌Spring MVC的常用注解包括以下几类‌:

‌控制器注解‌

@Controller‌:用于标识一个类为SpringMVC的控制器,处理HTTP请求并返回响应结果。‌

@RestController‌:标识一个类为Rest风格的控制器,所有方法默认返回JSON或XML格式的响应结果。‌

‌请求映射注解‌

@RequestMapping‌:用于映射Web请求,包括访问路径和参数。‌

@GetMapping‌、‌@PostMapping‌、‌@PutMapping‌、‌@DeleteMapping‌‌:根据请求类型使用不同的注解处理GET、POST、PUT、DELETE等请求。

‌依赖注入注解‌

@Resource‌:用于bean的注入,可以写在字段和setter方法上,支持ByName和ByType自动注入。‌

@Autowired‌:用于自动注入依赖,可以写在字段和setter方法上,支持byType和byName注入。‌

@Qualifier‌:与@Autowired一起使用,用于指定具体的Bean名称进行注入,解决多个匹配Bean的歧义问题。‌

‌其他常用注解‌

@PathVariable‌:用于将请求URL中的模板变量映射到功能处理方法的参数上。‌

@ResponseBody‌:支持将返回值放在response内,通常用于返回JSON数据。

@RequestBody‌:允许request的参数在request体中,而不是直接连接在地址后面。

访问自定义方式

方式一(注解方式):

@RequestMapping(“/映射路径”)

开启扫描注解

在配置文件中配置视图解析器

方式二(XML方式【不常用】):

去掉之前控制器实现的 Controller 接口,改为继承 多方法控制器(需要注意SpringMVC的

版本不能太高)

在配置文件中配置方法解析器

将方法解析器依赖注入到bean标签

RequestMapping详解

package com.hwq.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class MappingController {
    /*
    一个路径映射一个方法
     */
    @RequestMapping("/test1")
    public String test1() {
        System.out.println("方法访问");
        return "index";
    }
    /*
    多个路径映射一个方法
     */
    @RequestMapping(value = {"/test2","/test21","/test22"})
    public String test2() {
        System.out.println("方法访问2");
        return "index";
    }
    /*
    多个路径映射一个方法     通配符方法
            *  0个或者多个
            ?  有且只有一个
     */
    @RequestMapping(value = {"/test3*"})
    public String test3() {
        System.out.println("方法访问3");
        return "index";
    }
    @RequestMapping(value = {"/test13?"})
    public String test31() {
        System.out.println("方法访问31");
        return "index";
    }
    @RequestMapping(value = {"/test3/*"})
    public String test32() {
        System.out.println("方法访问32");
        return "index";
    }
    @RequestMapping(value = {"/test13/?"})
    public String test33() {
        System.out.println("方法访问33");
        return "index";
    }
    /*
    限定方法的请求方式
     */
    @RequestMapping(value = "/test4",method = RequestMethod.GET)
    public String test4() {
        System.out.println("方法访问4");
        return "index";
    }
    /*
    限定方法的请求方式
     */
    @RequestMapping(value = "/test5",params = "username")
    public String test5(String username) {
        System.out.println("方法访问5"+username);
        return "index";
    }
    /*
    限定方法的请求方式
     */
    @RequestMapping( value = "/test6")
    public String test6(@RequestParam(required = true,  defaultValue = "郝伟强", value = "名字")String username) {
        System.out.println("方法访问6"+username);
        return "index";
    }
    @RequestMapping( value = "/test7")
    public String test7(@RequestHeader("Cookie") String username) {
        System.out.println("方法访问7"+username);
        return "index";
    }
}

一个路径映射一个方法

多个路径映射一个方法

限定方法的请求方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值