欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【SpringMVC】@Controller和@RequestMapping注解说明

程序员文章站 2022-05-29 15:17:49
...

一、@Controller注解

1、说明:

用于指示Spring类的实例是一个控制器,控制器可以支持同时处理多个请求动作。

 

2、保证Spring能找到控制器:

1)在SpringMVC的配置文件的头文件中引入spring-context

2)使用<context:component-scan/>元素,启动包扫描功能。

注:<context:component-scan base-package="com.lwt.controller"/>可指定扫描包。


二、@RequestMapping注解

 

1、说明:

该注解用来映射一个请求。指示Spring用哪一个类或非法来处理请求动作。不属于参数绑定注解。

 

例如:@RequestMapping(value="/hello")

 

2、支持的属性:

【SpringMVC】@Controller和@RequestMapping注解说明


3、常用属性示例:

 

1value属性:将URL映射到方法上。

 

@RequestMapping(value="/hello")

public  ModelAndView  hello(){

return ..;

}

地址:http://localhost:8080/context/hello

 

                   注:value属性是@RequestMapping注释的默认属性,如果只有唯一的属性,则可以省略该属性名。

     value属性的值也可以是一个空字符串。

 

2method属性:该属性用来指示该方法仅仅处理哪些HTTP请求方式。

   

     @RequestMapping(value="/hello",method=RequestMethod.POST)

     表示该方法只支持POST请求。

     也可以同时支持多个HTTP请求方式:

     @RequestMapping(value="/hello",method={RequestMethod.POST,RequestMethod.GET})

 

       注:如果没有指定method属性值,则请求处理方法可以处理任意的HTTP请求方式。   

 

 

3consumes属性:指定处理请求的提交内容类型(Content-Type

 

      @RequestMapping(value="/hello",method=RequestMethod.POST,consumes="application/json")

      表示该方法仅处理request Content-Type"application/json"类型的请求。

 

4produces属性:指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型。

 

     @RequestMapping(value="/hello" , method=RequestMethod.POST,produces="application/json")

     表示该方法仅处理Request请求中请求头中包含了"application/json"的请求,同时指明了返回的内容类型为application/json

 

5params属性:指定request中必须包含某些参数值时,才让该方法处理。

 

     @RequestMapping(value="/hello",method=RequestMethod.POST,params="myParam = myValue")

    表示该方法仅处理其中名为"myParam",值为myValue的请求。

 

6hearders属性:该属性指定request中必须包含某些指定的header值,才能让该方法处理请求。

 

   @RequestMapping(value="/hello" , method=RequestMethod.POST,headers="Referer=http://www.lwt.org/")

  表示该方法仅处理requestheader中包含了指定"Referer"请求头和对应值为"http://www.lwt.org/"的请求。

 

 

4ModelModelAndView

 

说明:控制器(Controller)执行业务逻辑,用于产生模型数据(Model),而视图(View),则用于渲染模型数据。

 

Spring提供了多种途径输出模型数据:

· Model和ModelMap

· ModelAndView

· @ModelAttribute

· @SessionAttributes



1Model ModelMap

 

    SpringMVC使用了Model接口存储模型数据,ModelMap接口实现了Map接口。

  

    说明:SpringMVC调用处理方法之前会创建一个隐含的模型对象,作为模型数据的存储容器。

如果处理方法为ModelModelMap类型,则SpringMVC会将数据引用传递给这些参数。

              

                添加模型数据方法:

addObject(String attributeName , Object  attributeValue);

 

 

实例一:ModelModelMap的使用

		// Controller注解用于指示该类是一个控制器,可以同时处理多个请求动作
		@Controller
		public class User1Controller {
		
			private static final Log logger = LogFactory.getLog(User1Controller.class);
		
			// @ModelAttribute修饰的方法会先于login调用,该方法用于接收前台jsp页面传入的参数
			@ModelAttribute
			public void userModel(String loginname, String password, Model model) {
				logger.info("userModel");
				// 创建User对象存储jsp页面传入的参数
				User user = new User();
				user.setLoginname(loginname);
				user.setPassword(password);
				// 将User对象添加到Model当中
				model.addAttribute("user", user);
			}
		
			@RequestMapping(value = "/login1")
			public String login(Model model) {
				logger.info("login");
				// 从Model当中取出之前存入的名为user的对象
				User user = (User) model.asMap().get("user");
				System.out.println(user);
				// 设置user对象的username属性
				user.setUsername("测试");
				return "result1";
			}
		
		}

注意:@ModelAttribute修饰的方法会先于login调用

		@ModelAttribute
		public void userMode2(String loginname,String password,
				 ModelMap modelMap){
			logger.info("userMode2");
			// 创建User对象存储jsp页面传入的参数
			User user = new User();
			user.setLoginname(loginname);
			user.setPassword(password);
			// 将User对象添加到ModelMap当中
			modelMap.addAttribute("user", user);
		}
		
		@RequestMapping(value="/login2")
		 public String login2(ModelMap modelMap){
			logger.info("login2");
			// 从ModelMap当中取出之前存入的名为user的对象
			User user = (User) modelMap.get("user");
			System.out.println(user);
			// 设置user对象的username属性
			user.setUsername("测试");
			return "result2";

}

注:将存储对象改为ModelMap

2ModelAndView:既包含模型数据信息,也包含视图信息。

 

添加模型数据:

addObject(String attributeName , Object attributeValue);

设置视图:

setViewName(String  viewName);

 

 

实例二:ModelAndView的使用

		private static final Log logger = LogFactory.getLog(User3Controller.class);
		
		@ModelAttribute
		public void userMode3(String loginname,String password,
				 ModelAndView mv){
			logger.info("userMode3");
			User user = new User();
			user.setLoginname(loginname);
			user.setPassword(password);
			// 将User对象添加到ModelAndView的Model当中
			mv.addObject("user", user);
		}
		
		@RequestMapping(value="/login3")
		 public ModelAndView login3(ModelAndView mv){
			logger.info("login3");
			// 从ModelAndView的Model当中取出之前存入的名为user的对象
			User user = (User) mv.getModel().get("user");
			System.out.println(user);
			// 设置user对象的username属性
			user.setUsername("测试");
			// 设置返回的视图名称
			mv.setViewName("result3");
			return mv;

}