@CLSChen
2019-10-01T14:39:59.000000Z
字数 2250
阅读 777
未分类
指示Spring类的实例是一个控制器。
Spring使用扫描机制来找到应用程序中所有基于注解的控制器类。我们要做两件事情:
1.声明spring-context。
2.应用component元素。
总之就是在配置文件中声明控制器所在的包的位置。
映射一个请求和一个方法,可以用@RequestMapping注解一种方法或类。
@RequestMapping后面跟的值加在网址后面,即可跳转到它修饰的方法(类)。
@RequestMapping(value = "/input") 等价于@RequestMapping("input")method用于指示该方法仅处理哪些HTTP方法@RequestMapping(value = "/input",method = {RequestMethod.POST, RequestMethod.PUT})如果只有一个方法就不需要花括号@RequestMapping(value = "/input", method = RequestMethod.PUT)如果没有指定method值,那么就可以处理任意HTTP方法
@RequestMapping修饰一个类时,里面的方法先映射到类的@RequestMapping上,再映射到方法的@RequestMapping上。
@RequestMapping("/Customer")public class CustomerController{@RequestMapping("/123")public String method(){}}要对应到method的网址后缀为"/Customer/123"
在@RequestMapping修饰的方法中,可以传入一些对象,Spring会自动帮我们识别这些对象。如:
@RequestMappingpublic String method(HttpServletRequest request, Locale locale)可以使用这些对象:HttpServletRequest, HttpServletResponse, HttpSession, InputStream, OutputStream, Model, ModelMap...可以返回这些对象:ModelAndView, Model, Map, View, String, void, Callable, DeferredResult...
将依赖注入到SpringMVC控制器最简单的方法是通过@Autowired到字段或方法。
此外,为了能作为依赖注入,类必须要注明为@Service。
@Controllerpublic class ProductController{@AutoWiredprivate ProductService productService;// 使用@AutoWried注解会使得ProductService的一个实例被注入到ProductController实例中。}为了能被Spring扫描到,必须为类标注@Service。@Servicepublic class ProductServiceImpl implements ProductService{}
在配置文件中,有两个scan元素,分别用来扫描控制器类和服务类。
可以通过URL来向服务器发送值。有两种方法:
http://localhost:8080/?productId=31.使用HttpServletRequest的getParameter方法来获取一个请求参数值。String productId = httpServletRequest.getParameter("productId");2.将@RequestParam添加到方法参数中直接获取值。public void sendProduct(@RequestParam int productId){}
还可以使用路径变量
http://localhost:8080/view-product/1/2@RequestMapping(value = "/view-product/{userId}/{orderId}")public void sendProduct(@PathVariable int userId,@PathVariable int orderId){}
我们知道,在调用请求处理方法时,会创建Model类型的一个实例。我们可以在方法中添加一个(Model model)参数来使用该实例,还可以通过@ModelAttribule注解来访问Model实例。
每次调用如下方法,会使用键值order将Order实例添加到Model对象中。public String submitOrder(@ModelAttribute Order order, Model model)
@ModelAttribule的第二个用途是标注一个非请求的处理方法。被@ModelAttribule注解的方法会在每次调用该控制器类的请求处理方法时被调用。这意味着只要被它注解的方法会被调用的更为频繁。
@ModelAttribulepublic Product addProduct(@RequestParam String productId){return productService.get(productId);}