springMVC 控制层到视图Controller to view和视图到控制层View to Controller的参数传递

视图到控制层View to Controller

package cn.smbms.controller;

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

@Controller
public class UserController {
	
	private Logger logger=Logger.getLogger(IndexController.class);

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

地址栏中输入:
http://localhost:8080/SMBMS_MVC/welcome?username=zhangsan
控制台信息可以看到日志信息:
2019-6-1 16:42:39[ INFO](IndexController.java:25) index:zhangsan
上述方法中如果输入:

`http://localhost:8080/SMBMS_MVC/welcome`

此时页面就会报错,因为参数username不存在导致报错,这样就需要使用@RequestMapping以及@RequestParam来解决。

@RequestMapping

  负责将不同请求映射到对应的控制器方法上。最重要的是@RequestMapping是全局唯一。
1、通过请求URL进行映射

@RequestMapping("/welcome")或@RequestMapping(value="/welcome")

@RequestMapping不仅可以在方法处定义,还可以在类定义。

@Controller
@RequestMapping("/user")
public class UserController {
	
	private Logger logger=Logger.getLogger(IndexController.class);

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

以上的访问地址就是:
http://localhost:8080/SMBMS_MVC/user/welcome?username=zhangsan

2、通过请求参数、请求方法进行映射

package cn.smbms.controller;



import org.apache.log4j.Logger;
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;

@Controller
public class IndexController{
	
	private Logger logger=Logger.getLogger(IndexController.class);

	@RequestMapping(value="/welcome",method=RequestMethod.GET,params="username")
	public String welcome1(@RequestParam String username){
		logger.info("index:"+username); 
		return "index";
	}
	
}

http://localhost:8080/SMBMS_MVC/welcome?username=zhangsan中参数不是username,也会报错,无法进入welcome的处理方法中。如果将方法的参数去掉@RequestParam,虽然不会报错,但是取不到值。

2、@RequestParam
在方法入参处指定@RequestParam的请求参数,
value:参数名
required:是否必须,默认为true。表示是否参数中必须包含对应的参数名,如果不包含,则报错。
defaultValue:默认参数名,不推荐用。

package cn.smbms.controller;



import org.apache.log4j.Logger;
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;

@Controller
public class IndexController{
	
	private Logger logger=Logger.getLogger(IndexController.class);

	@RequestMapping(value="/welcome",method=RequestMethod.GET,params="username")
	public String welcome1(@RequestParam(value="username",required=false) String username){
		logger.info("index:"+username); 
		return "index";
	}
	
}

运行正确,如果没有传参,也不会报错,如果传参,就能取到值。

控制层到视图Controller to view

有多种方式输出
1、ModelAndView

package cn.smbms.controller;

import org.apache.log4j.Logger;
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;

@Controller
public class IndexController{
	
	private Logger logger=Logger.getLogger(IndexController.class);

	@RequestMapping("/index1")
	public ModelAndView index(String username){
		ModelAndView modelAndView=new ModelAndView();
		//第一个是key值,保证爱Model作用域内唯一就可以,第二个value
		modelAndView.addObject("username", username);
		modelAndView.setViewName("index");
		logger.info("springMVC");
		return modelAndView;
	}
	
}

访问http://localhost:8080/SMBMS_MVC/index1?username=zhangsan,在页面中取值username------>${username},值为zhangsan

2、Model

package cn.smbms.controller;



import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
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;

@Controller
public class IndexController{
	
	private Logger logger=Logger.getLogger(IndexController.class);

	@RequestMapping("/index2")
	public String index2(String username,Model model){
		model.addAttribute("username",username);
		model.addAttribute(username);
		return "index";
	}
	
}

model.addAttribute(“username”,username);的key值也不是必须的,可以在页面中直接通过类型获取

username------>${string}

重新访问,得到的结果有效。
相同的道理,可以加入一个类型,例如

	@RequestMapping("/index2")
	public String index2(String username,Model model){
		model.addAttribute("username",username);
		model.addAttribute(username);
		User user=new User();
		user.setName(username);
		model.addAttribute(user);
		return "index";
	}

取值时

    <h1>username------>${username}</h1>
    username------>${string}
    User.name---->${user.name}

一样得到想要的值

3、Map

@RequestMapping("/index3")
	public String index3(String username,Map<String,Object> model){
		model.put("username", username);
		return "index";
	}

直接通过${username}获得值,Model其实就是一个Map结构,同样可以用来获取值。

springMVC一般都是使用Model取值。

发布了7 篇原创文章 · 获赞 0 · 访问量 157

猜你喜欢

转载自blog.csdn.net/a3562323/article/details/90731217