Controller 现代方式

Controller 现代方式
两种URL请求模
传统URL请求路径
Restful方式URL请求路径
两种Model定义
Model model定义,对应传参方法:model.addAttribute(course)
Map<String,Object> model定义,对应传参方法:model.put("course",course)
上面是jsp风格代码写法, 下面是 restful 风格代码写法
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。
Restful风格

Controller——现代方式
通过注解SpringMVC可以识别Controller,并且将请求映射到正确的方
法。
【步骤1】:通知SpringMVC的DispatcherServlet这是一个Controller,所以在类上添加@Controller,这样它就会被DispatcherServlet上下文环境管理,并且完成它的依赖注入。
【步骤2】:指明该Controller负责处理哪一个URL,通过添加@RequestMapping("/courses"),它处理Controller负责处理根URL,也就是courses下的路径都会被它拦截到。
【步骤3】:指明映射到哪一个方法,所以在相应方法上添加注解@RequestMapping(value="/view",method=RequestMethod.GET),同时可以限制从get方法过来的请求。
【步骤4】处理前端传过来的参数,第一种方式:也就是get请求带了一个参数courseId=123,它需要被方法所识别,这里在方法的参数上绑定annotation,属性就是前端传过来的key(courseId)的名,通过在方法参数前使用@RequestParam("courseId"),这里可以通过日志查看绑定数据的行为(log.debug("In viewCourse,courseId={}",courseId)

解决不能再JSP页面引入JSTL的原因?
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
第二种方式:绑定路径参数,这里使用@PathVariable("course"),要在URL路径中显示声明这个路径,也就是在@RequestMapping注解的value属性中,在路径后使用/{courseId}花括号括起来表示一个路径变量。
例如访问路径:http://localhost:8080/view2/courseId=123

Model Map
接受传入参数 @RequestParam("")将请求参数区的参数映射到犯方法的参数上 @PathVariable("") 将请求url的路径变量“/view/{参数}”
记录:如果显示的返回model和map,spring会自动把model和map转成ModelAndView。ViewResolver会处理ModelAndView,呈现成视图。
传统方式传参:使用@RequestParam(“courseId”)进行绑定,当需要指定处理的请求方式时,加上method属性值
restful风格传参:使用@PathVariable(“courseId”)进行绑定,同样需要在RequestMapping的value属性中进行声明,value=“/view2/{courseId}”
Controller方法的两种表现形式,对应的是Model的不同表现形式,最后都会被Spring转换成ModelAndView.
requestmapping的使用
@(RequestParam("courseId")) Integer courseId可以用来将请求URL中传过来的参数绑定到controller具体方法的参数中
@RequestMapping("/courses") 类级别的
@RequestMapping(value="/view", method=RequestMethod.GET) 方法级别的
@RequestParam("courseId") 参数级别的 @Autowired
@Controller 声明这是一个controller
@(RequestParam("courseId")) Integer courseId可以用来将请求URL中传过来的参数绑定到controller具体方法的参数中

@RequestParam
@PathVariable
HttpRequest
controller两种url参数处理示例