三、参数的传递与视图解析器

一、本课目标

image.png

二、参数传递

如何把参数从view层传递给controller
示例代码:

package cn.smbms.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import com.sun.istack.internal.logging.Logger;

@Controller
public class IndexController {

    private Logger logger = Logger.getLogger(IndexController.class);
    
    @RequestMapping("/index")
    public String index() {
        logger.info("hello, springmvc");
        return "index";
    }
    
    @RequestMapping("/welcome")
    public String welcome(@RequestParam String username) {
        logger.info("hello, springmvc! username:" + username);
        return "index";
    }
}

image.png

此时如果使用第一个访问地址,则可以正常运行,如果采用第二个,则会出错。所以就引出这个问题:实际业务需求中,对参数的需求并不是必须的,怎么解决?

2.1RequestMapping

image.png

在之前的学习中,如果一个普通的javaBean要变成一个控制器,则在他上面要加上controller注解,针对不同的业务需求,要建立不同的controller,在不同的controller里面有不同的方法,如何把不同的请求与相应的方法对应起来呢?此时就需要@requestMapping注解。所以@requestMapping注解的映射必须是全局唯一的,不可能一个请求映射到两个处理方法上。
示例代码:
在添加一个controller:

package cn.smbms.controller;

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

import com.sun.istack.internal.logging.Logger;

@Controller
@RequestMapping("/user")
public class UserController {

    private Logger logger = Logger.getLogger(IndexController.class);

    @RequestMapping("/welcome")
    public String welcome(@RequestParam String username){
        logger.info("hello, springmvc! username:" + username);
        return "index";
    }
}

在这个controller中,在类的前面也添加了注解requestMapping,这个里面有一个参数,这个参数的意思是在welcome前面还有一集目录user,此时再去访问的话就正常了。
在整个web应用中,requestMapping映射的请求信息必须保持唯一性。在实际开发中,我们经常在类前面加上requestMapping,这样的话就可以把同一个controller下的方法都安排在同一个请求下。

映射规则

  • 通过请求url进行映射
  • 通过请求参数进行映射:如果选择方法参数直接入参的话,方法入参名必须与请求中参数名保持一致
  • 通过请求方法进行映射(get、post)
package cn.smbms.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import com.sun.istack.internal.logging.Logger;

@Controller
public class IndexController {

    private Logger logger = Logger.getLogger(IndexController.class);
    
    @RequestMapping("/index")
    public String index() {
        logger.info("hello, springmvc");
        return "index";
    }
    
    @RequestMapping(value="/welcome", method=RequestMethod.GET, params="username")
    public String welcome(@RequestParam String username) {
        logger.info("hello, springmvc! username:" + username);
        return "index";
    }
}

2.2RequestParam

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容