美丽的蓝图,落在懒汉手里,也不过是一页废纸。
在SpringMVC中,控制器只是方法上添加了@RequestMapping注解的类,这个注解声明了他们所要处理的请求。
@Controller注解用来声明控制器,它基于@Component注解,它的目地就是辅助实现组件扫描。
package chapter5.practice3;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
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.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/games")
public class PlayGameController {
/**
* 返回至baskerball.jsp页面
* @param game 接受查询参数
* @return
*/
@RequestMapping("/play")
public String playGame(@RequestParam("game") String game) {
System.out.println("I can play " + game);
return "basketball";
}
/**
* 返回JSON数据
* @return
*/
@ResponseBody
@RequestMapping(value = "/show", produces = "application/json;charset=UTF-8")
public Map<String, Object> showAllGames() {
Map<String, Object> gamesMap = new HashMap<String, Object>();
java.util.List<String> gameList = new ArrayList<String>();
gameList.add("DNF");
gameList.add("LOL");
gamesMap.put("gameList", gameList);
return gamesMap;
}
/**
* 表单参数
* @param game
* @return
*/
@RequestMapping(value="/isExisit", method=RequestMethod.POST)
public String gameIsExisit(Game game) {
return "yes";
}
/**
* 路径参数
* @param gameId
* @return
*/
@RequestMapping(value="/{gameId}",method=RequestMethod.GET)
public String showGameImg(@PathVariable String gameId) {
return "showGameImg";
}
}
以上代码定义了一个简单的SpringMVC控制器。
1. 其中类级别上的@RequestMapping定义了该控制器类类级别的请求处理,platGame方法上的@RequestMapping定义了该方法的请求处理。
2. SpringMVC控制器返回类型常用的有以下几种:
1)ModelAndView
顾名思义返回带model数据的view,即返回model数据和视图名称。
@RequestMapping(value="/showGameInfo", method=RequestMethod.POST) public ModelAndView showGameInfo() { //通过构造器指定跳转的页面 ModelAndView gameModelAndView = new ModelAndView("gameDetail"); //也可以通过setViewName方法设定gameModelAndView.setViewName("gameDetail"); Map<String, Object> gamesMap = new HashMap<String, Object>(); java.util.List<String> gameList = new ArrayList<String>(); gameList.add("DNF"); gameList.add("LOL"); gamesMap.put("gameList", gameList); //addObject方法装载model数据 gameModelAndView.addObject("gamesMap", gamesMap); return gameModelAndView; }
2)String
返回跳转的视图名称。
需要注意的是:
(1)如果方法声明了@ResponseBody,则会将该字符串值输出到页面;
(2)如果字符串中形式为"redirect:basketball",则表示跳转页面的方式为重定向,将不会携带上次请求的request;
(3)如果字符串中形式为"forward:basketball",则表示跳转页面的方式为转发,将携带上次请求的request。
@RequestMapping("/play") public String playGame(@RequestParam("game") String game) { System.out.println("I can play " + game); return "basketball"; }
3)Void
当返回类型为void时,返回的页面为对应的访问地址。如下代码,该请求的响应页面"/index"
@RequestMapping(value="/index", method=RequestMethod.POST) public void index() { System.out.println("index..."); }
3. SpringMVC允许以多种方式将客户端中的数据传送到控制器的处理方法中:
1)查询参数
2)表单参数
3)路径变量
原文地址:https://www.cnblogs.com/dandelZH/p/9043610.html