@CLSChen
2019-10-01T14:39:59.000000Z
字数 2250
阅读 722
未分类
指示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会自动帮我们识别这些对象。如:
@RequestMapping
public String method(HttpServletRequest request, Locale locale)
可以使用这些对象:
HttpServletRequest, HttpServletResponse, HttpSession, InputStream, OutputStream, Model, ModelMap...
可以返回这些对象:
ModelAndView, Model, Map, View, String, void, Callable, DeferredResult...
将依赖注入到SpringMVC控制器最简单的方法是通过@Autowired到字段或方法。
此外,为了能作为依赖注入,类必须要注明为@Service。
@Controller
public class ProductController{
@AutoWired
private ProductService productService;
// 使用@AutoWried注解会使得ProductService的一个实例被注入到ProductController实例中。
}
为了能被Spring扫描到,必须为类标注@Service。
@Service
public class ProductServiceImpl implements ProductService{}
在配置文件中,有两个scan元素,分别用来扫描控制器类和服务类。
可以通过URL来向服务器发送值。有两种方法:
http://localhost:8080/?productId=3
1.使用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注解的方法会在每次调用该控制器类的请求处理方法时被调用。这意味着只要被它注解的方法会被调用的更为频繁。
@ModelAttribule
public Product addProduct(@RequestParam String productId){
return productService.get(productId);
}