SpringMVC的学习总结(一)

SpringMVC的学习总结

学习要点

1.注解的归纳总结
2.@Controller注解的了解
3.@RequestMapping注解的使用
4.@ModelAttributeModelModelAndView的模型数据与视图的了解
5.@RequestParam参数绑定注解的使用
6.@PathVariable注解的使用(动态绑定参数)

注解的归纳总结

根据org.springframework.web.bind.annotation包中对request的不同内容部分可以分为四类,
    1.处理request Body部分的注解:@RequestParam @RequestBody
    2.处理request uri部分的注解:@PathVariable
    3.处理request header部分的注解:@requestHeader,@CookieValue
    4.处理attribute类型的注解:@SessionAttributes,@ModelAttribute

@Controller注解:


    控制器注解,标识一个类为控制器结合@RequestMapping注解实现用户的请求分分发和控制,同时使用此注解需要在配置文件配置以下:
    1.配置文件的头部,需要添加spring-context的头文件的支持
    2.需要在配置文件中添加注解扫描器打开
        <context:component-scan  base-package="com.pkk"/>,配置之后,会扫描com.pkk下面的所有包和所有的类,把包含@Controller@Service,@repositry,@Component的注解的标志为一个bean

@RequestMapping注解的使用

    作用域:类或方法
    作用:控制器控制请求的地址与实际处理的业务映射
         作用到类上:所有请求都需要添加类中所填写的value值,作为一个模块的使用,可有效的防止不同类相同方法的映射名称相同。
         作用到方法上:控制器的所有的请求都被映射到value的
    属性见下:

这里写图片描述
请求处理时可以在方法中出现的参数类型:
这里写图片描述
这里写图片描述
请求方法可返回的参数类型:
这里写图片描述


@ModelAttribute和Model和ModelAndView的模型数据与视图的了解

    Model和ModelAndView常出现在请求处理方法和返回的参数类型中,他们主要适用于传输数据,是如何将模型数据传递给视图上,当然有此功能的还有:
    Model和ModelMap
    ModelAndView
    @ModelAttribute
    @SessionAttribute
SpringMVC在调用处理方法之前都会创建一个隐含的模型对象,作为模型数据的储存容器,【这也是会首先调用在一个添加@ModelAttribute的方法的原因(下面会有案例),】如果处理方法的参数是Model和ModelMap类型,则SpringMvc会将隐含模型的引用传递给这些参数,在处理方法的内部,我们可以对这个参数对象进行访问或添加新的属性,

在处理方法中,Model和ModelMap对象可以使用如下方法添加模型数据:
    addObject(String attributeName.Object attributeValues)
在处理方法的返回值的时候,如果是ModelAndView,则其包含模型数据信息,也包含视图信息,当然他也可以看成一个Map(String.Object)
    增加模型数据
        addObject(String attributeName.Object attributeValues)
    设置视图
        setViewName(String viewName)

代码举例如下:
Model和ModelMap的使用(模型数据的储存容器)

/**
 * Created by peikunkun on 2017/12/30 0030.
 */
@Controller
@RequestMapping(value = "modelAttribute")
public class ModelAttributeController {

    /*用此@ModelAttribute注解标注之后,当我们调用login的方法的时候,会首先调用userModel方法,我们把user对象放进Model或ModelMap中之后,会自动传递到login中,获取user对象*/
    @ModelAttribute
    public void userModel(String username, String password, Model model, ModelAndView modelAndView) {
        System.out.println("进入@ModelAttribute标记的方法");
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        model.addAttribute("user", user);
        modelAndView.addObject("user", user);

    }

    /*请求地址为login,设置请求方法为post或get的才会调用此方法*/
    @RequestMapping(value = "login", method = {RequestMethod.GET, RequestMethod.POST})
    public String login(Model model) {
        User user = (User) model.asMap().get("user");
        System.out.println("获取的User对象:" + user);
        return "modelAttribute";
    }

ModelAndView的使用

    /*请求地址为login1,设置请求方法为post或get的才会调用此方法*/
    @RequestMapping(value = "login1", method = {RequestMethod.GET, RequestMethod.POST})
    public ModelAndView login(ModelAndView modelAndView) {
        /*获取模型数据*/
        User user = (User) modelAndView.getModel().get("user");
        modelAndView.addObject("user", user);
        System.out.println("获取的User对象:" + user);
        /*设置要跳转的视图*/
        modelAndView.setViewName("modelAttribute1");
        return modelAndView;
    }


}

调用(login1方法)输出情况:

进入@ModelAttribute标记的方法
获取的User对象:User{id=null, username='0048', password='888888'}



//在login方法中同理Model也可以换成ModelMap,代码是一样的。

@RequestParam参数绑定注解的使用

    @RequestParam注解类型用于指定请求参数赋值的方法中的形参。
    属性讲解:
        required:默认为true(参数必传,不填报错),false,可不传该参数
        defaultValue:默认参数,当我们设置一个参数的requried为false时,这时候如果没传改参数,可以设置一个默认参数,传递了则使用传递的参数。
    全部参数见下面:

这里写图片描述

代码举例讲解:

/*请求地址为login2,设置请求方法为post或get的才会调用此方法*/
    @RequestMapping(value = "login2", method = {RequestMethod.GET, RequestMethod.POST})
    /*使用@RequestParam注解绑定前台传递的参数username和password,并且通过required=false设置为password为不必传,设置默认不传的时候密码为defaultpassword*/
    /*例如请求的是http://localhost:8080/modelAttribute/login2.action?username="123"则会通过@RequestParam的value值为username的进行映射给String的userName*/
    /*但是如果我们传了requried=true的但是为空,这是不报错的,知识有此参数没有值而已*/
    public String login(@RequestParam(value = "username", required = true) String userName, @RequestParam(value = "password", required = false, defaultValue = "defaultpassword") String passWord) {
        System.out.println("获取的用户名为:" + userName + "密码为:" + passWord);
        return "modelAttribute2";
    }

@PathVariable注解的使用(动态绑定参数)

    仅仅有Value属性为String类型,此注解主要用于动态绑定参数,如何省略value属性,则会默认绑定同名的参数(如下面的userId)
    代码举例如下:
@RequestMapping(value = "/pathVariableTest/{userId}")
    /*如果@Pathvariable注解使用了默认的value则在绑定参数的时候,会默认绑定同名的参数userId身上,
    如果找不到,则无法映射绑定参数,报异常[com.pkk.controller.ModelAttributeController.pathVariableTest(java.lang.Integer,org.springframework.ui.Model)]; nested exception is java.lang.IllegalStateException: Could not find @PathVariable [userId] in @RequestMapping]*/
    public String pathVariableTest(@PathVariable Integer userId, Model model) {
        System.out.println("获取的用户id为:" + userId);
        model.addAttribute("message", "获取的用户id为:" + userId);
        return "modelAttribute3";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值