美文网首页
三、参数的传递与视图解析器

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

作者: lifeline张 | 来源:发表于2019-01-24 17:23 被阅读0次

    一、本课目标

    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

    相关文章

      网友评论

          本文标题:三、参数的传递与视图解析器

          本文链接:https://www.haomeiwen.com/subject/cunzcqtx.html